История изменений
Исправление aquadon, (текущая версия) :
То, что ты описал, встречается в том или ином виде в разных языках программирования высокого уровня.
Замени свои «ячейки» на «выражения», а «связи» на «функции» и пиши свою модель на Haskell. Я только не знаю, как там по умолчанию кеширование результатов вычисления функций реализовано, возможно нужно будет настроить в более агрессивную сторону.
Я использую нечто подобное в моем проекте на питоне. Почти все методы объектов у меня - это лениво вычисляемые кешируемые свойства (похоже на @cached_property
из стандартной библиотеки, но мне нужно немного больше гибкости).
В любой момент обращаешься к любому атрибуту объекта и дальше все необходимые вычисления выполняются рекурсивно.
Может ещё есть алгоритмы совершеннее вышеописанных идей?
Если смотреть на твою модель с одной стороны, то это будет, как ты выразился, «пересчет модели». Если посмотреть с противоположной стороны, то «ленивые вычисления + кеширование». Мне лично второй вариант кажется более естественным.
Исходная версия aquadon, :
То, что ты описал, встречается в том или ином виде в разных языках программирования высокого уровня.
Замени свои «ячейки» на «выражения», а «связи» на «функции» и пиши свою модель на Haskell. Я только не знаю, как там по умолчанию кеширование результатов вычисления функций реализовано, возможно нужно будет настроить в более агрессивную сторону.
Я использую нечто подобное в моем проекте на питоне. Почти все методы объектов у меня - это лениво вычисляемые кешируемые свойства (похоже на @cached_property
из стандартной библиотеки, но мне нужно немного больше гибкости).
В любой момент обращаешься к любому атрибуту объекта и дальше все необходимые вычисления выполняются рекурсивно.