Компилятор Fast Standard ML или интерпретатор байт-кода с циклом read-eval-print для Linux? - PullRequest
8 голосов
/ 07 июля 2010

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

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

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

  • Московский МЛ был идеальным, но он все же не был приведен в соответствие со Стандартной базовой библиотекой 2004 года,К сожалению, поскольку в дополнение к множеству других замечательных свойств Moscow ML также имеет интерактивную справочную систему, но я не могу навязать своим ученикам компилятор, библиотеки которого делают что-то отличное от того, что написано во всей онлайн-документации.

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

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

Ответы [ 3 ]

10 голосов
/ 08 июля 2010

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 (около 175779 строк закомментированного 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 use.Многофайловые программы, вероятно, лучше всего обслуживать менеджер компиляций SML / NJ или ML Basis System;Poly / ML предоставляет еще одну систему компиляции (PolyML.make), но я никогда не использовал ее.

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

3 голосов
/ 18 января 2013

Я ценю, что это очень поздний ответ на вопрос, но на github есть проект Moscow ML с обновленной Базисной библиотекой. Это на https://github.com/kfl/mosml/ (с обновлением в ноябре 2012 года!)

У меня также есть код, который реализует большую часть новой библиотеки базисов для московского ML, так что я могу использовать его и Poly / ML для реализации HOL4. Код для этого находится внутри http://github.com/mn200/HOL, и может быть выкопан, если вы этого хотите.

1 голос
/ 11 июля 2010

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

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

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

...