Хороший вводный текст о реализации GHC?

При программировании на Haskell (и особенно при решении проблем Project Euler, где неоптимальные решения имеют тенденцию увеличивать нагрузку на процессор или память) я часто озадачен, почему программа ведет себя именно так является. Я смотрю на профили, пытаюсь ввести некоторую строгость, выбираю другую структуру данных, ... но в основном это блуждаю в темноте, потому что мне не хватает хорошей интуиции.

Кроме того, хотя я знаю, как Lisp, Обычно реализуются пролог и императивные языки, я понятия не имею о реализации ленивого языка. Мне тоже немного любопытно.

Поэтому я хотел бы больше узнать о всей цепочке от источника программы до модели выполнения.

Что меня интересует:

  • какие типичные оптимизации применяются?

  • каков порядок выполнения, когда есть несколько кандидатов для оценки (хотя я знаю, что это зависит от необходимых результатов, все же могут быть большие различия в производительности между первой оценкой A и затем B или первой оценкой B, чтобы определить, что A вам вообще не нужен)

  • как представлены преобразователи?

  • как используются стек и куча?

  • что такое CAF? (профилирование иногда показывает, что точка доступа есть, но я понятия не имею)

48
задан Don Stewart 18 May 2011 в 17:04
поделиться