Кэширование и ленивые объекты.
Особенностью скриптового cad является необходимость перезапуска скрипта генерации геометрии при каждом обновлении модели. С ростом размера модели это приводит к значительному росту времени, требующегося на расчёт и отрисовку геометрии. С целью решения этой проблемы вычислительно ёмкие операции ZenCad закешированы и ленифицированы силами библиотеки evalcache.
Вместо непосредственного расчета, evalcache строит дерево построения модели на основе хэшключей генерируемых объектов. Библиотека сохраняет в кэше на жестком диске все произведенные вычисления и в случае, если объект уже был расчитан ранее, достаёт его из кэша. evalcache отслеживает изменения параметров в дереве модели и на лету обновляет переставшие быть актуальными объекты вычисления.
Отладка в условиях работы с ленивыми вычислениями.
Так как evalcache выполняет вычисления только в момент, когда объект в действительности запрошен, а не тогда, когда он объявлен, могут возникать проблемы с пониманием точки возникновения возможной ошибки. Также могут возникать проблемы из-за неявного раскрытия ленивых объектов на некоторых операциях.
Для отладки и понимания точки возникновения ошибки можно применять следующие опции:
zencad.lazy.diag=True # Активировать вывод информации об операциях библиотеки кеширования.
zencad.lazy.fastdo=True # Выполнять запрос объекта в момент его создания.
zencad.lazy.encache=False # Запретить сохранение в кэш.
zencad.lazy.decache=False # Запретить загрузку из кэша.
zencad.lazy.onbool=False # Запретить автоматическое раскрытие на булевых операциях
zencad.lazy.onstr=False # Запретить автоматическое раскрытие при преобразовании к строке.
zencad.lazy.onplace=True # Раскрывать объект в момент его создания (не рекомендуется, может нарушать логику).
Дополнительные опции можно найти в документации к коду библиотеки evalcache.
Где лежит кэш?
По умолчанию кеш располагается по локальному адресу ~/.zencadcache
, где ~ - домашний директорий пользователя.