Poly/ML 似乎比 SML/NJ 快一点。例如,用 Poly/ML、SML/NJ 和 MLton 编译HaMLet(大约 25850 行注释的 SML),我得到以下信息:
[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
在编译 MLton 时,Poly/ML 和 SML/NJ 之间的区别并不那么明显(大约 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 都可以满足您的目的。两者都提供 SMLuse
功能。多文件程序可能最好由 SML/NJ 的 Compilation Manager 或 MLton 的 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 版本的发行说明中有很好的描述。