Swift 5.9 感觉有点东西,除了宏之外还有一个亮点是可以和 C++互调用,甚至支持智能指针

2023-06-07 13:11:32 +08:00
 hguandl

WWDC23 的 Session 列表已经出来了 https://developer.apple.com/videos/wwdc2023/ 。宏和 SwiftData 看起来很有趣,解决了一些以前用 Swift 写 data model 时的痛点。此外还有一个我很感兴趣的就是和 C++ 的 interop ,明天会出一个专门的 Session 10172 - Mix Swift and C++ 讲解。在今天已经出的 What's new in Swift 视频中,我们可以粗略了解这一特性。

无需手写 Bridging 代码即可双向调用

根据视频中的演示,Swift 和 C++ 的 bridging header 由 Swift 编译器自动生成,并支持大部分 Swift 特性。

双方的类型和方法都可以直接互相调用。

支持混写,在 CMake 项目里可以直接生成 target

这个操作我是完全没想到,Swift 社区真的很努力。顺带一提 Foundation 也正在逐步重写,用纯 Swift 取代历史遗留的 Objective-C 部分,性能也有所提升。未来 macOS 的标准库代码会和其他平台上的统一。

支持 C++ 智能指针

跨语言的内存管理往往很麻烦。由于 Swift 和 C++ 都支持 RAII ,因此引用计数也可以跨语言,内存管理容易很多。Swift 5.9 还添加了 ~Copyable 协议,对应 unique_ptr 。在使用现代 C++ 的前提下,内存安全也有一定程度的保证。

个人理解和感受

1934 次点击
所在节点    分享发现
3 条回复
LXGMAX
2023-06-07 14:29:27 +08:00
Cpp:让你看看谁是老大 ho
lxdlam
2023-06-07 14:41:33 +08:00
- 宏:基本上来说宏就是把编译器当做自己的预处理器来做 codegen ,从提案和实现上来看,Swift 的实现还是比较累赘,简化宏的构建和未来使用上,应该还有些工作可以做。
- 跟 C++ interop:本身也是把脏活累活交给 LLVM ,编译器多做一步 parsing ,然后做 codegen ,生成另一边的 binding ,重点看易用性,这一块做的比较好的是 Julia ,不仅可以直接 call C/C++(需要用 Cxx.jl 包)函数,更可以直接在 Julia 里面写对应代码,下面直接调用。Swift 的易用性目前看起来还是不错,期待明天的演讲。至于 CMake 编译工具的整合,是一个很 intuitive 的结果,Swift 支持编译器插件之后,这种加 custom pass 的工作就变得很简单了,比如 zig 也支持直接混合编译 C/C++/zig 代码库。
just4id
2023-06-07 14:41:38 +08:00
居然还不转 Rust

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/946595

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX