V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hguandl
V2EX  ›  分享发现

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

  •  
  •   hguandl · 2023-06-07 13:11:32 +08:00 · 1935 次点击
    这是一个创建于 539 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 特性。

    截屏 2023-06-07 14.25.43.png

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

    截屏 2023-06-07 14.26.14.png

    IMG_3885.PNG

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

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

    IMG_3882.PNG

    支持 C++ 智能指针

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

    IMG_3892.JPEG

    个人理解和感受

    • 用 Swift 可以把 C++ 代码封装成更清晰友好,同时支持异步的 API 。C++ coroutine 的进展还比较缓慢,大多数项目的异步实现都是各用各的。而 Swift 在语言层面拥有灵活的异步抽象,包括 continuation, Task 和 actor 等等。用 Swift 的 async API 可以实现它们的统一调度。

    • 可能会利好游戏在苹果平台的开发。游戏往往都在用 C++ 开发,现在和原生可以更方便地交互了,移植体验会改善( Metal 不好用的话还是抓瞎)。

    • 欢迎各位在 Linux / Windows 平台也体验一下 Swift ,参与 Swift org 社区的讨论!

    3 条回复    2023-06-07 14:41:38 +08:00
    LXGMAX
        1
    LXGMAX  
       2023-06-07 14:29:27 +08:00
    Cpp:让你看看谁是老大 ho
    lxdlam
        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 代码库。
    just4id
        3
    just4id  
       2023-06-07 14:41:38 +08:00 via iPhone
    居然还不转 Rust
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3137 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:23 · PVG 21:23 · LAX 05:23 · JFK 08:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.