写点什么

Swift 5.8 新特性预览:支持函数向后部署

  • 2023-05-08
    北京
  • 本文字数:1053 字

    阅读完需:约 3 分钟

Swift 5.8新特性预览:支持函数向后部署

Swift的最新版本支持即将到来的新特性,让开发人员可以开始使用将在 Swift 6 中变成稳定版本的特性。此外,它还提供了一种方法,让开发人员可以在早期操作系统中使用新功能。

 

Swift 5.8 之所以支持即将到来的语言特性,主要是为了让开发人员可以开始为程序迁移做准备。Swift 团队成员 Alexander Sandberg 说,考虑到 Swift 6 的许多特性造成了某种程度的源代码不兼容,这一点尤其重要。此外,支持新特性还可以帮助苹果收集早期用户的反馈。

 

新的编译器标志-enable- coming-feature X可以控制是否启用对即将到来的特性的支持,其中X是要启用的特性。目前,在 Swift 5.8 中,有 4 个即将到来的特性可以选择性地启用:简略魔法文件名、尾随闭包前向扫描匹配、存在类型any,以及正则表达式字面量

 

在使用即将到来的特性之前,可以使用新增的#if 检查确保它确实可用:#if hasFeature(ImplicitOpenExistentials)。需要的时候,可以将它与compiler(>=x.y) 检查一起使用。

 

Swift 5.8 还引入了对@backDeployed属性的支持,目的是为了方便开发人员将新功能向后移植到框架的旧版本。例如,可以通过扩展添加新功能,并使用众所周知的@available和新增的@backDeployed属性进行注解:

extension FrameworkAPI {  @available(FrameworkAPIVersion 1.0, *)  @backDeployed(before: FrameworkAPIVersion 2.0)  public func newCapability(...) -> ResultType { ... }}
复制代码

 

在所提供的示例中,newCapability函数仅在FrameworkAPI的 2.0 版本中有原生支持,但是使用@backDeployed属性,开发人员可以提供该功能的实现,并注入到框架的先前版本中。

 

这个新特性旨在方便开发人员创建弹性库,并且只能应用于函数、方法、下标和计算属性。例如,这种机制不支持新类型。此外,向后部署的函数体必须遵守与@inlinable函数相同的限制,例如,它们只能引用客户端可访问的声明,如public@usableFromInline声明。

 

Swift 5.8 带来的另一项重大变化修改结果构建器实现,改进了它的编译时性能、代码补全结果和诊断。具体来说,新实现利用了 Swift 5.7 的扩展多语句闭包推断,优化了编译器类型推断和错误消息。特别是,它移除了在结果构建器中声明局部变量的几个限制,例如需要有初始化器,而且没有提供对计算变量、观察器和属性封装器的支持。

 

Swift 5.8 还带来了很多变化,要了解完整细节,请查阅官方公告。

 

原文链接:

https://www.infoq.com/news/2023/04/swift-5-8-released/


相关阅读:

苹果现已支持 Swift 包索引

Rust、Go 和 Swift 在性能和并发性方面有何差异?

Swift 2023:所有权、宏和 C++ 互操作

2023-05-08 09:452058

评论

发布
暂无评论
发现更多内容

XEngine:深度学习模型推理优化

华为云开发者联盟

深度学习 模型推理 显存优化 计算优化 XEngine

利用极狐GitLab DevSecOps 功能检测 log4j 的多种方式

极狐GitLab

解析Redis操作五大数据类型常用命令

华为云开发者联盟

数据库 redis string 数据类型 getset

轻松驾驭EB级千万QPS集群,TDSQL新敏态引擎元数据管控与集群调度的演进之路

腾讯云数据库

tdsql 国产数据库

DM 分库分表 DDL “悲观协调” 模式介绍丨TiDB 工具分享

PingCAP

Go编译原理系列2(词法分析&语法分析基础)

书旅

Go 后端 编译原理

​使用 Amazon Neptune 通过数据仓库构建知识图谱,借此补充商务智能体系

亚马逊云科技 (Amazon Web Services)

Data

MySQL 中 blob 和 text 数据类型详解

Simon

MySQL

JDK ThreadPoolExecutor核心原理与实践

vivo互联网技术

jdk ThreadPoolExecutor Java 开发

又拿奖了!腾讯云原生数据库TDSQL-C斩获2021PostgreSQL中国最佳数据库产品奖

腾讯云数据库

tdsql 国产数据库

发布你的开源软件到 Ubuntu PPA

hedzr

#Ubuntu Debian packaging ppa

「山东城商行联盟」数据库准实时数据采集系统上线,DataPipeline助力城市商业银行加快数字化转型

DataPipeline数见科技

数据库 中间件 数据同步 数据融合 数据管理

鲲鹏HCIA认证之初识鲲鹏

桥哥技术之路

鲲鹏

元宇宙地产:品牌和投资者的大好机会?

devpoint

以太坊 NFT 元宇宙 12月日更

跟着动画学Go数据结构之堆排序

宇宙之一粟

golang 数据结构 排序算法 Go 语言 12月日更

前沿干货!深度揭秘TDSQL新敏态引擎Online DDL技术原理

腾讯云数据库

tdsql 国产数据库

喜提双奖 | 旺链科技彰显综合硬实力!

旺链科技

区块链 产业区块链 供应链

webpack打包过程如何调试?

Jerry Wang

前端 前端开发 webpack 28天写作 12月日更

一个简单的单体服务流量标记demo

zuozewei

Java 性能测试 全链路压测 12月日更

云图说|初识数据库和应用迁移UGO

华为云开发者联盟

数据库 华为云 UGO 异构迁移

内核干货不容错过,龙蜥内核的Load Averages剖析直播回顾上线了

OpenAnolis小助手

Linux Kenel 内核 龙蜥社区

蓝格赛(中国)用TDengine落地聚合查询场景,效果如何?

TDengine

数据库 tdengine 后端

盘点 2021|不忘初心,扬风起航

小鲍侃java

盘点2021

一文详解TDSQL PG版Oracle兼容性实践

腾讯云数据库

tdsql 国产数据库

一文带你梳理Clang编译步骤及命令

华为云开发者联盟

编译 LLVM Clang编译 Clang 编译命令

重装上阵——Graviton2提升Aurora性价比

亚马逊云科技 (Amazon Web Services)

Data

java开发之SSM开发框架

@零度

Java ssm

如何将Amazon RDS与Amazon Aurora数据库迁移至Graviton2?

亚马逊云科技 (Amazon Web Services)

Data

Swift 5.8新特性预览:支持函数向后部署_前端_Sergio De Simone_InfoQ精选文章