Смешанная, блин, парадигма.
2/7/08 13:49Рассматриваю чудесный баг с функциональным стилем и ленивыми вычислениями, но в присутствии сайд-эффектов.
Передаётся в функцию лениво-вычисляемая коллекция "where", скажем, зайцев. В коллекции записано, каких зайцев, допустим, нарисовать.
Функция их рисует и взводит каждому флажок "нарисован".
Естественно, изначально в условии where стоит "не нарисован".
А потом нужно, скажем, освежить их в кэше. Вот мы и проходимся ещё раз по коллекции - и оппа! Правильно, она пустая, зайцев нет, кэш не обновляется. Или ещё хуже - зайцы с флажками, взведёнными из другого потока.
И под дебаггером она, гадость, не смотрится, потому что yield return не вычислен.
Вот вам и функциональный стиль в императивных языках.
Передаётся в функцию лениво-вычисляемая коллекция "where", скажем, зайцев. В коллекции записано, каких зайцев, допустим, нарисовать.
Функция их рисует и взводит каждому флажок "нарисован".
Естественно, изначально в условии where стоит "не нарисован".
А потом нужно, скажем, освежить их в кэше. Вот мы и проходимся ещё раз по коллекции - и оппа! Правильно, она пустая, зайцев нет, кэш не обновляется. Или ещё хуже - зайцы с флажками, взведёнными из другого потока.
И под дебаггером она, гадость, не смотрится, потому что yield return не вычислен.
Вот вам и функциональный стиль в императивных языках.
Tags: