14

ML には多くの方言があり、SML と OCaml が最も人気があります。SML と OCaml には多くの違いがありますが、どちらも ML の方言と見なされます。そう、

  1. SML と OCaml が ML の方言と見なされるのはなぜですか?
  2. ある言語を ML の方言と見なすにはどうすればよいでしょうか?
  3. ML が SML/OCaml でない場合、ML の定義は何ですか?

ML は SML と OCaml の交差点だと思いますが、詳細な定義が見つかりません。

4

1 に答える 1

8

camlspotter からのリンクには、ML の歴史の優れた概要があり、「Cardelli の ML」と呼ばれる Luca Cardelli による実装について言及しています。私はそれを探し回って、次の論文を見つけました: ML under Unix。Luca Cardelli は「ML」の実装について説明していますが、これは 1983 年の日付であるため、標準 ML よりも前のものであると確信しています。これは要約の機能のリストです。

  • 相互の作用
  • 強く型付けされた
  • 多形型システム
  • 抽象データ型
  • 例外
  • モジュール

これは非常に良いリストですが、不明確な部分もあります。このリストは、「ML と見なされる」ために言語が持つべき機能の非公式な定義として役立つと思いますが、注目すべき点がいくつかあります。

システムが「対話型」であるという要件は、実装の細部にややこだわりがあり、おそらくこのホワイト ペーパーで説明されている実装に固有のものです。標準 ML コンパイラ MLton にはインタラクティブな REPL はありません (プログラム全体を最適化するコンパイラであるため) が、MLton が実装する言語が ML ではないことを真剣に示唆している人はいないと思います。

さらに、「強く型付けされた」というのはかなりあいまいなので、その段落の残りの部分を読んでコンテキストを確認することをお勧めします。

すべての ML 式には、静的に決定される型があります。式の型は通常、型定義を必要とせずにシステムによって自動的に推測されます。ML 型システムは、型付け可能な式が実行時に型エラーを生成しないことを保証します。静的型チェックは、コンパイル時にプログラムのバグの大部分をトラップします。

このリストにはパターン マッチングについてもまったく言及されていませんが、LCF で使用されている ur-ML にパターン マッチングがあったかどうかはわかりませんが、この論文ではパターン マッチングがカバーされています . 2013 年には、これらの機能を備えていてもパターン マッチングが欠けている言語を ML として販売するのは難しいと思います。

少し目を細めてみると、Haskell はほとんどこのリストに準拠していることに注意してください。しかし実際には、ほとんどの人が Haskell を ML に触発されたものと見なすほど大きく異なっていますが、「ML ではない」と考えていると思います。これは主に、Haskell が純粋怠惰であるのに対し、ML は歴史的に不純厳密なものであったためです。さらに、SML と OCaml の両方の ML モジュール システムは、Haskell のものとはかなり異なり、どちらの ML にも型クラスはありません。

これはすべての質問に対する完全な回答ではありませんが、参考になれば幸いです。

于 2013-07-27T17:37:19.697 に答える