编译器构造 – 用于Linux的快速标准ML编译器或字节码解释器,带有读取 – 评估 – 打印循环?

前端之家收集整理的这篇文章主要介绍了编译器构造 – 用于Linux的快速标准ML编译器或字节码解释器,带有读取 – 评估 – 打印循环?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于我将要教授的课程,我正在为标准ML寻找快速编译器或字节码解释器.我正在寻找快速编译时间;任何合理的运行时间都可以.如果编译模型简单明了,则可获得奖励.班上的学生也将使用MLton生成好的二进制文件,但是MLton的编译速度很慢,有时候学生需要可以与之交互的东西.

这就是我所知道的:

>新泽西州的标准ML有一个交互式读取 – 评估 – 打印循环,但它的编译规则有点奇怪,而且有点慢.不过,它可能是领先的竞争者.
>莫斯科ML曾经是理想的,但它仍未提供2004年标准基础库.最不幸的是,因为除了它的许多其他优良属性外,莫斯科ML还有一个交互式帮助系统 – 但我不能给我的学生一个编译器,它的库与所有在线文档所说的不同.
> Poly / 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版发行说明中对此进行了详细描述.

猜你在找的Linux相关文章