Swift5の議論がスタート:ABIの安定化、並行処理、言語の進化プロセスの変更

Daiki Matsudate
4 min readAug 8, 2017

--

8/9(水)の日本時間午前1時に、Swiftのマネージャー Ted KremenekはSwift4のProposalフェーズが終了し、下期に予定されているリリースに向けたエンジニアリングコンバージェンスが完了した旨と、Swift5への議論がスタートしたことをメーリングリストで発表しました。

更新されたswift-evolutionのREADMEによると、Swift5では以下の領域を中心に議論、開発が進行する見込みとなっています。

ABIの安定化

ABIの安定化はSwift5におけるメインの開発領域となります。TedはSwift4では目標だったが、Swift5ではリリース要件であり、重要な言語の変曲点となるので、これ以上引き伸ばすことはできないと述べています。

また、ABIの安定化の着手へ必要となるが、Swift 4に間に合わなかった下記の項目に対しても優先的に実装が行われる見込みです。

標準ライブラリに必要となるジェネリクスの機能

Swift 4に間に合わなかったProtocolの条件付き適合(Conditional Conformances)Protocolの再帰的適合(Recursive protocol constraints)の実装です。Swift 4で待ち望まれていて、なおかつABIの安定化に必要となるので、早々にリリースされることが望まれます。

Memory Ownership Model

メモリの排他的アクセスに関してはSwift 4で導入されましたが、Cyclone / RustをインスパイアしたMemory Ownership Modelは、予測可能で決定論的な性能を必要とするシステムプログラミングやその他の高性能なアプリケーションにとって強く望まれています。Swift 5ではABI安定化の鍵となるこのMemory Ownership Modelも目標の一つに組み込まれています。

なお、モジュールの安定化とABIの安定化は別物です。詳細はABIStabilityManifestoの最初の段落をご覧ください。モジュールの安定化もSwift5での目標となっていますが、入らなかったとしてもABI安定化の主要部分は達成できるとも述べています。

並行処理の土台作り

Swift5では、並行処理の方向性を定めて、基礎的な部分に着手される予定です。ABIの安定化と並行して行うにはタスクが多すぎるので、並行処理をすべて盛り込むことを目指すのではなく、あくまで土台に集中する見込みです。

言語の進化プロセスの変更

Swift 4ではリリース期限を “Stage 1”, “Stage 2“ という形で分けていましたが、Swift 5ではその区切りは設けられず、 2018年3月1日 までに出されたプロポーサルは議論の対象となる見込みです。

Swift 5ではABIの安定化に焦点が当たることになりますが、それ以外の拡張への議論も並行して行う必要があることから、 プロポーサルには テストケースを備えた、実用的な実装 が必要になると述べられています。

プロポーサルの審査プロセスは以下の通りです。
1. プロポーサル作成後、 swift-evolution へプルリクエストを作成。
2. コアチームによるレビュー。
3. プロポーサルの正式審査前に、プロポーサルに対する実装をプルリクエストで提供。

アイディアの提案はこれまで通りできますが、プルリクエストがマージされるには、実装を提案することが必要となりました。プロポーサルを書いた人が実装をしなければいけない、ということではなく、プルリクエストという目に見える形で、プロポーサルの提案だけでなく、実装にも参加して欲しいとの旨が述べられています。実際、他の人が実装を提案してもいいし、コアチームによる公式レビュー前に実装が提供されていれば大丈夫なようですが、議論への参加が難しくなったとの声も上がっています。

より詳細なプロセスについてはこちらをご覧ください。

まとめ

Swift5では、Swift 4で延期が表明されてしまったABIの安定化など、開発のパフォーマンスに影響する項目が多く盛り込まれる見込みです。また、プロポーサルの公式レビューには実装の提供が必要となるなど、Swiftへのコントリビュートのハードルは一見上がったように見えますが、Swiftをより良くしていくためにも、みなさんの積極的なコントリビュートが望まれています。

--

--