F#最近的变化是什么?

时间:2010-02-11 20:43:23

标签: f#

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

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

所以我的问题是:

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

编辑: 谢谢大家的答案!

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

我没有找到关于版本1.9.5的任何内容 - 那个版本是否存在?

3 个答案:

答案 0 :(得分:13)

我可能无法给出一个完整的答案,但是在过去的两年中我曾经在F#上做过一些非平凡的变化,这些事情都浮现在脑海中......

小改动:

  • 已经有很多库函数了 的重命名即可。最初有下划线的倾向 自从被删除后更多 .NET类。所以例如Seq.to_array是 现在Seq.toArray。对async和引用API也进行了一些重大更改。
  • #light现在是默认设置,您可以退出将其放在每个文件的顶部
  • 对事件和枚举的API /声明进行了一些更改(language reference上的library docsMSDN有利于获取最新信息)
  • 不再需要[<OverloadID>]来重载成员函数

新功能:

  • 衡量单位是Beta1中的新内容。
  • comparisonequality限制在Beta2中是新的。
  • {li> unmanaged约束RC
  • (查看各种版本的“发行说明”,在以前的项目符号中链接,以获取更多信息)

答案 1 :(得分: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 
    | _ -> ()
  • 设置中有一个新的覆盖ToString,并使用sformat aka printf“%A”改进了设置和地图打印的格式。
  • BigInteger的一些内部清理,用于.net 4.0。
  • 我看到很多内部变化都像Brian提到的那样异步。
  • 使用IObserver的事件的一些内部更改。

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

答案 2 :(得分:4)

查看Release Notes