Подтвердить что ты не робот

Что такое суперкомпиляция?

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

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

4b9b3361

Ответ 1

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

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

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

Я надеюсь, что это поможет.

Ответ 2

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

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

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

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

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