2/7/08

singalen: (Default)
Рассматриваю чудесный баг с функциональным стилем и ленивыми вычислениями, но в присутствии сайд-эффектов.

Передаётся в функцию лениво-вычисляемая коллекция "where", скажем, зайцев. В коллекции записано, каких зайцев, допустим, нарисовать.
Функция их рисует и взводит каждому флажок "нарисован".
Естественно, изначально в условии where стоит "не нарисован".

А потом нужно, скажем, освежить их в кэше. Вот мы и проходимся ещё раз по коллекции - и оппа! Правильно, она пустая, зайцев нет, кэш не обновляется. Или ещё хуже - зайцы с флажками, взведёнными из другого потока.
И под дебаггером она, гадость, не смотрится, потому что yield return не вычислен.

Вот вам и функциональный стиль в императивных языках.
Tags: