llvm-cas を clang に導入するパッチの解説動画を見ました。難しくて推測混じりですが・・・ 内容をキーにした(content addressable)なストレージを基盤に使って、その上でファイルシステムのミラーのようなものを作る これはイミュータブルなツリーになる。 その上でコンパイラの個別の処理を動かして、既存の依存スキャンやジョブキャッシュの仕組みを使うと、 必然的に内容が違えば入力パラメータに含まれるファイル参照が変わるので、ファイルシステムの意図しないミュータビリティを避けることができてキャッシュシステムとして安定する かつ、同一内容は単一化されるので、クリーンを跨いだリビルドでも以前の内容を使ったキャッシュが動かせる。 ファイルツリーだけじゃなくて、#include ツリー(ようわからん)とかMachOバイナリなどのドメインデータ構造もCAS上のツリーとして扱うことで、ブロブのキャッシュが効いて、ビルドシステム全体で消費する物理ストレージがだいぶ節約できる。@cachemeifyoucan さんが作ってて、そのために生まれた人みたいになってる・・・ https://github.com/swiftlang/swift/pull/81990