web-dev-qa-db-ja.com

F#とOCamlの比較

F#とOCamlが「機能」(ファンクター、camlp4、測定単位など)の点でどのように異なるかを大まかに知っています。

次のことについて疑問に思います。上記の機能を含まないコードに関して、F#とOCamlのコーディングスタイル(命名規則以外)に違いはありますか?別の言い方をすれば、いくつかの(慣用的な)F#コードを(おそらく些細なことですが)簡単な方法でOCamlに変換できる場合、この変換は必然的に慣用的なOcamlにつながりますか?

編集:Guy Coderが提供するリンクから、例外がF#ではるかに遅い(そしてOCamlでより広く使用されている)ため、一部の「慣用的な」OCamlコードが「慣用的な」F#コードに直接変換されない可能性があると思います。他の方向はどうですか?いくつかのF#ish OCamlコードは、「XXをそのようにしないでください。XXを行うOCamlの方法は、XYの代わりに例外があります。」という点で反応を引き起こすでしょうか。

一般に、F#での一般的な使用法と比較した場合、OCamlで例外を使用する場合の違いは何ですか。 2つの言語で異なる方法で使用されている他の構成要素はありますか(たとえば、1つの言語でのパフォーマンスのペナルティのため)?

16
D.F.F

はい、翻訳はほとんどの場合、多くのOCamlユーザーによって慣用的なものと見なされます。慣用句は正確な標準ではないため、慣用句を測定する方法はありません。

注意点は、ある言語の機能を他の言語にはない機能を利用するには、コードの一部を変更する必要があるということです。特に、ファンクターがOCamlでそれを行う慣用的な方法である場合は、F#コードをファンクターに変換する必要があります。または、F#が.Netライブラリコードを多用した場合は、OCamlでそれらの関数を再作成するか、同等のものを見つける必要があります。

私はMLとOCamlのシェアをF#に翻訳しました。ご存知のように、私が環境と精神と呼んでいるのは、実際に大きな違いです。ファンクター、camlp4、測定単位、Visual Studio、タイムトラベル、NUnit、WPFなど。

F#は移植時にOCamlとして開始されたため、ほとんどの場合、まだ多くの共通点があることを忘れないでください。

OCamlでかなりの量のコードが実行され、F#がほぼ行ごとに翻訳されていることを確認したい場合は、JohnHarrisonによる「HandbookofPractical Logic andAutomatedReasoning」のコードを参照してください。

F#

OCaml

その後、あなたは自分で判断することができます。

「実用論理と自動推論のハンドブック」のコードは、クラス、レコード、イベントなどを使用していないことに注意する必要があります。それはほとんど純粋に機能です。

一般に任意の2つの言語をイドマティック性について比較する別の方法(OKなので、Wordを作成しました)は、 Rosetta Code を使用することです。 Rosettaコードには、多くの言語で記述された プログラミングタスク のソリューションが含まれています。したがって、プログラミングタスクを見つけます。 クラスを作成 そして OCamlF# のバージョンを見てください。

すべてのタスクがすべての言語で実行されるわけではありませんが、誰でも新しいタスクに貢献したり、提案したりすることができます。

16
Guy Coder