以下是阻礙將 Swift 6.0 的支援從實驗性狀態移出的問題清單:
請將 d8352e93c1c8042d9166eab3d76d6c07ef585b6d swiftlang/llvm-project#8998 向後移植
詳情:Swift 的 LLVM 版本缺少 [Clang] ICE in CheckPointerToMemberOperands passing decltype of lambda llvm/llvm-project#53815 的修復。這意味著從 Swift 開源專案建置的任何啟用斷言的 LLVM 版本都無法建置我們的程式碼。快照建置預設啟用斷言。
因應措施:在 Linux 上從原始碼建置 Swift,並禁用 LLVM 斷言,或使用 macOS。
PR:🍒 [Clang] [Sema] Handle placeholders in '.*' expressions (#83103) swiftlang/llvm-project#9038
互通性:編譯器與 C++ 橋接標頭檔對於 Optional<CxxValueType> 的 ABI 存在分歧 swiftlang/swift#75593
詳情:目前無法將小型 C++ 型別的 Swift Optional 值傳回 C++。編譯器與產生的橋接標頭檔對於如何執行此操作存在分歧。
因應措施:不要使用 Optional,改用會強制 C++ 型別進行堆疊配置的傳回型別。Array 是其中一種替代方案。
互通性:在 Ubuntu 22.04 上使用 C++17 或更高版本編譯時,會因 libstdc++ 中的循環標頭檔依賴而失敗 swiftlang/swift#75661
詳情:Swift 的 libstdc++ 的 clang 模組對應檔在包含 <execution> 時會產生循環。請參閱 https://forums.swift.org/t/swift-5-9-release-on-ubuntu-22-04-fails-to-build-std-module/67659
因應措施:編輯 <prefix>/lib/swift/linux/libstdcxx.h,註解掉 #include <execution> 行。
PR:[cxx-interop] Disable c++ execution header with libstdcxx versions >= 11 swiftlang/swift#75662 (僅為因應措施,非修復) 6.0 向後移植:🍒 [cxx-interop] Disable c++ execution header with libstdcxx versions >= 11 swiftlang/swift#75971 已在 swiftlang/swift:main 和 release/6.0 中修復,但未在 6.0.0 或 6.0.1 中修復
互通性:無法從 C++ 函式傳回 swift::Optional<swift::String> swiftlang/swift#76024
詳情:不支援從 C++ 函式傳回綁定型別 swift::Optional<T> 或 swift::String
Swift 無法在 C++23 模式下匯入 libstdc++-13 chrono 標頭檔 swiftlang/swift#76809
詳情:Swift 6.0 無法匯入 libstdc++-13 或更高版本的 <chrono> 標頭檔。
因應措施:使用 libc++ 或較低版本的 libstdc++。libstdc++-13 在 Ubuntu 24.04 LTS 上為預設值。
自 2024 年 10 月 18 日起已在 swiftlang/swift:main 中修復
[cxx-interop] SIL verifier crash in Unmanaged.passUnretained() on SWIFT_UNSAFE_REFERENCE type swiftlang/swift#80065
詳情:嘗試透過指標比較不安全參考型別時,SIL 驗證器崩潰
因應措施:禁用 SIL 驗證 (!! 令人擔憂) 已在 [cxx-interop] Relax a SILVerifier assertion for immortal reference types swiftlang/swift#81614 中修復
[cxx-interop] Bitfield setter/getter for SWIFT_UNSAFE_REFERENCE crashes frontend swiftlang/swift#80182
詳情:具有位欄位 getter/setter 的 SWIFT_UNSAFE_REFERENCE 型別會導致前端崩潰
因應措施:... 不使用 SWIFT_UNSAFE_REFERENCE?不確定。需要指導已在 [cxx-interop] Do not create mutating properties for classes swiftlang/swift#80197 中修復
CxxInterop:Swift 在某些情況下不會為 CxxConvertibleToContainer 合成迭代器運算子== swiftlang/swift#77607
詳情:Vector<u32, 2> 未被識別為 CxxConvertibleToContainer
因應措施:將其視為序列,並將任何傳輸到 Swift 型別的操作都需要手動複製元素
在 Arch 上啟用 cxx interop 並使用 GCC 15 會導致大量錯誤 swiftlang/swift#81774
詳情:Swift 在安裝 libstdc++-15 的情況下,無法匯入帶有 #include <math.h> 的 clang 模組。
https://gitlab.kitware.com/cmake/cmake/-/issues/26174
詳情:Swift + Ninja 不遵守 CMAKE_OSX_DEPLOYMENT_TARGET。這會導致 Swift 和 C++ 物件檔上的 LC_BUILD_VERSION 不匹配,並在控制台中產生大量警告。
ladybird/Meta/CMake/Swift/swift-settings.cmake
https://gitlab.kitware.com/cmake/cmake/-/issues/26175
詳情:啟用 CMP0157 後,swiftc 不會根據 CMAKE_INSTALL_NAME_DIR 設定 install_name directory 為 "@rpath"
ladybird/Userland/Libraries/LibGfx/CMakeLists.txt
PR:https://gitlab.kitware.com/cmake/cmake/-/merge_requests/9692。已於 2024 年 8 月 2 日合併,將向後移植到 CMake 3.29、3.30。
https://gitlab.kitware.com/cmake/cmake/-/issues/26195
詳情:從依賴項匯入的目標可能具有 swiftc 無法理解的 INTERFACE_COMPILE_OPTIONS 或 INTERFACE_LINK_OPTIONS。
因應措施:匯入後,為每個匯入的函式庫手動調整標誌。
AK+LibGfx:在 clang 模組對應檔中明確拼出標頭檔 #965
詳情:為較大的函式庫建立模組對應檔可能會導致 libc 標頭檔出現問題。例如,為 LibGfx 建立傘狀目錄條目會導致 <math.h> 出現問題,而該標頭檔顯然包含在每個抱怨它的檔案中。需要更多的模組對應檔處理才能讓 clang 前端/swiftc 正確地將系統標頭檔與我們的模組關聯起來,而不是與我們的模組關聯。
因應措施:¯\_(ツ)_/¯ 解決方案:為每個函式庫產生模組對應檔
Swift:匯入 AK 並查詢型別屬性會導致 Debug 建置中的 swift-frontend 崩潰 #1101
詳情:為 AK 容器建置 CxxSequence 協定一致性測試會在除錯模式下導致 Swift 前端處理程序崩潰
因應措施:在發行模式下建置 lmao 上游錯誤:尚未縮小
Swift:匯入 AK 後使用未命名空間的 'String' 型別會導致 Swift 前端崩潰 #1102
詳情:如果匯入了 AK,則接受未命名空間 String 引數的函式會導致 Swift 前端崩潰
因應措施:將所有對 String 的引用限定為 AK.String 或 Swift.String 上游錯誤:[cxxinterop] UNREACHABLE in AstMangler when mangling C++ type imported via global using declaration swiftlang/swift#82108
Swift:使用 Testing 模組建置 AK Swift 測試會導致編譯器前端崩潰 #1201
詳情:使用 swift-testing 測試 AK 容器對 Swift 互通性協定的符合性會導致前端崩潰
因應措施:保留自訂測試執行程式碼上游錯誤:尚未縮小
Swift:AK::StringView 在 swift/main 上不再是 CxxSequenceType #2168
詳情:AK::StringView 在 swift/main 上無法符合 CxxSequenceType
因應措施:存取 bytesUnsafe() 以便將視圖的位元組作為序列進行迭代上游錯誤:尚未縮小
互通性:從 C++ 函式傳回 Optional<CxxType> 時應用程式崩潰 swiftlang/swift#79767
詳情:從 C++ 呼叫的 Swift 函式傳回 MyCxx.CxxType? 會在呼叫時崩潰。
因應措施:改為傳回 [MyCxx.CxxType],並使用 0 或 1 個大小的陣列
簡單 CMake 專案需要根目錄 compile_commands.json swiftlang/vscode-swift#1449
詳情:SourceKit-LSP 和 vscode-swift 需要頂層 compile_commands.json 才能理解專案
因應措施:建立符號連結 ln -s Build/release/compile_commands.json compile_commands.json
自動包含 <swift/bridging> 路徑到 SDK 安裝中 swiftlang/swift#80142
詳情:在 Linux 上包含 <swift/bridging> 需要額外的包含路徑
因應措施:從 swiftc -print-target-info 取得路徑
不清楚如何在不建立副本的情況下將視圖類型或位元組切片傳遞給 Swift。
不清楚如何說服 Swift 我們的型別與 std:: 的型別一樣好。
如何與我們的垃圾回收器整合?https://forums.swift.org/t/ladybird-browser-and-swift-garbage-collection/76084