8

私が教えるクラスで使用するために、標準 ML 用の高速なコンパイラまたはバイトコード インタープリタを探しています。 高速なコンパイル時間を探しています。妥当な実行時間であれば問題ありません。コンパイル モデルが単純明快であればボーナスです。クラスの学生も MLton を使用して優れたバイナリを生成しますが、MLton はコンパイルが遅く、学生が対話できるものが必要な場合があります。

これが私がすでに知っていることです:

  • ニュージャージーの標準 ML には対話型の read-eval-print-loop がありますが、そのコンパイル規則は少し奇妙で、少し遅いです。それでも最有力候補かもしれません。

  • Moscow ML はかつては理想的でしたが、2004 Standard Basis Libraryではまだ更新されていません。最も残念なことは、Moscow ML には、他の多くの優れた特性に加えて、対話型のヘルプ システムも備わっているためです。ただし、すべてのオンライン ドキュメントに記載されている内容とは異なるライブラリを使用するコンパイラを学生に強制することはできません。

  • Poly/ML は、オンラインのドキュメントを見てコンパイルする方法がわからないことを除いて、法案にうまく適合する可能性があります。それでいいのかもしれません。

現時点では、SML/NJ または Poly/ML が最善の妥協案であるかのように見えます。私が Standard ML で本格的な作業を行ってから何年も経ちました。他のコンパイラに関する情報や、あなたの経験から、対話が最も速く、使い方を覚えるのが最も簡単な代替コンパイラについての情報を歓迎します。

4

3 に答える 3

10

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 のいずれかが目的にかなうと思います。どちらも 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 のリリース ノートに詳しく説明されています。

于 2010-07-08T19:58:21.847 に答える
3

これは質問に対する非常に遅い回答であることに感謝しますが、更新されたベーシスライブラリを備えたMoscowMLプロジェクトがgithubにあります。https://github.com/kfl/mosml/にあります(2012年11月に更新されます!)

また、Moscow MLの新しいベーシスライブラリの多くを実装するコードを入手したので、それとPoly/MLの両方を使用してHOL4を実装できます。そのためのコードはすべてhttp://github.com/mn200/HOL内にあり、必要に応じて掘り下げることができます。

于 2013-01-18T09:31:38.013 に答える
1

Moscow MLのLLVM ポートがあります。万能かどうかはまだわかりませんが、速度に関しては古いcamlrunmよりはいいはずです。

ドキュメントのコードとは異なると思われる機能を移植することは、時間の価値があるかもしれません。私は、Moscow ML のメンテナーがそれを高く評価すると確信しています。

Moscow ML に付属するドキュメントと実際の実装に違いは見つかりませんでしたが、Standard ML で大きなプロジェクトを行ったことはありません。Moscow ML のドキュメントと実装が異なる例を挙げていただけると助かります。これは私も興味があります。

于 2010-07-11T19:57:27.687 に答える