При программировании на Haskell (и особенно при решении проблем Project Euler, где неоптимальные решения имеют тенденцию увеличивать нагрузку на процессор или память) я часто озадачен, почему программа ведет себя именно так является. Я смотрю на профили, пытаюсь ввести некоторую строгость, выбираю другую структуру данных, ... но в основном это блуждаю в темноте, потому что мне не хватает хорошей интуиции.
Кроме того, хотя я знаю, как Lisp, Обычно реализуются пролог и императивные языки, я понятия не имею о реализации ленивого языка. Мне тоже немного любопытно.
Поэтому я хотел бы больше узнать о всей цепочке от источника программы до модели выполнения.
Что меня интересует:
какие типичные оптимизации применяются?
каков порядок выполнения, когда есть несколько кандидатов для оценки (хотя я знаю, что это зависит от необходимых результатов, все же могут быть большие различия в производительности между первой оценкой A и затем B или первой оценкой B, чтобы определить, что A вам вообще не нужен)
как представлены преобразователи?
как используются стек и куча?
что такое CAF? (профилирование иногда показывает, что точка доступа есть, но я понятия не имею)