内容简介:F# 4.7 已经发布,该版本重点是编译器和核心库的基础结构更改,首先需要安装: 最新版 .NET Core 3.0 最新版 Visual Studio 如果你是 Visual Studio 用户,默认情况下将会获取到 .NET Core。一旦安装了 .NET Cor...
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 修饰符的属性还将在工具提示中反映这些修饰符:
更多内容见发布说明:
https://devblogs.microsoft.com/dotnet/announcing-f-4-7/
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- LLVM接受NVIDIA的“f18” Fortran编译器作为官方Fortran编译器
- 编译原理实战入门:用 JavaScript 写一个简单的四则运算编译器(四)结语
- Scala.js 0.6.29 发布,将 Scala 编译成 js 的编译器
- Go 编译器介绍
- Go 编译器介绍
- C++编译器优化
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
模式识别
(希)Sergios Theodoridis、(希)Konstantinos Koutroumbas / 电子工业出版社 / 2010-2 / 75.00元
本书全面阐述了模式识别的基础理论、最新方法以及各种应用。模式识别是信息科学和人工智能的重要组成部分,主要应用领域有图像分析、光学字符识别、信道均衡、语言识别和音频分类等。本书在完美地结合当前的理论与实践的基础上,讨论了贝叶斯分类、贝叶斯网络、线性和非线性分类器设计、上下文相关分类、特征生成、特征选取技术、学习理论的基本概念以及聚类概念与算法。与前一版相比,增加了大数据集和高维数据相关的最新算法,这......一起来看看 《模式识别》 这本书的介绍吧!