【问题标题】:What are the recent changes to F#?F# 最近有哪些变化?
【发布时间】:2010-02-11 20:43:23
【问题描述】:

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

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

所以我的问题是:

  • 自从书籍印刷以来,哪些主题发生了变化,并且不再像描述的那样有效?有没有我可以完全跳过的章节? (我知道某些功能已移至 PowerPack,但我并不完全清楚 PowerPack 中的哪些功能,以及标准安装中的哪些功能)
  • 正确描述了该语言的哪些功能,但有更新的替代方案可用? (事件的描述是否仍然是最新的?)
  • 自从这些书出版以来,我应该注意哪些语言特性被添加(或修改)?
  • 我应该注意语言的其他近期变化吗?

编辑: 谢谢大家的回答!

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

我没有找到任何关于版本 1.9.5 的信息 - 曾经存在过吗?

【问题讨论】:

  • 这应该是社区维基;这是一种调查问题的形式,而且范围很广。这个问题没有错——只是有点宽泛,不是社区维基恕我直言。

标签: f#


【解决方案1】:

我可能无法给出完整的答案,但在我从事 F# 工作的过去两年中,我想到了一些不平凡的变化...

小改动:

  • 许多库函数已经 重命名。最初有一种对下划线的偏好 自从被移除更多 .Net 一样的。所以例如Seq.to_array 是 现在Seq.toArray。对async 和引用 API 也进行了一些重大更改。
  • #light 现在是默认值,你可以不把它放在每个文件的顶部
  • 对事件和枚举的 API/声明进行了一些更改(MSDN 上的 language reference 和 library docs 有助于获取最新信息)
  • 不再需要[<OverloadID>] 来创建重载的成员函数

新功能:

  • Beta1 中新增了计量单位。
  • comparison 和 equality 约束是 Beta2 中的新约束。
  • unmanaged RC 中的约束。
  • (有关更多信息,请查看各种版本的“发行说明”,链接在之前的项目符号中)

【讨论】:

  • 如果 #light 现在是默认值,#heavy 的指令是什么?
【解决方案2】:

我正在对 FSharp 的最新 (1.9.9.9) 和以前 (1.9.7.8) 版本进行风评。

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

let inline checkNonNull argName arg = 
    match box arg with 
    | null -> nullArg argName 
    | _ -> ()
  • set 中有一个新的覆盖 ToString,并改进了 set 和 map 打印的格式,使用 sformat aka printf "%A"。
  • BigInteger 的一些内部清理以用于 .net 4.0。
  • 正如 Brian 所说,我看到很多内部异步更改。
  • 对使用 IObserver 的 Event 进行了一些内部更改。

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

【讨论】:

    【解决方案3】:

    查看Release Notes。

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      相关资源
      最近更新 更多