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.