Конструкция GHC основана на чем-то, называемом STG, который обозначает "бесхребетную, безглазную G-машину".
Теперь G-машина, по-видимому, не подходит для "машины сокращения графа", в которой реализована ленивость. Неоцененные thunks хранятся в виде дерева выражений, а выполнение программы сводится к уменьшению их до нормальной формы. (Дерево - это ациклический граф, но повсеместная рекурсия Haskell означает, что выражения Haskell образуют общие графики, следовательно, сокращение графа, а не древообразование.)
Чем менее ясны термины "бесхребетность" и "безбрежность".
-
Я думаю, что "бесхребетность" относится к тому факту, что функциональные приложения не имеют "позвоночника" узлов приложений приложения. Вместо этого у вас есть объект, который называет вызываемую функцию и указывает на все ее аргументы. Это правильно?
-
Я думал, что "tagless" ссылается на то, что узлы-конструкторы не "помечены" идентификатором конструктора, и вместо этого case-выражения разрешаются с помощью команды перехода. Но теперь я не уверен, что это правильно. Вместо этого он, похоже, ссылается на то, что узлы не помечены своим состоянием оценки. Может ли кто-нибудь уточнить, какие (если таковые имеются) эти интерпретации верны?