Как компиляторы Haskell решают, выделять ли память в куче или стеке?

Haskell не поддерживает явное управление памятью, и все объекты передаются по значению, поэтому нет очевидного подсчета ссылок или сборки мусора. Как компилятор Haskell обычно решает, генерировать ли код, который выделяется в стеке, или код, который выделяется в куче для данной переменной? Будет ли он последовательно выделять в куче или стеке одни и те же переменные на разных сайтах вызовов для одной и той же функции? И когда он выделяет, как он решает, когда освободить память? Выполняется ли распределение и освобождение стека в том же шаблоне входа / выхода функции, что и в C?

26
задан Joseph Garvin 27 February 2011 в 09:12
поделиться