Быстрый Стандарт компилятор ML или интерпретатор байт-кода, с read-eval-print циклом, для Linux?

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

Вот то, что я уже знаю:

  • Стандартный ML Нью-Джерси имеет интерактивный read-eval-print-loop, но его правила компиляции являются немного странными, и это немного медленно. Однако, это может быть ведущий соперник.

  • Московский ML раньше был идеален, но он все еще не был осовременен со Стандартной Базисной Библиотекой 2004 года. Самый неудачный, потому что в дополнение к его многим другим прекрасным свойствам, Москва ML также имеет интерактивную систему справочной информации — но я не могу причинить своим студентам компилятор, библиотеки которого делают что-то другое от того, что говорит вся онлайн-документация.

  • Poly/ML мог бы хорошо отвечать всем требованиям, за исключением того, что, смотря на документацию онлайн, я не могу выяснить, как заставить это компилировать. Это могло бы быть в порядке.

В данный момент выглядит, как будто или SML/NJ или Poly/ML были бы лучшим компромиссом. Это были много лет, с тех пор как я сделал любую серьезную работу в Стандарте ML, и я буду приветствовать информацию о других компиляторах или какая из этих альтернатив является, по вашему опыту, самой быстрой для взаимодействия и самое легкое, чтобы учиться использовать.

8
задан Norman Ramsey 12 July 2010 в 03:00
поделиться

2 ответа

Poly / ML кажется немного быстрее, чем SML / NJ. Например, компилируя HaMLet (примерно 25850 строк SML с комментариями) с помощью Poly / ML, SML / NJ и MLton, я получаю следующее:

[mtf@fenrir hamlet-1.3.1.polyml]$ /usr/bin/time make with-poly
...
        2.92 real         2.31 user         0.55 sys
[mtf@fenrir hamlet-1.3.1.smlnj]$ /usr/bin/time make with-smlnj
...
       11.98 real        11.08 user         0.78 sys
[mtf@fenrir hamlet-1.3.1.mlton]$ /usr/bin/time make with-mlton
...
       24.51 real        21.04 user         3.05 sys

Разница между Poly / ML и SML / NJ не столь ярко выражен при компиляции MLton (примерно 175 779 строк SML с комментариями):

[mtf@fenrir mlton.polyml]$ /usr/bin/time make polyml-mlton
...
      117.67 real       112.12 user         4.87 sys
[mtf@fenrir mlton.smlnj]$ /usr/bin/time make smlnj-mlton
...
      123.31 real       116.24 user         6.38 sys
[mtf@fenrir mlton.mlton]$ /usr/bin/time make mlton-compile
...
      238.44 real       232.01 user         5.49 sys

Поскольку REPL, Poly / ML и SML / NJ почти эквивалентны. Я считаю, что сообщения об ошибках от SML / NJ немного лучше; они, как правило, имеют более конкретные местоположения источников. Конечно, при использовании в качестве REPL исходные местоположения SML / NJ находятся в терминах stdIn , для которых номера строк не очень полезны.

Если ваши ученики когда-либо собираются использовать REPL или компилировать однофайловые программы, то я могу предположить, что либо Poly / ML, либо SML / NJ будут служить вашим целям. Оба предоставляют функцию использования в SML . Многофайловые программы, вероятно, лучше всего обслуживаются диспетчером компиляции SML / NJ или базисной системой ML от MLton; Poly / ML предоставляет еще одну систему компиляции ( PolyML.make ), но я никогда ее не использовал.

Какие трудности у вас возникают при компиляции Poly / ML? Начиная с версии 5.0, Poly / ML поддерживает простую ./ configure; делать ; make install build. Использование Poly / ML 5.X для компиляции автономного исполняемого файла требует использования PolyML.export и вызова компилятора C, но это довольно хорошо описано в примечаниях к выпуску версии 5.0.

10
ответ дан 5 December 2019 в 12:07
поделиться

Существует LLVM-порт Moscow ML. Я пока не знаю, пригоден ли он для всех целей, но в отношении скорости он должен быть лучше, чем старый camlrunm.

Возможно, вам стоит потратить время на перенос функции, которая, по вашему мнению, отличается от кода в документации. Я уверен, что московские сопровождающие ML оценят это.

Я не нашел разницы в документации, которая поставляется с Moscow ML и реальной реализацией, но я не делал больших проектов на Standard ML. Я думаю, было бы полезно, если бы вы привели пример, где документация по Moscow ML отличается от реализации. Это также могло бы меня заинтересовать.

1
ответ дан 5 December 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: