美好的一天,
我正在OCaml开发一个小型业余爱好项目。我想知道将它迁移到F#是多么容易。我知道F#有一些OCaml没有的功能,但我希望我的OCaml代码需要很少的工作才能移植。我不一定要迁移,我想在两个平台上保留/开发。
提前致谢, 迈克尔
答案 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)
您应该阅读规范的最后部分
并确保从PowerPack获取各种compat库的FSharp.PowerPack.Compatibility.dll。
答案 2 :(得分:0)
我没有做过任何OCaml到F#的运动,但我知道F#在设计时考虑了OCaml兼容性。据我所知,F#主要是基本OCaml的超集。
它应该支持(并且#light
不限于)大多数OCaml关键字,并且在核心库(或.Net框架)中具有大多数标准函数的等价物。所以我猜 - 至少对于业余爱好项目来说 - 移植实际上应该很容易。
F#没有OCaml的高级模块系统,因此您将无法实施例如仿函数。