2013-03-23 6 views

答えて

46

機能的にも意味的にもいくつかの違いがあります。

SMLをサポートしていなく、OCamlの特長:種類以上

  • 透明署名帰属
  • モジュールレベルlet
  • 対称共有制約ファンクタのため
  • シンタックスシュガーと

値特徴OCaml 4はSMLを持っていません:

  • 高次ファンクタ
  • 再帰モジュール
  • ローカルモジュール
  • ネストされたファーストクラスとして
  • モジュール署名
  • 一般的なモジュールの共有(sig with module A = M
  • module type of

いくつかのSML実装では、これらを拡張機能として提供しています。 (SML/NJ、Alice ML)、モジュール共有(SML/NJ、Alice ML)、ネストされたシグネチャ(Moscow ML、Alice ML)などの高次ファンクタ(SML/NJ、モスクワML、アリスML)、ローカルおよびファーストクラスのモジュール(モスクワML、アリスML) 、および再帰的モジュール(モスクワML)。

セマンティクス・ワイズ、最大の違いは特にファンクタに関して、タイプ等価の治療である:SMLで

  • 、ファンクタは2回同じファンクタを適用することを意味し、生成的あります同じ議論は常に新鮮な型をもたらす。

    を編集する:OCaml 4には、任意でファンクタを生成させる機能が追加されました。

  • OCamlでは、ファンクタはのアプリケーションです。つまり、同じファンクタを同じ引数に2度適用すると(追加の構文上の制限に加えて)同等の型が再現されます。このセマンティクスはより柔軟ですが、抽象化を破ることもできます(たとえば、this paperのセクション8を参照)。

  • OCamlは、シグネチャの純粋に構文上の概念を持ちます。つまり、型の等価性を型システムで表現できず、静かに破棄または分割されます(例えば、驚くべき例としてthis bugを参照)。

    編集:OCamlの4.02は、参照バグの特定の例を修正するために起こる「モジュールエイリアス」のための特別なセマンティクスを追加するが、構文署名の一般的な制限が持続します。

もう一つの大きな違いは、OCamlでのモジュール型システムが原因SMLが許可されていません抽象署名、その許可に、(すなわち、型チェックが終了しない場合があります)決定不能であるということです。

+4

次のクリーンアップでモジュールシステムに関する「最近の」(主にあなたの)研究の妥当な開始を前提として、将来の*モジュールシステム、あるいはより正確にはこれらの機能セットがどのように変化するかについて、 ML言語の繰り返し。それは、非常に興味深い答えになります。 – gasche

+4

私はその疑問をピギーバックするのは不適切だと感じました;)。私の個人的な答えは、私が上にリンクしているF-ingモジュールの論文の中にあるものです。リストされたすべての機能をクリーンな(かなり)簡単な方法(生成的および応用的なファンクタを含む)それらについては私はあまり確信していません。 OCamlの再帰的モジュールは、私の好みではあまりにもアドホックで制限されていますが、包括的なアプローチは、MixMLの論文で説明しているように、MLモジュールを構成するものの大部分を放棄することになります。陪審員はまだそれが価値があるかどうかは分からない。 –

+0

@AndreasRossberg MixMLの文脈で大部分のMLモジュールを放棄することが何を意味するのか分かりませんが、MLモジュールはMixMLスペクトルの終点とみなすことができます。 (私が間違っていれば、モジュールを構築するための基本的なアイデアはパラメータ化ではなく、震動であった) – fedvasu

2

セマンティクスに関しては、上記のAndreas Rossbergによって、はるかに良く、精巧な答えが与えられています。しかし、構文に関してはthis siteがあなたが探しているものかもしれません。

+4

このサイトもAndreas Rossbergの作品です! – fedvasu

関連する問題