F#源自OCaml,但有哪些重要的元素缺失或添加了呢?具体来说,我想知道学习OCaml的资源对于想学习F#的人是否也有用。
+
处理所有数值类型以及支持它的类型。而且,说实话,我认为值得一提的还有Visual Studio IDE。这不是语言的一部分,但它确实提高了用户体验(Visual Studio中的IntelliSense支持真的很好!)
如果您查看列表,会发现有很多因素极大地促进了F#的流行,所以它不仅仅是“没有functor的OCaml”。F#确实基于OCaml(并借鉴了其他语言如Haskell的思想),并与它们分享许多方面,但也有很多其他的因素。我猜如果没有像异步工作流、.NET风格的面向对象和元编程之类的东西,微软开发人员部门绝不会在Visual Studio 2010中包含F#。<@ a @>
,更不用说类型定义如 <@ type t = int @>
。它也不能处理任意的语法,更不用说像Camlp4那样可扩展的词法分析器和语法分析器。缺乏一个良好的宏系统是其中之一的缺点,但在我看来,F#缺乏优秀的词法分析器和语法分析器是一个更为严重的障碍。我实际上建议开发人员使用OCaml创建他们的词法分析器和语法分析器,限制自己使用F#支持的子集,并将其移植回F#以受益于OCaml更出色的工具支持! - J DF#和OCaml是ML语言家族中的分类,该家族还包括其他一大堆奇怪的动物。 F#比OCaml更新,并且它尚未具备functor(模块->模块的函数)或row type(对象类和多态变体)。在这两者之间,这两种简化可能会使在.Net平台上开发的人的学习曲线更加容易。不幸的是,这两个语言特性在OCaml中非常强大,因此阅读OCaml文献以获取有关如何为F#编码的见解可能会导致对后者的过早挫败,而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