130

F# は OCaml から派生していますが、欠けている、または追加されている主な項目は何ですか? 具体的には、OCaml を学習するために利用できるリソースが、F# を学習したい人にも役立つかどうかについて興味があります。

4

4 に答える 4

123

この質問にはしばらくの間回答がありましたが、回答のほとんどが F# に欠けている OCaml の機能について述べていることに非常に驚きました。これは、既存の OCaml プログラムを F# に移植したい場合 (おそらく参照された記事のほとんどの動機)。ただし、F# を別の言語にする多くの機能があります (OCaml の .NET 用の限定バージョンだけではありません!) F# に追加された機能がいくつかあります。

  • 数値計算を扱うコードのタイプチェックを可能にする測定単位
  • 引用符を使用したメタプログラミング(これにより、F# で LINQ を使用できるようになり、WebSharper プラットフォームのような有望なプロジェクトにも不可欠です)
  • 機能データ型の抽象化を作成するためのアクティブ パターン(および、より複雑なパターン マッチング アプリケーションでは一般的に非常に便利な機能)
  • 非同期ワークフローの背後にある言語機能である計算式(非同期 I/O/Web サービス/GUI プログラミング用のライブラリ)
  • .NETプラットフォームとの完全な相互運用を可能にする.NET 互換オブジェクト システム(OCaml もオブジェクトをサポートしていますが、異なる - もちろん両方のシステムにいくつかの利点があります)。
  • オーバーロードされた演算子- 私の知る限り、OCaml にはオーバーロードされた演算子はありません。F# では+、すべての数値型とそれをサポートする型に使用できます。

そして、正直なところ、Visual Studio IDE についても言及する価値があると思います。これは言語の一部ではありませんが、ユーザー エクスペリエンスが大幅に向上します (Visual Studio での IntelliSense サポートは非​​常に優れています)。

リストを見ると、F# の人気に大きく貢献したものがたくさんあるので、単なる「ファンクターのない OCaml」ではありません。F# は間違いなく OCaml に基づいており (Haskell などの他の言語からアイデアを取り入れています)、多くの側面を OCaml と共有していますが、他にも多くのものがあります。非同期ワークフロー、.NET スタイルのオブジェクト指向、メタプログラミングなどがなければ、Microsoft 開発部門が Visual Studio 2010 に F# を含めることはなかったでしょう。

于 2010-03-21T00:10:04.307 に答える
91

主な違いは、F# がサポートしていないことです。

  • 関手
  • OCaml スタイルのオブジェクト
  • 多形バリアント
  • camlp4/5 プリプロセッサまたは拡張ポイント (ppx)

さらに、F# には、ラベル付きパラメーターと省略可能なパラメーターの構文が異なります。

理論的には、これらの機能を使用しない OCaml プログラムは F# でコンパイルできます。OCaml を学ぶことは、F# への完全に合理的な導入となります (逆もまた然りだと思います)。

相違点の完全なリストはこちらにあります(注: archive.org の無効なリンクの置き換え)。

于 2008-10-07T19:27:14.523 に答える
10

F# と OCaml は分類学的には ML ファミリの言語のクラスであり、これには他の奇妙な動物も含まれています。F# は OCaml よりも新しく、ファンクタ [モジュールの関数 -> モジュール] も行型 [オブジェクト クラスとポリモーフィック バリアント] もまだありません。これら 2 つの単純化により、おそらく .Net プラットフォームで開発する人にとって学習曲線が容易になります。悲しいことに、これらの 2 つの言語機能は OCaml で非常に強力であるため、OCaml の文献を読んで F# のコーディング方法についての洞察を得ると、後者がおそらく C# の優れた代替手段であり、両方が利用可能である場合に、おそらく後者に対する早期の不満につながるでしょう。

于 2009-05-25T17:30:38.777 に答える
4

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

于 2008-10-07T17:28:46.570 に答える