Понимание STG

Конструкция GHC основана на чем-то, называемом STG, что означает «бесхребетная машина G -без тегов».

Теперь машина G -, по-видимому, является сокращением от «машины сокращения графов», которая определяет, как реализуется лень. Невычисленные переходы хранятся в виде дерева выражений, и выполнение программы включает приведение их к нормальной форме. (Дерево является ациклическим графом, но повсеместная рекурсия Хаскеля означает, что выражения Хаскеля образуют общие графы , следовательно, граф -редукция, а не дерево -.)

Что менее ясно, так это термины «бесхребетный» и «бесхребетный».

  1. Я думаю , что «мягкость» относится к тому факту, что приложения-функции не имеют «хребта» из узлов приложения-функции. Вместо этого у вас есть объект, который называет вызываемую функцию и указывает на все ее аргументы. Это правильно?

  2. Я думал, что «без тегов» относится к узлам конструктора, не «помеченным» идентификатором конструктора, и вместо этого выражения case -разрешаются с использованием инструкции перехода. Но теперь я не уверен, что это правильно. Вместо этого это, кажется, относится к тому факту, что узлы не помечены своим состоянием оценки. Кто-нибудь может пояснить, какая (, если вообще ), из этих интерпретаций верна?

41
задан Matthias Braun 16 February 2019 в 12:01
поделиться