ToDo. Сделать кеширование компилированного кода словарей
Для каждого элемента USES или INCLUDE.
Держать в памяти скомпилированный образ словаря.
В мапе "ключ-значение".
Где:
ключ - имя файла.
значение - скомпилированный код.
Ну и понятное дело, что надо контроллировать дату компиляции и дату файла словаря.
И вычищать скомпилированный код если даты не совпадают.
Ну и понятно, что надо держать карту связей между словарями.
И если сбрасываются ИСПОЛЬЗУЕМЫЕ словари, то сбрасывать и ИСПОЛЬЗУЮЩИЙ.
Ну и понятно, что в KeywordByName надо просматривать ВСЕ словари.
Ну и UserDictionary должен "скользить" по "вложенным словарям".
Но сначала сделать вот это:
ToDo. Избавиться от [EXECUTE]
(+) Сделать директиву %ClearCache.
(+) В тестах GenXX грузить модель не в "основной код", а в словари "сбоку". Типа CompileScriptAndProcess. Тут надо ДУМАТЬ. Про РАЗДЕЛЯЕМЫЕ типа UIDS_LIST etc.
Ну и ещё.
На чём всё это основано?
А вот на чём:
Собственная реализация IUnknown и подсчёт ссылок. И примеси
БЕЗ подсчёта ссылок вся эта затея обречена была бы на неудачу. Лезли бы всякие AV И прочие assert и Invalid Point Operation.
Не говоря уж о скрытых ошибках когда объект "вроде умер", но "вроде ещё живёт".
Для каждого элемента USES или INCLUDE.
Держать в памяти скомпилированный образ словаря.
В мапе "ключ-значение".
Где:
ключ - имя файла.
значение - скомпилированный код.
Ну и понятное дело, что надо контроллировать дату компиляции и дату файла словаря.
И вычищать скомпилированный код если даты не совпадают.
Ну и понятно, что надо держать карту связей между словарями.
И если сбрасываются ИСПОЛЬЗУЕМЫЕ словари, то сбрасывать и ИСПОЛЬЗУЮЩИЙ.
Ну и понятно, что в KeywordByName надо просматривать ВСЕ словари.
Ну и UserDictionary должен "скользить" по "вложенным словарям".
Но сначала сделать вот это:
ToDo. Избавиться от [EXECUTE]
(+) Сделать директиву %ClearCache.
(+) В тестах GenXX грузить модель не в "основной код", а в словари "сбоку". Типа CompileScriptAndProcess. Тут надо ДУМАТЬ. Про РАЗДЕЛЯЕМЫЕ типа UIDS_LIST etc.
Ну и ещё.
На чём всё это основано?
А вот на чём:
Собственная реализация IUnknown и подсчёт ссылок. И примеси
БЕЗ подсчёта ссылок вся эта затея обречена была бы на неудачу. Лезли бы всякие AV И прочие assert и Invalid Point Operation.
Не говоря уж о скрытых ошибках когда объект "вроде умер", но "вроде ещё живёт".
Сделал - http://programmingmindstream.blogspot.ru/2015/07/blog-post_15.html
ОтветитьУдалить