文章摘要
Ladybird浏览器项目在GitHub上记录了阻碍Swift 6.0升级的技术问题,主要涉及代码兼容性和功能实现方面的挑战。该问题发布于2024年8月,目前仍在讨论中。
文章总结
Swift 6.0 迁移阻碍问题清单
项目背景
Ladybird 浏览器项目计划迁移至 Swift 6.0,但在开发过程中发现了一系列技术障碍。该问题清单(#933)由开发者 ADKaster 于 2024 年 8 月 2 日创建,详细记录了阻碍 Swift 6.0 支持从实验状态转向正式状态的各类问题。
核心问题分类
Swift 语言层问题
- C++ 互操作性缺陷
- Optional 类型与 C++ 的 ABI 不兼容(swiftlang/swift#75593)
- 返回
swift::Optional<CxxType>导致应用崩溃(swiftlang/swift#79767) - 无法直接传递
swift::String或视图类型至 Swift 而不拷贝数据
- 标准库兼容性
- Ubuntu 22.04 下 C++17+ 编译因循环头文件依赖失败(swiftlang/swift#75661)
- libstdc++-13 的
<chrono>头文件导入失败(swiftlang/swift#76809)
- C++ 互操作性缺陷
CMake 工具链问题
- Swift + Ninja 未正确处理 macOS 部署目标(CMake#26174)
- Swift 编译器未遵循
CMAKE_INSTALL_NAME_DIR设置(CMake#26175)
Ladybird 项目特有障碍
- 模块映射(modulemap)与系统头文件冲突(PR#965)
- 调试模式下 Swift 前端崩溃(Issue#1101)
解决进展与临时方案
- 已修复问题
- C++ 执行头文件循环依赖(通过注释
<execution>临时解决) - CMake 的
install_name问题(MR#9692 已合并)
- C++ 执行头文件循环依赖(通过注释
- 待解决/需上游支持
- Swift 与 C++ 的 Optional 类型互操作(需 Swift 社区进一步优化)
- 垃圾回收集成方案未明确(论坛讨论)
后续动态
- 2025 年 2 月 17 日,项目成员 awesomekling 宣布不再采用 Swift,转而探索其他技术方案(如 Zig),并关闭此议题。
- 社区反馈显示对决策的复杂情绪(16 个😕反应 vs 4 个👍),部分开发者建议考虑 Zig 等替代方案。
完整讨论记录:参见 GitHub Issue #933
评论总结
总结评论内容:
- 对放弃Swift的支持观点:
- 认为Swift与苹果绑定过深,不如使用现代安全实践的C++子集 "Swift is too tied to Apple...relative to a subset of C++ written with contemporary memory safety practices" (drnick1)
- 批评Swift语言设计差、编译慢、不适合系统编程 "Swift is a poorly designed language, slow to compile, visibly not on path to be major system language" (stephc_int13)
- 项目决策相关讨论:
- 提交记录显示因长期无进展而放弃Swift "After making no progress...remove it from the codebase" (incognitojam)
- 质疑为何选择Swift而非Rust "Why...not with Rust? Does Rust not have a better history of C++ interop?" (meisel)
- 其他相关讨论:
- 对项目未来语言的猜测(Jakt/Rust) "Does that mean their own programming language, Jakt is back on the table?" (losvedir) "When does the migration to Rust start?" (upmind)
- 对语言设计者的批评 "Everything Chris Lattner has done has been a 'successful mess'" (pbohun)
- 中立观点:
- 表示只要支持Linux就愿意试用 "As long as it runs on Linux, I'm willing to test drive it" (WCSTombs)