概要
Swift 6.0の正式サポートへの移行を妨げる主な問題点を一覧化 LLVMやC++インターロップ、CMake、Ladybird関連の課題を網羅 各問題の詳細、回避策、修正状況を明記 一部問題は既にmainブランチやリリースブランチで修正済みだが、安定版には未反映 未解決・未調査の問題や「nice-to-have」項目も記載
Swift 6.0正式サポート移行を妨げる主な問題一覧
-
LLVM関連の修正未反映
- SwiftのLLVMバージョンに[Clang] ICE修正が未反映
- PR: swiftlang/llvm-project#8998
- 詳細: decltype(lambda)利用時にアサートビルドが失敗
- 回避策: LinuxでLLVMアサート無効化ビルド、またはmacOS利用
- 修正: swiftlang/llvm-project#9038(Swift 6.0.0で修正済)
- SwiftのLLVMバージョンに[Clang] ICE修正が未反映
-
C++インターロップのABI不一致
- Optional<CxxValueType>返却時のABI不一致
- PR: swiftlang/swift#75593
- 詳細: Swift Optionalの小さなC++型返却が不可能
- 回避策: Optionalを使わず、ヒープ確保型やArrayで代用
- Optional<CxxValueType>返却時のABI不一致
-
libstdc++のヘッダー依存性サイクル
- Ubuntu 22.04でC++17以上利用時にサイクル発生
- PR: swiftlang/swift#75661
- 詳細: <execution>インクルード時にモジュール依存サイクル
- 回避策: libstdcxx.hの<execution>行をコメントアウト
- 修正: swiftlang/swift#75971(main/release/6.0で修正、6.0.0/6.0.1未反映)
- Ubuntu 22.04でC++17以上利用時にサイクル発生
-
Optional/Swift.StringのC++関数返却非対応
- swiftlang/swift#76024
- 詳細: swift::Optional<T>やswift::Stringの返却が未サポート
- 回避策: std::型で返却
-
libstdc++-13 <chrono> ヘッダーのC++23モード未対応
- swiftlang/swift#76809
- 詳細: Ubuntu 24.04 LTSでデフォルトのlibstdc++-13に未対応
- 回避策: libc++または旧libstdc++利用
- 修正: swiftlang/swift:main(2024年10月18日以降)
-
SIL verifierクラッシュ(SWIFT_UNSAFE_REFERENCE関連)
- swiftlang/swift#80065, #80182
- 詳細: Unmanaged.passUnretained()やbitfield getter/setterでクラッシュ
- 回避策: SIL検証無効化、またはSWIFT_UNSAFE_REFERENCE非利用
- 修正: swiftlang/swift#81614, #80197
-
CxxConvertibleToContainerのiterator operator==未合成
- swiftlang/swift#77607
- 詳細: Vector<u32,2>等が認識されず
- 回避策: Sequence扱い、手動コピー
-
Arch + GCC 15でcxx interop有効時に大量エラー
- swiftlang/swift#81774
- 詳細: <math.h>インクルード時にモジュールインポート失敗
- 回避策: なし
CMake関連の問題
-
CMAKE_OSX_DEPLOYMENT_TARGET未反映
- https://gitlab.kitware.com/cmake/cmake/-/issues/26174
- 詳細: Swift+Ninja利用時にターゲット未適用
- 回避策: set(CMAKE_Swift_COMPILER_TARGET ...)で明示指定
-
CMP0157有効時のinstall_name問題
- https://gitlab.kitware.com/cmake/cmake/-/issues/26175
- 詳細: swiftcが@rpathを正しく設定せず
- 回避策: add_custom_commandでinstall_name_tool適用
- 修正: https://gitlab.kitware.com/cmake/cmake/-/merge_requests/9692(CMake 3.29, 3.30へバックポート予定)
-
INTERFACE_COMPILE_OPTIONS等の未対応フラグ
- https://gitlab.kitware.com/cmake/cmake/-/issues/26195
- 詳細: 依存ライブラリのフラグをswiftcが理解できず
- 回避策: インポート後に手動でフラグ除去
Ladybird関連の問題
-
AK+LibGfx: clang module mapの明示化必要
- #965
- 詳細: umbrellaディレクトリエントリがlibcヘッダーと衝突
- 回避策: 各ライブラリごとに個別module map生成
-
AKインポート後の型プロパティ参照でクラッシュ
- #1101, #1102
- 詳細: Debugビルドやunnamespaced String利用でswift-frontendクラッシュ
- 回避策: Releaseビルド利用、String参照をAK.String/Swift.Stringに限定
- Upstreamバグ: swiftlang/swift#82108
-
swift-testing利用時のコンパイラフロントエンドクラッシュ
- #1201
- 詳細: AKコンテナのCxxSequenceプロトコル適合テストでクラッシュ
- 回避策: カスタムテストランナー利用
-
AK::StringViewのCxxSequenceType非適合
- #2168
- 詳細: swift/mainでStringViewがコンテナ扱いされず
- 回避策: bytesUnsafe()で手動イテレート
-
Optional<CxxType>返却時のアプリクラッシュ
- swiftlang/swift#79767
- 詳細: Swift関数からC++呼び出し時にクラッシュ
- 回避策: [MyCxx.CxxType]型(配列)で返却
-
CMakeプロジェクトでcompile_commands.json必須
- swiftlang/vscode-swift#1449
- 詳細: SourceKit-LSPやvscode-swift用にルート直下へ必要
- 回避策: シンボリックリンク作成
-
<swift/bridging>のinclude path自動追加未対応
- swiftlang/swift#80142
- 詳細: Linuxで追加パスが必要
- 回避策: swiftc -print-target-infoでパス取得
未解決・未調査の課題・Nice-to-have
-
view型やbyte sliceをコピーせずにSwiftへ渡す方法不明
- 詳細: C++所有のStringやSpan<byte>をSwiftへ安全に受け渡す方法の模索
- CxxConvertibleToContainerやCxxRandomAccessContainer型として認識させるのが困難
- 型がimmutableなためかSwift標準のstd::型のように扱えず
-
AK::Optional, AK::HashTable/HashMap, AK::Time等のサポート未確立
- 詳細: 独自型のSwift連携やガベージコレクタ統合方法の検討
- 参考: https://forums.swift.org/t/ladybird-browser-and-swift-garbage-collection/76084
この一覧は、Swift 6.0の安定利用に向けて現状クリティカルな障壁となっている問題の全体像を把握し、対応・検討を進めるためのリファレンスとして活用可能