OCaml和F#之间的代码兼容性

时间:2010-11-21 17:15:51

标签: f# ocaml

美好的一天,

我正在OCaml开发一个小型业余爱好项目。我想知道将它迁移到F#是多么容易。我知道F#有一些OCaml没有的功能,但我希望我的OCaml代码需要很少的工作才能移植。我不一定要迁移,我想在两个平台上保留/开发。

提前致谢, 迈克尔

3 个答案:

答案 0 :(得分:15)

编写交叉编译代码看起来像是一个痛苦的世界。 Coherent PDF的John Whitington是我所知道的唯一一个尝试过任何真实程度的人。

我已经将很多OCaml代码翻译成F#(可能比世界上任何其他人都多),主要问题是#light语法,使用任何非平凡的OCaml特性(对象,多态变体,高阶模块,标记和可选参数等等,库(例如lablgl,lablgtk,ocamlgraph,laziness),宏(解析,流,模式匹配扩展)和基本语法的变化,如数组索引。例如,我只是尝试将Almabench benchmark从OCaml移植到F#,这需要花费几个小时,因为我最终需要手动将每个a.[i]重写为a.(i) F#编译器中的错误:它的OCaml兼容模式非常脆弱。

因此,我建议您在语言之间进行选择,而不是尝试交叉编译。

答案 1 :(得分:7)

您应该阅读规范的最后部分

Features for ML Compatibility

并确保从PowerPack获取各种compat库的FSharp.PowerPack.Compatibility.dll。

答案 2 :(得分:0)

我没有做过任何OCaml到F#的运动,但我知道F#在设计时考虑了OCaml兼容性。据我所知,F#主要是基本OCaml的超集。

它应该支持(并且#light不限于)大多数OCaml关键字,并且在核心库(或.Net框架)中具有大多数标准函数的等价物。所以我猜 - 至少对于业余爱好项目来说 - 移植实际上应该很容易。

F#没有OCaml的高级模块系统,因此您将无法实施例如仿函数。