F # 改为 OCaml

F # 来源于 OCaml,但缺少或添加了哪些主要项目?具体来说,我很好奇学习 OCaml 的资源是否对想学习 F # 的人也有用。

28074 次浏览

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

主要区别在于 F # 不支持:

  • 函子
  • OCaml 风格的对象
  • 多态性变异
  • Camlp4/5预处理器或扩展点(ppx)

另外,F # 对标记参数和可选参数有不同的语法。

理论上,不使用这些特性的 OCaml 程序可以用 F # 编译。学习 OCaml 对 F # 来说是一个非常合理的介绍(我想反之亦然)。

完整的差异列表是 给你(注意: Archive.org 替换了死链接)。

F # 和 OCaml 是 ML 语言家族中的分类类,其中还包括一大堆其他奇怪的动物。F # 比 OCaml 更新,而且它还没有函数[ module-> module 的函数]或行类型[对象类和多态变量]。在这两者之间,这两种简化可能使在。网络平台。遗憾的是,这两个语言特性在 OCaml 中非常强大,所以阅读 OCaml 文献来深入了解如何编写 F # 代码可能会导致对后者过早的失望,因为后者可能是 C # 的一个很好的替代品,两者都可以使用。

这个问题已经被回答了一段时间了,但是我很惊讶,大多数的答案说明了 F # 中缺少了什么 OCaml 特性——如果你想把现有的 OCaml 程序移植到 F # (这可能是大多数参考文章的动机) ,这绝对是个好消息。然而,有许多特性使 F # 成为一种不同的语言(不仅仅是 OCaml for 的有限版本。NET!)下面是 F # 中添加的一些内容:

  • 度量单位 ,允许您键入检查处理数值计算的代码
  • 使用引号的元编程 (这使得在 F # 中使用 LINQ 成为可能,并且对于像 WebSharper 平台这样有前途的项目也是必不可少的)
  • 活动模式 用于为功能数据类型创建抽象(通常对于更复杂的模式匹配应用程序非常有用)
  • 计算表达式 异步工作流(异步 I/O/web service/GUI 编程的库)背后的语言特性
  • .NET 兼容的对象系统 ,可以与。NET 平台(OCaml 也支持对象,但是不同——当然这两个系统都有一些好处)。
  • 重载运算符 -据我所知,OCaml 没有重载运算符-在 F # 中,您可以对所有数值类型以及支持它的类型使用 +

老实说,我认为 VisualStudioIDE 也值得一提。这不是语言的一部分,但它确实改善了用户体验(Visual Studio 中的智能感知支持非常好!)

如果你看一下这个列表,你会发现很多东西在很大程度上促进了 F # 的流行,所以它不仅仅是“没有函数的 OCaml”。F # 肯定是基于 OCaml 的(并且从其他语言(比如 Haskell)中吸取了一些想法) ,与它们分享了很多方面,但是也有很多其他的东西。我猜如果没有异步工作流之类的东西,。NET 风格的 OO 和元编程,微软开发部将永远不会在 Visual Studio 2010中包括 F # 。