Что такое суперкомпиляция? - PullRequest
68 голосов
/ 30 января 2012

Коротко и мило: я видел несколько источников, говорящих о «суперкомпиляции».Но мне еще предстоит найти один единственный документ в Интернете, который описывает что это такое .Предположительно потому, что кому-то это кажется достаточно простым, что даже не стоит объяснять.

Кто-нибудь знает, что это на самом деле?

Ответы [ 2 ]

47 голосов
/ 05 июня 2012

Суперкомпиляция может рассматриваться как обобщение частичной оценки.Идея частичной оценки заключается в том, что многие части программы могут быть оценены во время компиляции, и так должно быть.Суперкомпиляция расширяет это, оценивая вещи, которые не могут быть полностью выполнены во время компиляции, например, превращение map f (map g xs) в map (f . g) xs без чего-либо, кроме определения map (По крайней мере, я думаю, что я получил правильную частичную оценку - я 'мы только много читали о суперкомпиляции).

Еще один способ взглянуть на него - это сочетание многих других оптимизаций, таких как вырубка лесов, специализация и встраивание.Действуя так, как будто он уже знает входные данные для функций и оценки, он может получить более прямой метод вычисления результата - он может избавиться от промежуточных структур данных, увидев, как они будут использоваться, или он может подключить все возможные значения изатем оберните результат в case, или сделайте что-нибудь еще с его притворными значениями.

У Макса Болингброка есть ряд полезных статей по этому вопросу - я рекомендую первую, Суперкомпиляция по оценке , как введение.Раздел 2 представляет предмет в качестве примера, а остальное, хотя и немного сложное для понимания, очень информативно описывает процесс.У Нила Митчелла также есть количество хороших презентаций , описывающих его.

Надеюсь, это поможет.

2 голосов
/ 30 января 2012

С Википедия по метакомпиляции :

Метакомпиляция - это вычисление, которое включает метасистемные переходы. (MST) от вычислительной машины M к метамашине M ', которая управляет, анализирует и имитирует работу программы, основанной на семантике М. преобразование, такое как частичная оценка и суперкомпиляция (SCP), это мета вычисление.

Подробнее о Metasystems в Википедии .

Я не обладаю знаниями по этому вопросу, но я дам свое понимание описания. Скажем, у нас была простая программа, которая могла копировать стандартный ввод в стандартный вывод. Это была бы наша вычислительная машина М. Наша мета-машина М '- это вторая программа, которая принимает источник М в качестве входных данных (или иным образом сконструирована так, чтобы по сути знать М) и поэтому способна понимать не только то, что делает М, но как это так.

Если мое понимание верно, то очевидный вопрос: почему мы заботимся о М '? Что приходит мне в голову - это автоматическая оптимизация. Если мы сможем понять как работает М, так и то, что М пытается достичь, М 'может решить пути улучшения работы М, как в пространстве, так и во времени. Кроме того, и, что важно, М 'может заменить М, поскольку М' может выполнить все, что М сделал. Это означает, что M '' может улучшить способы M 'оптимизации M, а затем заменить M' и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...