Swift 4.2のBatch Modeについて

https://swift.org/blog/swift-4-2-released/Support for batch mode compilation resulting in faster build timesと言及されているものについて。

この件はWWDC 2018のセッションでも紹介がありました: https://developer.apple.com/videos/play/wwdc2018/401

  • これまでSwiftのビルドは簡単にまとめると、デバッグビルド(インクリメンタルビルド)では1ファイルずつコンパイル、リリースビルドではWhole Moduleモードと呼ばれるモードで、モジュール内の全ファイルを一度にまとめてコンパイル、という感じであった
    • Whole Moduleモードでは、モジュール内で継承されていないclassfinalが付いていなくても、実質的にfinal扱いするという最適化もできたりする
  • デバッグビルドが1ファイルずつコンパイルするのに比べて、Whole Moduleモードでまとめてコンパイルする方が速いケースがあった
    • このcompilation modeは最適化のモードとは分離されていて、SWIFT_COMPILATION_MODEというビルド設定で変更できる
    • 以前まではWhole Module Optimizationと呼ばれる最適化として提供されていたが、Swift 4.1(Xcode 9.3)からcompilation modeと最適化のモードが分離されるようになった
  • Swift 4.2からはインクリメンタルビルドにBatch Modeというものが実装され、デバッグビルドでも複数ファイル単位でコンパイルできるようになり、ビルドが高速化した

デバッグビルドが速くなって嬉しいですね。