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 视频中,我们可以粗略了解这一特性。
根据视频中的演示,Swift 和 C++ 的 bridging header 由 Swift 编译器自动生成,并支持大部分 Swift 特性。
双方的类型和方法都可以直接互相调用。
这个操作我是完全没想到,Swift 社区真的很努力。顺带一提 Foundation 也正在逐步重写,用纯 Swift 取代历史遗留的 Objective-C 部分,性能也有所提升。未来 macOS 的标准库代码会和其他平台上的统一。
跨语言的内存管理往往很麻烦。由于 Swift 和 C++ 都支持 RAII ,因此引用计数也可以跨语言,内存管理容易很多。Swift 5.9 还添加了 ~Copyable 协议,对应 unique_ptr 。在使用现代 C++ 的前提下,内存安全也有一定程度的保证。
用 Swift 可以把 C++ 代码封装成更清晰友好,同时支持异步的 API 。C++ coroutine 的进展还比较缓慢,大多数项目的异步实现都是各用各的。而 Swift 在语言层面拥有灵活的异步抽象,包括 continuation, Task 和 actor 等等。用 Swift 的 async API 可以实现它们的统一调度。
可能会利好游戏在苹果平台的开发。游戏往往都在用 C++ 开发,现在和原生可以更方便地交互了,移植体验会改善( Metal 不好用的话还是抓瞎)。
欢迎各位在 Linux / Windows 平台也体验一下 Swift ,参与 Swift org 社区的讨论!
1
LXGMAX 2023-06-07 14:29:27 +08:00
Cpp:让你看看谁是老大 ho
|
2
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 代码库。 |
3
just4id 2023-06-07 14:41:38 +08:00 via iPhone
居然还不转 Rust
|