2010-11-21 8 views
16

おはようございます、OCamlとFのコード互換性

私はOCamlで小さな趣味のプロジェクトを開発しています。私はそれをF#に移行するのがどれほど簡単だろうと思っていました。 F#にはOCamlにはない機能がいくつかありますが、OCamlコードを移植するのに少しでも手間がかからないことを期待していました。必ずしも移行する必要はありませんが、私は両方のプラットフォームで保持/開発したいと考えています。事前に

おかげで、 マイケル

+2

http://stackoverflow.com/questions/179492/f-and-ocamlを参照してください。 –

答えて

0

私はF#のの-portingに任意のOCamlのを行っていないが、私はF#は念頭に置いてOCamlの互換性で設計されています知っています。私が知っているように、F#は基本的にOCamlのスーパーセットです。

ほとんどのOCamlキーワードをサポートしていなければならず、コアライブラリ(または.Netフレームワーク)のほとんどの標準機能に相当するものがあります。だから私は少なくとも趣味のプロジェクトのためには、移植は実際に簡単に行うべきだと思います。

F#にはOCamlの高度なモジュールシステムがありません。ファンクター。

+0

これは数年前のことでしたが、これ以上正確ではないと思います。 F#の基本的なことの多くは、OCamlからずっと離れています。例えば、配列のインデックス付けはOCamlでは 'a。(i)'ですが、F#では型名付きの 'a。[i]'です。浮動小数点数( '+ .'、' * .'など)上のOCamlの基本算術演算子は、もはやF#では正しく動作しません。 –

+1

F#はほとんどがOCamlのスーパーセットではなく、いくつかの拡張子(アクティブパターンなど)を持つサブセットです。 Jonの答えには、F#でサポートされていないOCamlの機能がいくつか記載されています。 –

6

あなたはスペック

Features for ML Compatibility

、様々なcompatのライブラリをPowerPackからFSharp.PowerPack.Compatibility.dllをつかむようにしてくださいの最後の部分をお読みください。

13

クロスコンパイルコードを書くことは、私には苦痛の世界のように見えます。コヒーレントPDFのJohn Whitingtonは私が知っている唯一の人であり、誰がこれを本当の程度にしようとしています。

私は多くのOCamlコードをF#に翻訳していますが(おそらく世界の誰よりも多い)、主な問題は#lightという構文です。オブジェクト、多型、高次のOCaml機能ライブラリ(lablgl、lablgtk、ocamlgraph、lazinessなど)、マクロ(解析、ストリーム、パターンマッチング拡張)、配列の索引付けなどの基本的な構文の変更など、たとえば、Almabench benchmarkをOCamlからF#に移植しようとしたところ、a.[i]a.(i)に書き直す必要があったため、F#コンパイラの多数のバグのため手作業で数時間を要しました。かなり壊れやすい

クロスコンパイルするのではなく、言語の選択をお勧めします。

+0

ありがとうございました。私が避けたいのは、余分な言語を学ぶことでした。私は.NET(C#)の実践的な知識とOCamlの基礎知識(私のfunc。programing course)から、F#は(ほとんど)与えられていました。明らかにそうではありません。 :) – user515232

+1

問題ありません。 OCamlとF#を似ているので、OCamlとF#の両方を学ぶのは支障ではありませんが、その違いが非常に啓発されていることがわかります。 –