本当の意味での SML の用途は何ですか?
その実用的な用途は Prolog と似ていますか?
職場では、有料の顧客に出荷する実際の実際のソフトウェア製品で SML を使用しています。MLtonを使用して、SML コードを Windows、Linux、Solaris、AIX、および HP-UX で実行されるネイティブ コードにコンパイルします。それはうまく機能し、私たちはこの選択に満足しています。
SML が明確なニッチに特に適しているとは思いません。実際、SML は非常にバランスの取れた汎用プログラミング言語です。Prolog は、ロジック プログラミング/人工知能/ルール ベースのシステム解決のニッチ分野で確立されていますが、これらの従来のドメイン以外にも多くのことに使用されています。
「現実世界」でソフトウェア プロジェクトに SML を使用することを検討している方のために、これまでに気づいた長所と短所をいくつか紹介します。
短所:
MLはPrologと直接比較することはできません。Prologは宣言型論理プログラミング言語であり、基本的にホーン節を使用する定理証明者です。(純粋でないProlog)の優れた特徴の1つは、コンパイル中または実行時にプログラムを大幅に変更できることです。たとえば、最新のProlog実装では、DCG(definiteclause grammar)形式を使用して文法を直接書くことができます。'->'演算子を使用する文法規則は、用語展開を使用してProlog節に書き直されます。例えば:
a(N) --> b, c(N).
次のように書き直されます:
a(N,P0,P2) :- b(P0,P1), c(N,P1,P2).
位置変数を使用すると、矢印の右側で娘の隣接関係が強制されます。Prologは(バックトラックによって)娘を証明することによって節の先頭を証明しようとするので、基本的に追加の作業なしでトップダウンの左右のパーサーがあります。プログラム変更の別の例は、実行時にプログラムの動作を変更するために使用できる(動的な)ファクトまたは句のアサーションまたは撤回です。
一方、MLは不純な関数型言語です。PrologとMLの関係は、一部の定理証明者がMLで記述されていることです。MLははるかに汎用的だと思いますが、そのニッチにはPrologが非常に便利です。どちらも、視野を広げるためだけでも、学ぶのに非常に役立ちます。
SML はコンパイラ作成者によって使用されます。Prolog と SML の両方が定理証明器で使用されます。
カーネギー メロン大学のFoxNet プロジェクトは、SML を使用して構築されています。
Jane Street 独自の商社で、O'Caml を自社製ソフトウェアに使用しています。
ML for the Working Programmer の著者である Laurance C. Paulson は、SML を使用して、LCF の定理証明者である Isabell を作成しました。
教授で Haskell の専門家である Philip Wadler は、関数型プログラミングを使用する実世界のプロジェクトのリストを維持しています。これらのプロジェクトの中には、ML を使用するものもあり、 http://homepages.inf.ed.ac.uk/wadler/realworld/にあります。
SML ではありませんが、密接に関連しているのは OCAML で、これは多くのことに使用されています。
http://caml.inria.fr/about/successes.en.html
私はどちらかというと、ML を使用して最適化された C を生成する「西洋の高速フーリエ変換」が好きです...
ML の商用アプリケーションはあまり見たことがありませんが、これは言語への反映ではなく、使用可能な環境に起因する可能性があります。F# (ML と同じファミリ) を使用してデータ ストリームを処理し、行列代数を実行し、パターンを検索する多くの銀行を見てきました。Microsoft が .NET 用にパッケージ化したという事実は、明らかに後を絶ちません。
私は数論コースのために大学でそれを個人的に使用しただけです. 私はそれを使って本当に楽しんだと言わざるを得ません。膨大な数を処理でき、暗号化を扱う場合に便利でした。
それが重要な場合、私はMoscow ML http://www.itu.dk/people/sestoft/mosml.htmlを使用していました