Swift 程式語言雄心勃勃的 C++ 互操作性計劃引發了社群的熱烈討論,突顯出 Apple 面向未來的功能特性與現有效能挑戰之間的矛盾。當 Apple 繼續推進複雜的 C++ 整合功能時,開發者們對日常開發中持續存在的基礎編譯器問題表達了擔憂。
編譯器效能挑戰
Swift 社群對編譯器在處理複雜表示式時的困境特別直言不諱,尤其是在 SwiftUI 環境下。開發者們報告了令人沮喪的經歷,即經常遇到著名的編譯器無法在合理時間內完成型別檢查的錯誤,而這個錯誤幾乎沒有提供任何解決方案的指導。這個問題源於 Swift 的型別推斷系統以及它與過載返回型別的互動,可能導致型別檢查的指數級複雜性。
相信我,如果你認為 Swift 的工具鏈問題是不可避免的現實,你需要看看其他語言的工具有多好。
主要社群痛點:
- SwiftUI 編譯效能問題
- 缺乏精確的錯誤定位資訊
- IDE 可靠性問題
- 型別檢查效能問題
- 與其他現代程式語言相比的工具質量問題
C++ 互操作性目標
儘管存在爭議,Apple 的 C++ 互操作性計劃具有戰略意義。該公司旨在促進現有 C++ 程式碼庫(包括核心級程式碼)向 Swift 的遷移。這不僅僅是一個小眾功能,而是代表了 Apple 長期平臺戰略的根本轉變。提議的生命週期註解和非逃逸型別旨在實現 Swift 和 C++ 程式碼庫之間安全、高效的互操作,同時不犧牲效能。
計劃中的 C++ 互操作性功能:
- 不可逃逸型別支援
- 生命週期依賴註解
- 安全互操作模式
- 註解推斷能力
- STL 整合改進
開發環境問題
討論還突顯了關於 Swift 開發環境的更廣泛問題。開發者報告了 Xcode 的重大問題,包括頻繁的編譯器崩潰、不可靠的除錯體驗以及需要經常重置工作空間。這些挑戰與其他現代程式語言及其工具鏈(如 Rust 和 rust-analyzer)提供的開發體驗形成鮮明對比。
未來方向
雖然 Apple 繼續透過 C++ 互操作性等功能推進 Swift 的能力,但社群強烈主張解決基本的編譯器效能問題。這種情況呈現了在新增新功能和改進現有基礎設施之間的經典工程權衡。一些開發者建議,要求額外型別註解的嚴格模式可能有助於緩解編譯效能問題,但這需要與 Swift 備受推崇的易用性之間取得謹慎的平衡。
持續的討論反映了程式語言發展中的一個更廣泛的矛盾:在高階功能和互操作性與基本效能和可用性問題之間取得平衡。隨著 Swift 的不斷成熟,找到這種平衡對於其作為應用程式開發語言和系統程式語言的長期成功至關重要。
來源引用:Safe and efficient C++ interoperability via non-escapable types and lifetimes