写点什么

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

作者:Sergio De Simone

  • 2022-12-22
    北京
  • 本文字数:2223 字

    阅读完需:约 7 分钟

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

Swift 语言工作组已经详细说明了 2023 年及以后 Swift 重点发展的主要领域,其中包括定义内存管理的所有权模型、不可复制类型、宏系统和 C++ 互操作。


所有权是一种内存管理方法,最近由于 Rust 而变得流行起来。它是 Rust 最具有决定性的语言特征之一,是其提供内存安全保证的基础。


Rust 使用了第三种方法:内存是通过一个所有权系统来管理的,该系统有一套编译器检查规则。如果违反了任何规则,程序就不会编译。所有权的所有特性都不会拖慢程序运行时的速度。


关于在 Swift 中引入所有权的讨论始于 2017 年,并最终定义了所有权宣言。


虽然关于所有权的工作没有取得任何进展,但 Swift 语言工作组将其带回来,目的是为了让程序员对内存中的值有更多的控制权。这可以包括禁止隐式复制、允许所有权转移以及在不进行复制的情况下借用值。此外,Swift 可以支持不可复制类型,以限制临界值的生命周期。


这些控制将实现在内存中处理数据的新方法,将当前“不安全”结构的性能与 Swift 标准库功能的安全性相结合。


Swift 另一个有前途的领域是创建一个过程宏系统,以创建高级库和 DSL。宏是一种代码生成机制,可以在词法、句法或语义层面对源代码进行转换。Swift 中现有的一些功能可以实现为宏,如 Codable 协议、字符串插值、属性封装器和结果构建器。根据 Swift 语言团队的说法,使用宏来构建像上面列出的那些新特性,可以释放出更多的资源,用于语言及其工具相关的其他工作。


虽然 Swift 宏的相关工作仍处于非常早期的阶段,但关于它们在 Swift 中应该是什么样子,人们已经有一些想法。下面是一个可能的 stringify 宏的例子:


macro(contexts: [.expression, .parameter], external: "MyMacros.Stringify")func stringify(_ value: T) -> (T, String)
复制代码


C++ 互操作旨在实现从 Swift 调用 C++ 代码,以及从 C++ 调用 Swift 代码。由于这个特性的相关工作进展得比较快,所以它有可能会首先出现在 Swift 官方版本中。根据 Swift 语言团队的说法,当前的 C++ 互操作实现已经支持自有值类型、普通值类型、外部引用类型和迭代器,并为方法、指针、l- 值和 r- 值引用有关的基本问题提供了答案。


虽然上述三个领域最具创新性,但 Swift 的演进也将专注于改进现有的功能,比如并发和泛型。


特别是在并发方面,其目标将是改善 Sendable 和 actors 提供的数据隔离,而泛型方面的工作将带来对变量泛型的支持,即拥有不同数量占位符类型的泛型。


重写 Foundation 框架


Swift 团队已着手开始 Foundation 框架的一个新的开源实现。新的实现完全采用 Swift 编写,旨在通过消除 Objective-C 和 Swift 之间的转换成本来提升性能,并对其进行模块化和清理。


因为采用了原生的 Swift 实现,Foundation 框架不再需要在 C 和 Swift 之间进行转换,从而获得更高的性能。


正如苹果工程师 Tony Parker 在 Swift 论坛上所解释的那样,性能方面带来的好处是非常显著的。


使用 Swift 重新实现的日历应用的速度是 C 的 1.5 到 18 倍(在创建、日期计算等各种测试基准中调用 Swift)。


Foundation 框架是大多数 macOS 和 iOS 应用程序的基石,提供了大量的抽象,包括 NSObject、NSString、NSArray 和 NSDictionary 等等。


Foundation 最初是用 Objective-C 编写的,很大程度上利用了它的动态特性,由于 Swift 与 Objective-C 运行时的互操作性,Foundation 目前可以用于运行苹果操作系统上的 Swift 应用程序。不过,对于其他支持 Swift 但只有原始 GNUstep Objective-C 运行时的平台(如 Linux)来说就不是这样了。为了规避这一限制,苹果在开源 Swift 时推出了 swift-corelibs-foundation,一个 Core Foundation 的 Swift 包装器,一个位于 Foundation 核心的底层 C API,并提供了映射到 Foundation 的“桥接”抽象,包括 CFString、CFDictionary 等。


如前所述,使用 Swift 重写将是一个重构 Foundation 框架的机会。目前,有五个不同的包进行了重新设计,包括 FoundationEssentials、FoundationInternationalization、FoundationNetworking、FoundationXML 和 FoundationObjCCompatibility。开发者可以只引入特定应用程序实际需要的依赖项。例如,一个从头开始开发应用程序并且想要切断与 Darwin Foundation 层所有联系的开发者,可以完全跳过 Obj-C 兼容层。


在做出重写 Foundation 决定的同时,苹果正在调整 C、Objective-C 和 Swift 层之间的顺序,并让 Swift 层成为 Foundation 的基础。这将有机会删除一些目前可以直接由 Swift 语言和标准库提供的特性,如 NSCoding 和 NSKeyedArchiver,取而代之的是 Codable,或者 Lock、OperationQueue,以及其他被 Swift 结构化并发取代的并发原语。不过,这些特性将由 Darwin 平台上的一个单独包提供,以确保与现有代码兼容。


这一声明在 Swift 论坛上引发了许多评论,其中大多数都暗示重新考虑现有的几个 API 的便利性,确保 Swift 类型(如 Codable)或结构化并发足够强大,以便在核心基础层完全取代 Obj-C 类型。


可以预见的是,Foundation 重写是一项中期的努力,目前还没有宣布具体的时间表,苹果正在邀请 Swift 社区加入讨论,一起定义它的未来。


对于 Swift 的发展,InfoQ 将继续跟踪报道。


参考链接:

https://www.infoq.com/news/2022/12/apple-swift-foundation-rewrite/

https://www.infoq.com/news/2022/12/swift-ownership-macros-cpp-api/

相关阅读:

C++ 开发,这些 GUI 库一定不要错过!

学 C++ 的以后都能从事哪些岗位?

现代化工具链在大规模 C++ 项目中的技术实践

C/C++ 的类型转换

2022-12-22 18:275616

评论

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

告别资料混乱!PJMan 让项目文件管理,简单到不用找

Tecjt_锦图科技

项目管理

看板方法的原则与实践

ShineScrum

Kanban 看板 看板工具

财务人必看:这款RPA让你少熬夜,多成长

Techinsight

为什么舆情监测离不开海外社交媒体分析?

沃观Wovision

社交媒体 沃观Wovision 舆情监测系统 海外舆情监测

SonicWall防火墙安全态势深度分析:固件解密与漏洞洞察

qife122

漏洞分析 SonicWall

必看!Apache DolphinScheduler 任务组因 MySQL 时区报错全解析与避坑指南

白鲸开源

MySQL 大数据 开源 Apache DolphinScheduler 任务调度

码住!DolphinScheduler 常见故障 “急救指南”,一文解决服务、调度、连接等难题

白鲸开源

大数据 开源 技术 Apache DolphinScheduler 故障排查

扫描全能王“翻页自动拍”功能上线,AI扫描提升教师教学材料电子化效率

合合技术团队

私域商城物流模块开发实战:基于快递鸟API构建高效履约体系

快递鸟

PostgreSQL大表同步优化:如何避免网络和内存瓶颈?

谷云科技RestCloud

postgresql API 数据同步 ETL 数据集成工具

NJet支持使用json格式的配置文件了

通明湖

数据集成平台怎么选?从ETL到CDC再到iPaaS的全景对比

谷云科技RestCloud

数字化转型 ETL 集成平台 CDC ipaas

谙流 ASK 技术解析(二):高性能低延迟

AscentStream

消息队列

1688商品列表API数据解析

tbapi

1688商品列表接口 1688API 1688数据采集 1688数据分析

腾讯测试实践与工具分享之后台测试

优测云服务平台

测试工具

如果大模型是一片星空,谁是北斗?

脑极体

AI

MyEMS:开源能源管理的破局者

开源能源管理系统

开源 开源能源管理系统

舆情监测进入全球化时代,海外社交媒体分析是核心驱动力

沃观Wovision

社交媒体 沃观Wovision 舆情监测系统 海外舆情监测

(二)一文读懂数仓设计的核心规范:从层次、类型到生命周期

白鲸开源

数据库 大数据 数据仓库 命名规范

Flink Agents:基于Apache Flink的事件驱动AI智能体框架

Apache Flink

大数据 flink 实时计算

避坑指南:1688商品详情API采集及常见错误码

tbapi

1688商品详情接口 1688API 1688商品数据采集 1688商品详情API 1688数据分析

揭秘LedgerCTF的AES白盒挑战:逆向工程与密码学分析

qife122

逆向工程 白盒密码学

淘宝闪购实时分析黑科技:StarRocks + Paimon撑起秋天第一波奶茶自由

阿里云大数据AI技术

阿里云 饿了么 StarRocks 物化视图 湖仓

Openresty Tracing 最佳实践

观测云

openresty

AI 在研发效能中的实际应用效果|《DevData 2025 研发效能基准报告》

思码逸研发效能

研发效能 研发效能度量 研发效能管理 智能编程 思码逸

MyEMS:开源驱动下的企业能源管理革新者 —— 从技术架构到 “双碳” 落地的实践之路

开源能源管理系统

开源 开源能源管理系统

再见 Cursor,Qoder 真香!这波要改写 AI 编程格局

阿里巴巴云原生

“团队敏捷教练进阶课程”10月18-19日 · 在线A-CSM认证周末班

ShineScrum

Scrum 敏捷

Claude Code 从入门到精通:最全配置指南和工具推荐

Immerse

Audition 入门教程:音频降速

北桥苏

Adobe Audition

iPaaS 与传统 ESB 的区别,企业该如何选择?

谷云科技RestCloud

ESB API 数据传输 集成平台 ipaas

Swift 2023:所有权、宏和C++互操作_开源_InfoQ精选文章