Swift 4.1 正式版发布
Swift 4.1现已正式发布!它包含核心语言的更新,包括对泛型,新构建选项的更多支持,以及对Swift Package Manager和Foundation的小改进。在稳定ABI方面也取得了重大进展。
编译器更新
Swift 4.1是一个小语言版本。它与Swift 4.0的源代码兼容。它包含以下语言更改和更新,其中大部分都通过了Swift Evolution流程:
语言改进
Swift 4.1为该语言增加了更多的泛型特性,进一步推进了Swift Generics Manifesto中提出的目标。以下与泛型相关的提案已在本版本中实施:
SE-0143条件一致性
SE-0157支持关联类型的递归约束
SE-0185合成等度和哈希符合
SE-0187介绍Sequence.compactMap(_ :)
SE-0188使标准库索引类型可哈希
SE-0191消除Collection的IndexDistance
有关在Swift 4.1中使用条件一致性所取得进展的更多信息,请查看此博客文章。
Bulid改进
此版本提供了更多配置构建的方式,包括新的代码大小优化以及指定目标环境和平台支持的更简单的方法。
代码大小优化模式
编译器现在支持一种新的优化模式,该模式支持专用优化以减少代码大小。
这在此博客文章中更详细地讨论过。
建立导入测试canImport()平台条件的参数是所有平台上可能不存在的模块的名称。此条件测试是否可以导入模块,但不实际导入它。如果模块存在,则平台状况返回true; 否则,它返回false。
请参阅:SE-0075添加构建配置导入测试和条件编译块文档。
目标环境条件
代码编译为模拟器时,targetEnvironment(simulator)平台条件返回true; 否则,它返回false。
有关更多信息,请参见:SE-0190目标环境平台条件和条件编译块文档。
基础
这些JSONEncode和JSONDecoder类现在支持在编码和解码期间转换密钥的新策略。
这在这个论坛帖子中有更详细的讨论。
其他更新
这些是在此版本中实施的其他Swift Evolution提议:
SE-0184 Unsafe [Mutable] [Raw] [Buffer]指针:添加缺少的方法,为了清晰度调整现有标签,并删除重新分配的大小
SE-0186删除协议中的所有权关键字支持
SE-0189限制跨模块结构初始化器
SE-0198游乐场QuickLook API改造
ABI稳定性
Swift 4.1包含了许多内部变化,这些变化是稳定Swift 5中ABI的努力的一部分。以下是本版本中完成的任务列表:
在本地对象头中使用字大小字段进行引用计数(SR-4353)
通过见证表(SR-4332)审查与枚举鉴别器交互的效率
决定存在类型元数据的布局,包括协议描述符(SR-4341)
定义对命令无关修改的通用和协议要求的规范化(SR-3733)
审核每个运行时功能的合意性和行为(SR-3735)
对Sequences和Collections 执行适当的限制(SR-3453)
使用条件一致性(SR-3458)折叠各种收集包装
有关Swift的ABI稳定性进度的更多信息,请查看ABI仪表板。
程序包管理器增强
在Swift 4.1中对Swift Package Manager有一些改进:
Swift Package Manager现在可以正确解决使用不同URL方案(例如ssh和)的软件包图形的依赖性http。对于具有共享依赖性的包图,性能得到了显着改善。