F# 源自 OCaml,但是缺少或添加了哪些主要项目?差异是否足够小,以便用于学习 OCaml 的资源对于想要学习 F# 的人也有用?
这个问题已经回答了一段时间了,但令我感到非常惊讶的是,大多数答案都说 F# 中缺少哪些 OCaml 功能 - 如果您想将现有的 OCaml 程序移植到 F#(这可能是大多数参考文章的动机)。然而,有许多功能使 F# 成为一种不同的语言(不仅仅是 .NET 的 OCaml 的有限版本!)以下是 F# 中添加的一些内容:
+
。而且,老实说,我认为 Visual Studio IDE 也值得一提。这不是语言的一部分,但它确实改善了用户体验(Visual Studio 中的 IntelliSense 支持真的很好!)
如果你看一下这个列表,就会发现有很多东西在很大程度上促成了 F# 的流行,所以它不仅仅是“没有函子的 OCaml”。 F# 绝对基于 OCaml(并借鉴了 Haskell 等其他语言的思想),并与它们共享许多方面,但也有很多其他的东西。我猜想,如果没有异步工作流程、.NET 风格的 OO 和元编程之类的东西,Microsoft 开发部门永远不会在 Visual Studio 2010 中包含 F#。
主要区别是 F# 不支持:
此外,F# 对于标记参数和可选参数具有不同的语法。
理论上,不使用这些功能的 OCaml 程序可以使用 F# 进行编译。学习 OCaml 是对 F# 的完美合理的介绍(我想反之亦然)。
完整的差异列表在这里(注意:archive.org 替换了死链接)。
F# 和 OCaml 在分类学上属于 ML 语言家族,其中还包括一整套其他奇怪的动物。 F# 比 OCaml 更新,而且它还没有函子 [模块的函数 -> 模块] 或行类型 [对象类和多态变体]。对于在 .Net 平台上进行开发的人来说,这两种简化可能会使学习曲线变得更容易。遗憾的是,这两种语言功能在 OCaml 中非常强大,因此阅读 OCaml 文献以深入了解如何为 F# 进行编码可能会导致过早地对后者感到沮丧,因为后者可能是 C# 的绝佳替代品(两者都可用)。
F# 直接支持 OCaml 语法。它可能不是 100% 兼容,但我认为它非常接近。
http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html
这是差异列表(不确定它是如何最新的)
http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html