Функциональная композиция
Dec. 18th, 2007 01:22 pmПозитивная идея описана в статье про Haskell - вместо того, чтобы заниматься конкатенацией строк, каждый раз выделяя под новую строку память (неявно, как в Дельфях, или явно собирая в билдерах и буферах, как в Java/.NET), строка представляется как список символов или строк, возвращаемый последовательной композицией функций. При том, что вычисления ленивые - реальное обращение к функции происходит тогда, когда ее значение заинтересовало кого-то неленивого :).
По идее это должно сильно повышать эффективность использования памяти - т.е. когда мы обращаемся к строке, мы фактически обращаемся не к данным в памяти, а к генератору оных данных.
Для ускорения же реакции, скажем, интерфейса на запрос "нарисовать строку", возможно впихнуть между данными и рисовалкой некий хитрый функциональный объект, кэширующий значения внутри себя. Он фактически будет единственным буфером для всего этапа прохождения данных от их источника до потребителя. Что это за объект, как его сделать и совместимо ли это вообще с функциональной парадигмой - пока не представляю.
По идее это должно сильно повышать эффективность использования памяти - т.е. когда мы обращаемся к строке, мы фактически обращаемся не к данным в памяти, а к генератору оных данных.
Для ускорения же реакции, скажем, интерфейса на запрос "нарисовать строку", возможно впихнуть между данными и рисовалкой некий хитрый функциональный объект, кэширующий значения внутри себя. Он фактически будет единственным буфером для всего этапа прохождения данных от их источника до потребителя. Что это за объект, как его сделать и совместимо ли это вообще с функциональной парадигмой - пока не представляю.