F#最近的变化是什么?

Luc*_*c C 20 f#

我开始学习F#了.我非常精通C#等编程语言(并且通常使用.NET框架),但函数式编程对我来说是新的.我学得最好的方法是写一本关于这个主题的书并开始阅读 - 所以我抓了一份"专家F#"和"F#科学家".有几次我得到的印象是,由于最近语言的变化,这些书似乎已经过时了 - 没什么太戏剧性的,但它给人一种唠叨的感觉,可能会有更多.

现在F#2.0似乎已经稳定下来,看看"真正的"F#与那些(和类似的)书中所描述的语言版本相比如何变得很好.

所以我的问题是:

  • 自书籍印刷以来哪些主题发生了变化,并且不再如所描述的那样有效?我可以完全跳过任何章节吗?(我知道有些功能已经转移到了PowerPack,虽然我并不完全清楚PowerPack中的哪些功能,以及标准安装中的功能)
  • 该语言的哪些功能被正确描述,但有更新的选择?(事件的描述是否仍然是最新的?)
  • 我应该注意哪些语言的特征是自那些书籍被编写以来被添加(或修改)的?
  • 我应该注意哪些语言最近发生了变化?

编辑: 谢谢大家的答案!

就发行说明而言,我能够在Don Syme的博客上挖掘以下"详细发布说明"帖子,适用于1.9.2之后的F#版本(版本"专家F#"提到的是在书):

我没有找到关于1.9.5版本的任何内容 - 那个曾经存在过吗?

Bri*_*ian 13

我可能无法给出一个完整的答案,但是在过去的两年里,我一直在研究F#的一些事情,因为我已经经历过非常重大的变化......

细微变化:

  • 许多库函数已 重命名.最初对下划线的偏爱已被删除,以便更像.Net.所以Seq.to_array现在就是这样Seq.toArray.一些重要的变化async和引用API也是如此.
  • #light 现在是默认值,您可以退出将它放在每个文件的顶部
  • 对事件和枚举的API /声明进行一些更改(MSDN上的语言参考库文档有利于获取最新信息)
  • 不再需要[<OverloadID>]重载成员函数

新功能:

  • 测量单位是Beta1中的新增内容.
  • comparisonequality限制是Beta2中的新功能.
  • unmanagedRC中的约束.
  • (查看各种版本的"发行说明",在之前的项目符号中链接,以获取更多信息)


gra*_*bot 6

我正在对FSharp最新版本(1.9.9.9)和之前版本(1.9.7.8)进行报道.

我注意到在Array,Seq,Reflect和Quotation模块中添加了许多对checkNonNull的调用.我假设添加了这些调用以保护F#libs不被其他语言(如C#)传递空值.任何见解Brian?函数nullArg抛出ArgumentNullException.

let inline checkNonNull argName arg = 
    match box arg with 
    | null -> nullArg argName 
    | _ -> ()
Run Code Online (Sandbox Code Playgroud)
  • 设置中有一个新的覆盖ToString,并使用sformat aka printf"%A"改进了设置和地图打印的格式.
  • BigInteger的一些内部清理用于.net 4.0.
  • 我看到像Brian提到的那样对async进行了很多内部更改.
  • 对Event使用IObserver进行一些内部更改.

我完成了所有已更改的fs文件,并且大多数更改都是针对未直接公开的私有函数.唯一可能影响用户的是套装和地图的不同漂亮打印.