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

use*_*232 17 f# ocaml

美好的一天,

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

迈克尔,提前谢谢

Jon*_*rop 15

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

我已经将很多OCaml代码翻译成F#(可能比世界上任何其他人都多)并且主要问题是#light语法,使用任何非平凡的OCaml特性(对象,多态变体,高阶模块,标记和可选参数等),库(例如lablgl,lablgtk,ocamlgraph,laziness),宏(解析,流,模式匹配扩展)和基本语法的变化,例如数组索引.举例来说,我只是试图端口Almabench基准从OCaml的对F#,并花了几个小时,因为我最终通过重新编写每a.[i]一个a.(i)由于在F#编译器错误的众多手:其OCaml的兼容模式是相当脆弱.

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


Bri*_*ian 7

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

ML兼容性的特点

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


Dar*_*rio 0

我还没有对 F# 进行任何 OCaml 移植,但我知道 F# 在设计时就考虑到了 OCaml 兼容性。据我所知,F# 主要是基本 OCaml 的超集。

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

不过,F# 没有 OCaml 的高级模块系统,因此您在实现函子等方面会遇到麻烦。