代码之家  ›  专栏  ›  技术社区  ›  Norman Ramsey

快速标准ML编译器或字节码解释器,带read-eval-print循环,用于Linux?

  •  8
  • Norman Ramsey  · 技术社区  · 14 年前

    对于我将要教的一个类,我正在寻找一个标准ML的快速编译器或字节码解释器。 我正在寻找快速编译时间;

    我已经知道了:

    • 莫斯科ML曾经是理想的,但是 仍然 尚未更新2004标准基础库。最不幸的是,除了它的许多其他优良特性之外,Moscow-ML还有一个交互式帮助系统,但我不能给我的学生强加一个编译器,它的库所做的事情与所有在线文档所说的有所不同。

    • Poly/ML可能很符合这个要求,只是在网上查看文档时,我不知道如何编译它。也许可以。

    3 回复  |  直到 14 年前
        1
  •  10
  •   Matthew Fluet    14 年前

    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
    

    在编译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
    

    stdIn ,行号对此没有太大帮助。

    如果您的学生只打算使用REPL或编译单文件程序,那么我可以想象Poly/ML或SML/NJ将满足您的目的。两者都提供SML use 功能。多文件程序最好由SML/NJ的编译管理器或MLton的ML Basis系统提供服务;Poly/ML提供了另一种编译系统( PolyML.make ),但我从来没用过。

    编译Poly/ML有什么困难?从5.0版开始,Poly/ML就支持一个简单的 ./configure ; make ; make install 建造。使用Poly/ml5.X编译独立的可执行文件需要使用 PolyML.export 以及调用C编译器,但在5.0版发行说明中有很好的描述。

        2
  •  3
  •   Michael Norrish    12 年前

    我很感激这是一个很晚才回答这个问题的答案,但是github上有一个莫斯科ML项目,它有一个更新的Basis库。它在 https://github.com/kfl/mosml/

    http://github.com/mn200/HOL ,如果你想的话可以挖出来。

        3
  •  1
  •   user141335 user141335    14 年前

    有一个 LLVM port 我不知道它是否适用于所有的用途,但在速度方面,它应该比老卡姆伦更好。