|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
26.07.2018, 16:58 | #1 | |
Сборщик мусора, или как удалить все ненужные переменные по ключу после работы LISP-скрипта?
AutoLISP
Харьков
Регистрация: 19.06.2018
Сообщений: 101
|
||
Просмотров: 4063
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
В эти "другие" функции передавай их как параметры вызова и не выдумывай велосипед.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Windows освобожденную память не сразу освобождает. Некоторое время ждет, не понадобится ли снова. По крайней мере это относится к COM. Если же память освобождается из интерпретатора Лисп, который сам работает из-под Автокада - все сложнее.
Лучше, чем в коде VVA из #4 не сделаешь. Сборку мусора там выполняет (gc). Но результаты мгновенно не проявятся. Но правильнее не допускать вообще лишних глобальных переменных - всё передавать аргументами. Причем в ЛИСП вообще ведь не обязательно создавать именованные переменные. |
|||
|
||||
Регистрация: 18.12.2010
Сообщений: 5,047
|
Вы просто не умеете програмировать - пора курить SICP
ну или переходить на .NET и изучать ООП ибо правильное програмировани на lisp требует особого просветления и не всем это удаётся... |
|||
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Замечу еще, что эта моя "штука" была придумана примерно в 1995 году, когда еще не было не только .NET, но и VLISP. И привел эту "штуку" я здесь только для того, чтобы продемонстрировать применение функции (set), использование которой в кодах AutoLisp не всегда очевидно и понятно. Функция (delglob) была составной частью переопределенного обработчика ошибок.
|
|||
|
||||
Цитата:
Спасибо большое!))) Все отлично сработало!))) Результат в минеатюре!) ----- добавлено через ~5 мин. ----- Мои переменные в основном списки имеющие около 50 атомов в среднем... Думаю нормально набирается мусора!)) ----- добавлено через ~9 мин. ----- Если я начну работать без переменных сума сойду... там слишком сложная и запутанная логика.. мне от одной функции необходимо получить несколько разнотипных результатов... и потом их использовать в другой/других функциях... и там настолько все динамично... что полученная переменная может менять тип...
__________________
Вечность это: (while T) Последний раз редактировалось OKJI, 27.07.2018 в 16:50. |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,004
|
Цитата:
|
|||
|
||||
VVA,
Доработал ваше выражение до функции... вдруг кому-то пригодится: Код:
Это же не джава... но подобие ООП само по себе получается... До классов в моем случае нет необходимости доходить... в автоматизации составления технической документации нет никакой структуризации... Был бы изначально план (алгоритм работы программы) можно было бы классами заморочиться... но я пишу на чистую и что победил то и появилось в амплуа автоматизации...
__________________
Вечность это: (while T) |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,004
|
как раз наоборот) Есть отдельные подзадачи хранения информации, ее обработки, отображения (в том числе и создание отчетов). И тогда программа из монстра с кучей глобальных переменных и функций превращается в что-то читабельное)
|
|||
|
||||
Цитата:
Код:
но для этого нужно перелопатить всю функцию... которая довольно большая получается (у меня так) и есть вероятность что-то пропустить... по этому поиск по ключу и дальнейшее удаление лучше всего подходит... ----- добавлено через ~10 мин. ----- Цитата:
Чтобы все структурировать мне пришлось бы переписывать пол года своей работы... а это лучше застрелиться... Причем я дальше только туманно представляю как будет развиваться программа... даже если сейчас структурирую то придется потом эту структуру ломать или дописывать новый структурный модуль... а это опять мусор с глобальными переменными или мусор в реестре... хотя я больше доверяю глобальным переменным чем неизученному виндовскому реестру... ----- добавлено через ~13 мин. ----- И кстати... какие классы в ЛИСПЕ!? что то я подобного не видел... или функция состоящая из функций является классом?
__________________
Вечность это: (while T) |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,004
|
Цитата:
----- добавлено через 36 сек. ----- мусор в реестр пихать.. хмм.. |
|||
|
||||
Имеется в виду данные (переменные числовые, строчные, и списки) которые мне нужны будут позже в следующих функциях...
----- добавлено через ~2 мин. ----- Пока-что до этого не дошел... боюсь эти языки не столь гибки как LISP...
__________________
Вечность это: (while T) |
||||
|
||||
Регистрация: 18.12.2010
Сообщений: 5,047
|
Цитата:
Цитата:
читайте SICP - там всё объясняют |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,004
|
Цитата:
За гибкость надо платить - и в других языках есть, например, переменные типа object - которые могут использоваться совершенно разными способами. Но это влечет за собой дополнительные расходы ресурсов на обслуживание подобных переменных. Я бы не считал это особым достоинством - отсутствие типа переменных. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
А вот засорение глобальным мусором - самый худший путь. И дело даже не в расходовании памяти - сами запутаетесь. Цитата:
Боитесь реестра - пишите в XML или INI. Хотя реестр - самое быстрое хранилище. Глобальные переменные могут и в ЛИСП использоваться, но количесво их должно быть минимальным, назначение тщательно продумано, имена должны иметь особый, легко узнаваемый вид. Обычно с личным префиксом, в верхнем регистре. Сам AutoCAD создает множество глобальных ЛИСП-переменных. Выполните команду acadinfo и в созданном acadinfo.txt обнаружите множество глобальных. Свои тоже. Не будете придерживаться базовых принципов - будут не программы а "взрыв на макаронной фабрике". И мозги будут во взрыве участвовать. |
|||
|
||||
Если нужно удалять для нескольких шаблонов, то нет необходимости i раз проходится по списку. Wcmatch сделает это за один проход
Мой вариант Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как удалить ненужные слои | FruSnork | AutoCAD | 33 | 08.12.2023 12:09 |
Можно ли удалить ненужные шрифты? | Naz | AutoCAD | 24 | 17.03.2016 17:15 |
Команда PURGE, или как удалить действительно ненужные неиспользуемые элементы из файла | AlphaGeo | Программирование | 45 | 15.06.2009 15:14 |
Не могу удалить папку (даже после переустановки винды) | dextron3 | Прочее. Программное обеспечение | 21 | 22.01.2009 09:50 |
Как удалить участок трубы после вычитания? | BM60 | AutoCAD | 11 | 24.12.2008 18:53 |