LINUX.ORG.RU

История изменений

Исправление aquadon, (текущая версия) :

То, что ты описал, встречается в том или ином виде в разных языках программирования высокого уровня.

Замени свои «ячейки» на «выражения», а «связи» на «функции» и пиши свою модель на Haskell. Я только не знаю, как там по умолчанию кеширование результатов вычисления функций реализовано, возможно нужно будет настроить в более агрессивную сторону.

Я использую нечто подобное в моем проекте на питоне. Почти все методы объектов у меня - это лениво вычисляемые кешируемые свойства (похоже на @cached_property из стандартной библиотеки, но мне нужно немного больше гибкости).

В любой момент обращаешься к любому атрибуту объекта и дальше все необходимые вычисления выполняются рекурсивно.

Может ещё есть алгоритмы совершеннее вышеописанных идей?

Если смотреть на твою модель с одной стороны, то это будет, как ты выразился, «пересчет модели». Если посмотреть с противоположной стороны, то «ленивые вычисления + кеширование». Мне лично второй вариант кажется более естественным.

Исходная версия aquadon, :

То, что ты описал, встречается в том или ином виде в разных языках программирования высокого уровня.

Замени свои «ячейки» на «выражения», а «связи» на «функции» и пиши свою модель на Haskell. Я только не знаю, как там по умолчанию кеширование результатов вычисления функций реализовано, возможно нужно будет настроить в более агрессивную сторону.

Я использую нечто подобное в моем проекте на питоне. Почти все методы объектов у меня - это лениво вычисляемые кешируемые свойства (похоже на @cached_property из стандартной библиотеки, но мне нужно немного больше гибкости).

В любой момент обращаешься к любому атрибуту объекта и дальше все необходимые вычисления выполняются рекурсивно.