F#はOCamlから派生していますが、欠落または追加されている主要なアイテムは何ですか?具体的には、OCamlの学習に利用できるリソースがF#を学びたい人にも役立つかどうかに興味があります。
F#はOCamlから派生していますが、欠落または追加されている主要なアイテムは何ですか?具体的には、OCamlの学習に利用できるリソースがF#を学びたい人にも役立つかどうかに興味があります。
回答:
主な違いは、F#がサポートしていないことです。
さらに、F#には、ラベル付きパラメーターとオプションパラメーターの構文が異なります。
理論的には、これらの機能を使用しないOCamlプログラムはF#でコンパイルできます。OCamlを学ぶことは、F#を完全に合理的に紹介することです(また、その逆も想像できます)。
この質問はしばらくの間回答されてきましたが、ほとんどの回答がF#でOCaml機能に欠けているものを示していることにかなり驚いています-これは、既存のOCamlプログラムをF#に移植したい場合に知っておくと良いでしょう(これはおそらくほとんどの参照記事の動機)。ただし、F#を別の言語にする多くの機能があります(.NETのOCamlの限定バージョンだけではありません!)F#に追加されたいくつかの機能を次に示します。
+
、すべての数値型とそれをサポートする型に使用できます。そして、正直なところ、Visual Studio IDEについても言及する価値があると思います。これは言語の一部ではありませんが、ユーザーエクスペリエンスを本当に向上させます(Visual StudioでのIntelliSenseサポートは本当に良いです!)
リストを見ると、F#の人気に大きく貢献していることがたくさんあるので、単なる「ファンクタのないOCaml」だけではありません。F#は間違いなくOCamlに基づいており(そしてHaskellなどの他の言語からアイデアを取り入れています)、それらと多くの側面を共有していますが、他にも多くのものがあります。非同期ワークフロー、.NETスタイルのOO、メタプログラミングなどがなければ、Microsoft Developer DivisionがVisual Studio 2010にF#を含めることはないと思います。
<@ a @>
、のようなバインドされていない変数を含む式を引用することもできません。タイプ定義<@ type t = int @>
はもちろん、Camlp4のように拡張性の低いレクサーやパーサーを処理することもできません。まともなマクロシステムがないことは1つの欠点ですが、私見では、F#のまともなレクサーとパーサーがないことは、はるかに深刻な障害です。OCamlの優れたツールサポートの恩恵を受けるために、実際には開発者にOCamlを使用してレクサーとパーサーを作成し、F#がサポートするサブセットに制限し、F#に移植して戻すことをお勧めします!
OCamlにはF#にはない多くの機能があるため、私は常にF#をOCamlの従兄弟として説明しています。F#は以前のCAML言語とより密接に関連しています。特に、F#は抽象化のサポートが非常に制限されており、構造型付け(OCamlのオブジェクトやポリモーフィックバリアントなど)はまったくサポートされていません。
一部の回答者が書いたものとは逆に、F#はラベル付き(「名前付き」)およびオプションの引数を(限定的に)サポートしています。
ただし、これらはすべて高度な機能であり、OCamlに関するリソースを使用して、小規模なOCamlスタイルの関数型プログラミングの背後にある基本的な考え方を理解することができます。あなたが発見する最初の大きな違いは、OCamlとF#で完全に異なる方法で解決されるカプセル化や抽象化のような大規模な問題です。F#でそれを行う方法を学びたい場合、利用可能な唯一の文献は、純粋に機能的なデータ構造に関するこの記事です。
また、OCamlの素晴らしいモジュールシステムにより、型(データ構造など)を介してコードを簡単にパラメーター化できることを発見しました。さらに、エレガントにパラメーター化されたデータ構造を書き込もうとすると、F#コンパイラーで数十のバグに遭遇しました。これまで誰もこれを試みたことがないためです。F#stdlibには、優れたデータ構造の実装がいくつか含まれていますが、実質的に再利用されていません。つまり、カットアンドペーストの仕事です。
F#とOCamlは、言語のMLファミリーの分類学的クラスであり、他の奇妙な動物の全体のパスも含まれています。F#はOCamlよりも新しく、ファンクタ[モジュールの機能->モジュール]または行タイプ[オブジェクトクラスと多態バリアント]がまだありません。それらの間で、これら2つの簡略化により、.Netプラットフォームで開発している人にとって学習曲線がおそらく容易になります。悲しいことに、これらの2つの言語機能はOCamlで非常に強力であるため、OCamlの資料を読んでF#のコード化方法に関する洞察を得ると、おそらく両方が利用できるC#の優れた代替手段であるF#の早期のフラストレーションにつながる可能性があります。
F#はOCaml構文を直接サポートします。100%互換ではないかもしれませんが、かなり近いと思います。
http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html
ここに違いのリストがあります(どれだけ最新かわかりません)
http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html