はじめに
Swift 5.8から「Upcoming Feature Flags」というフラグが追加されました。
Swiftの言語仕様において、まれにソースの互換性を壊す変更が採用されることがあります。
そのような破壊的変更はメジャーバージョンアップまで導入されませんが、Upcoming Feature FlagsをONにすることで早めに有効にできます。
今後の機能を予め有効にすることで、メジャーバージョンアップ時の移行が容易になるなどのメリットがあります。
詳細は以下の記事をご参照ください。
ただどのようなUpcoming Feature Flagがあるかがわかりづらいので、一覧で確認する方法を紹介します。
環境
- OS: macOS Ventura 13.5.2
- Swift: 5.9
- Xcode: 15.0 (15A240d)
- swift-tools-version: 5.9
Upcoming Feature Flagsの一覧
Upcoming Feature Flagsの一覧を確認する方法を紹介します。
Swift Evolution
わかりづらいのですが、実はSwift Evolutionのページから確認できます。
画面右にある旗のアイコンをクリックすることで、Upcoming Feature Flagがあるプロポーザルを絞り込むことができます。
2023/09/15現在は、6つのUpcoming Feature Flagがあることがわかります。
DisableOutwardActorInference
ImportObjcForwardDeclarations
BareSlashRegexLiterals
ExistentialAny
ForwardTrailingClosures
ConciseMagicFile
ソース
Swift Evolutionのページは、Swiftのどのバージョンと紐付いているかわかりづらいなどの問題があります。
そこでSwiftのソースを直接読みます。
しっかりとは追えていませんが、 swift/include/swift/Basic/Features.def
に UPCOMING_FEATURE
で定義されている値がUpcoming Feature Flagsだとわかります。
UPCOMING_FEATURE(ConciseMagicFile, 274, 6)
UPCOMING_FEATURE(ForwardTrailingClosures, 286, 6)
UPCOMING_FEATURE(BareSlashRegexLiterals, 354, 6)
UPCOMING_FEATURE(ExistentialAny, 335, 6)
UPCOMING_FEATURE(ImportObjcForwardDeclarations, 384, 6)
UPCOMING_FEATURE(DisableOutwardActorInference, 401, 6)
引数は3つあり、前から順に機能名( FeatureName
)、プロポーザル番号( SENumber
)、バージョン( Version
)です。
# define UPCOMING_FEATURE(FeatureName, SENumber, Version) \
バージョンは固定で 6
が入っており、おそらくSwift 6で完全に有効になることを意味しています。
おわりに
Upcoming Feature Flagsの一覧を確認することができました。
これで早めに今後の機能を有効にし、Swiftの最新仕様を使って実装できます