F# 4.7 发布,改进编译器和核心库的基础结构
F# 4.7 已经发布,该版本重点是编译器和核心库的基础结构更改,首先需要安装:
- 最新版 .NET Core 3.0
- 最新版 Visual Studio
如果你是 Visual Studio 用户,默认情况下将会获取到 .NET Core。一旦安装了 .NET Core 或 Visual Studio 2019,就可以在 Visual Studio、Visual Studio for Mac 或 Visual Studio Code 中使用 F# 4.7。具体更新内容如下:
FSharp.Core 支持 .NET Standard 2.0
从 FSharp.Core 4.7.0 和 F# 4.7 开始,放弃对 .NET Standard 1.6 的支持。FSharp.Core 开始支持 .NET Standard 2.0,而在 .NET Core 上具有的特性:
- 依赖关系更加简单(特别是如果使用 Paket 这样的工具)
- 在 FSharpFunc<'T, 'TResult> 上的 FromConverter 和 ToConverter 静态方法
- FSharpFunc<'T, 'TResult> 和 Converter<'T, 'TResult> 之间的隐式转换
- FuncConvert.ToFSharpFunc<'T> 方法
- 访问 MatchFailureException 类型
- 以 F# 方式更友好地使用旧 Web API 的 WebExtenations 命名空间
另外,FSharp.Core API 扩展到更好地支持并行和顺序异步计算:
- Async.Parallel 有一个可选的 maxDegreesOfParallelism 参数,以调整所使用的并行度
- Async.Sequential 允许顺序处理异步计算
支持 LangVersion
F# 4.7 引入了使用编译器调整有效语言版本的能力,它允许我们为任何给定的编译器版本提供预览功能和发布功能。其中预览功能,只需在项目文件中设置以下属性:
<!-- Example --> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <LangVersion>preview</LangVersion> </PropertyGroup>
保存项目文件后,编译器将允许你访问该编译器附带的所有预览功能。在 .NET Core 和 Visual Studio 预览版本中使用 F# 时,默认情况下,语言版本将设置为预览,支持最低的语言版本是 F# 4.6。
Implicit yields
F# 4.7 为列表、数组、序列和定义 Yield、Combine、Delay 和 Zero 成员的任何计算表达式引入 implicit yield。使用 F# 过程中,需要在 F# 序列表达式中指定 yield 关键字,此版本可以删除所有 yield 关键字,因为它们是隐式的。
// Broke: F# 4.6 and lower let nums = seq { yield 1 yield 2 yield 3 } // Woke and Bespoke: F# 4.7 and higher let nums' = seq { 1 2 3 }
这使得 F# 序列表达式与 List 和数组表达式对齐。在 F# 4.7 之前,即使使用列表和数组,如果要有条件地生成值,则需要在任何地方指定 yield,现在所有的 yield 关键字可以删除:
// Broke: F# 4.6 and lower let f includeWeekend = [ yield "Monday" yield "Tuesday" yield "Wednesday" yield "Thursday" yield "Friday" if includeWeekend then yield "Saturday" yield "Sunday" ] // Woke and bespoke: F# 4.7 and higher let f' includeWeekend = [ "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" if includeWeekend then "Saturday" "Sunday" ]
不再需要双下划线
在 F# 4.7 之前,如果想指定成员声明,并且不想在 F# 对象上命名‘this’标识符,则必须使用双下划线。此版本,只需使用一个下划线:
// Broke: F# 4.6 and lower type C() = member __.M() = () // Woke and Bespoke: F# 4.7 and higher type C'() = member _.M() = ()
传递给构造函数和静态方法参数的缩进
以前的 F# 编译器需要对构造函数或静态方法缩进参数,这是一个缺陷,此版本做了改进:
// Broke: F# 4.6 and lower type OffsideCheck(a:int, b:int, c:int, d:int) = class end type C() = static member M(a:int, b:int, c:int, d:int) = 1 // Woke and Bespoke: F# 4.7 and higher type OffsideCheck'(a:int, b:int, c:int, d:int) = class end type C'() = static member M(a:int, b:int, c:int, d:int) = 1
预览功能
包含了两个新的预览功能:nameof 和开放静态类。详细介绍见发布说明。
F# Interactive for .NET Core Preview
从 F# 4.7 和 .NET Core 3 开始,可以使用 .NET Core 中的 F# Interactive (FSI),只需打开命令行并键入 dotnet fsi 即可开始。
对 Visual Studio 的 F# 工具的更新
Visual Studio 2019 16.3 版本与 F# 4.7 和 .NET Core 3 相对应。在这个版本中,工具提示(tooltip)得到改进,并修复了编译器和工具中影响用户在 Visual Studio 中体验的一些长期存在的问题。还有 F# 与 Roslyn 的集成更加稳定。
Record 定义工具提示(tooltip)使用更规范的格式:
匿名 Record 也一样:
FSI 中的 record 值输出也使用了更规范的形式:
显式 GET/SET 修饰符的属性还将在工具提示中反映这些修饰符:
更多内容见发布说明:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Cphalcon 4.0.0-rc.1 发布,PHP 的 C 扩展 Web 框架
Cphalcon 4.0.0-rc.1 发布了。Cphalcon 是一个开源的 Web 框架,作为 PHP 语言 C 扩展,它提供了更高的性能与更低的资源消耗。 主要更新内容: 新增 向 Phalcon\Http\Request::getURI()(及其接口)添加了可选的布尔参数,该参数指示方法是否应仅返回没有查询字符串的路径 变更 更改了Phalcon\Url::get在Phalcon\Helper\Str::reduceSlashes后面使用实现以减少斜杠#14331 更改了Phalcon\Http\Headers\set()以返回 self 获取更流畅的界面 更改了Phalcon\Security以允许在构造函数中进行会话和请求#14351 更改了Phalcon\Session\Manager以允许在构造函数中使用router#14351 …… Bug 修复 修复Phalcon\Helper\Str::includes以返回正确的结果#14301 修复Phalcon\Logger,移至正确的名称空间题#14263 修复了Phalcon\Session\Adapter\Abstra...
- 下一篇
Crystal 0.31.0 发布,C 的性能,Ruby 的语法
Crystal 0.31.0 发布了。Crystal 是一门基于 LLVM 的可编译的静态类型语言,它的整体设计尽可能地接近 Ruby 的体验,语法与各种标准库的接口都几乎和Ruby 一样(但兼容 Ruby 不是它的目标)。 开发团队表示他们热爱 Ruby 编写代码的效率,又倾心于 C 语言的性能,所以打造的 Crystal 语言给开发者提供了 Ruby 一样的语法体验,而且还拥有 C 一样的性能。 新版本附带多线程预览、性能改进以及所有常规 std-lib 中的常规修复和改进。以下是此版本的一些更新亮点: 语言变更 Crystal 0.31.0 版本有一种新的、更简洁的方法来声明方法中未捕获的块的类型限制。 无名参数&现在可以出现在列表的末尾。它可以有选择地具有类型限制,编译器和 doc 工具将使用该类型限制。 def foo(x, y, & : Int32 -> Int32) end 编译器 从 Crystal 0.29 开始,编译器可以发出警告。由于默认设置已更改为 --warnings=all,因此该功能现已退出使用。 LLVM 8.0 在 Linux 官方...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块