编译器构造 – 用于Linux的快速标准ML编译器或字节码解释器,带有
对于我将要教授的课程,我正在为标准ML寻找快速编译器或字节码解释器.我正在寻找快速编译时间;任何合理的运行时间都可以.如果编译模型简单明了,则可获得奖励.班上的学生也将使用MLton生成好的二进制文件,但是MLton的编译速度很慢,有时候学生需要可以与之交互的东西.
这就是我所知道的: >新泽西州的标准ML有一个交互式读取 – 评估 – 打印循环,但它的编译规则有点奇怪,而且有点慢.不过,它可能是领先的竞争者. 目前看起来好像SML / NJ或Poly / ML是最好的折衷方案.自从我在标准ML中做了任何认真的工作已经很多年了,我希望有关其他编译器的信息,或者根据您的经验,这些替代方案中哪些是最快的交互和最容易学习使用的. 解决方法
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可以满足你的需要.两者都提供SML使用功能.多文件程序最好由SML / NJ的编译管理器或MLton的ML Basis系统提供; Poly / ML提供了另一个编译系统(PolyML.make),但我从未使用它. 编译Poly / ML有什么困难?从5.0版开始,Poly / ML支持简单的./configure;制造make install build.使用Poly / ML 5.X编译独立的可执行文件需要使用PolyML.export并调用C编译器,但在5.0版发行说明中对此进行了详细描述. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |