关于F# 6的那些新功能?你了解吗?

F# 6 是关于使 F# 更简单、更高性能。这适用于语言设计、库和工具。长期语言演变的一个主要目标是消除语言中令用户感到惊讶或采用道路上不必要的障碍的角落情况。我们很高兴在此版本中与 F# 社区合作,使 F# 语言更简单、性能更高、更易于学习。

使 F# 更快、更易于互操作的任务 {...}

F# 最需要的功能之一(也是此版本中最重要的技术功能)是使创作异步任务更简单、性能更高,并且与其他 .NET 语言(如 C#)的互操作性更高。以前,创建创建任务所需的 .NET 任务,然后使用 调用它。使用 F# 6,您现在可以直接使用来创建任务并等待它。例如,请考虑以下 F# 代码以创建 .与网络兼容的任务:async {…}Async.AwaitTasktask {…}

此代码现在可以变为:

let readFilesTask (path1, path2) =
   task {
        let! bytes1 = File.ReadAllBytesAsync(path1)
        let! bytes2 = File.ReadAllBytesAsync(path2)
        return Array.append bytes1 bytes2
   }

的内置支持在 F# 代码中无处不在 - 无需打开命名空间。task {…}

任务支持以前已通过出色的 TaskBuilder.fs 和 Ply 库为 F# 5.0 提供。这些指导了 F# 6 中支持的设计,并提供了重要的测试来源。这些库的作者直接或间接地为 F# 6 的设计做出了主要贡献。将代码迁移到内置支持应该很简单。但是存在一些差异:内置支持和这些库之间的命名空间和类型推断略有不同,并且可能需要一些额外的类型注释。如果显式引用并在每个文件中打开了正确的命名空间,则这些社区库仍可与 F# 6 一起使用。

使用与 非常相似,并且两者都受支持。使用有几个优点:task {…}async {…}task {…}async {…}

  • 的性能要好得多。task {…}
  • 调试步进和堆栈跟踪会更好。task {…}
  • 与期望或生成任务的 .NET 包进行互操作更容易。 

使 F# 更易于学习:使用 expr[idx] 编制索引 

在 F# 5.0 之前(包括 F# 5.0),F# 已用作索引语法。此语法基于 OCaml 中用于字符串索引查找的类似表示法。允许使用基于那些学习 F# 或第一次看到 F# 的人的反复反馈,即使用点表示法索引与标准行业实践存在不必要的差异。F# 没有必要在这里发散。expr.[idx]expr[idx]

这不是重大更改 – 默认情况下,使用 时不会发出警告。但是,会发出一些与此更改相关的信息性消息,建议进行代码说明,并且可以选择激活一些进一步的信息性消息。例如,可以激活可选的信息警告 () 以开始报告表示法的使用。

使 F# 更加统一:“as”模式

在 F# 6 中,“as”模式的右侧现在可以本身就是一个模式。当类型测试为输入提供了更强的类型时,这一点很重要。

使 F# 更加统一:缩进语法修订

F# 社区贡献了一些关键改进,使 F# 语言在 F# 6 中更加统一。其中最重要的是消除 F# 使用缩进感知语法时的一些不一致和限制,请参阅RFC FS-1108 。这解决了自 F# 4.0 以来 F# 用户突出显示的 10 个重要问题。

使 F# 更快:改进了列表和数组表达式的性能和调试

在 F# 6 中,生成列表和数组表达式的编译形式现在提高了 4 倍(请参看详细的拉取请求)。生成式列表和数组表达式也大大改进了调试。

使 F# 更简单、更易于互操作:隐式转换

在 F# 6 中,我们激活了对 F# 中其他“隐式”和“类型导向”转换的支持,如RFC FS-1093 中所述。

此更改实现了三件事。

  1. 需要的显式预处理更少
  2. 需要的显式整数转换更少
  3. 对 的一流支持。添加了 NET 样式的隐式转换

猜你喜欢

转载自blog.csdn.net/ohpppp/article/details/130872551