크레이트 분리 이야기는 늘 누군가 빌드 시간 하나를 올리는 것으로 끝난다. 숫자는 두 개고, 움직이는 방향도 다르다.
클린 빌드는 빈 target에서 시작하는 전체 빌드다. 크레이트를 나누면 이쪽은 오히려 조금 나빠질 수 있다. 크레이트마다 메타데이터가 붙고 링커는 결국 전부를 본다. 수정 루프는 파일 하나를 고친 뒤 기다리는 시간이다. 고친 크레이트에 의존하는 크레이트가 적으면 이쪽이 좋아진다. cargo는 고친 크레이트와 그것에 의존하는 크레이트만 다시 빌드하고 나머지는 건드리지 않는다.
함정은 제네릭이다. 제네릭 함수는 그것을 구체 타입으로 인스턴스화하는 크레이트에서 컴파일된다. 그래서 제네릭 코드를 별도 크레이트로 옮겨도 비용은 거의 옮겨 가지 않는다. 비용은 여전히 하위 크레이트가 낸다.
cargo build --timings는 크레이트마다 시작과 끝을 담은 HTML 보고서를 만들고, 그러면 임계 경로가 눈에 보인다. 수정 루프를 잴 때는 같은 파일을 고치고 다시 빌드하기를 열두 번쯤 반복하고 첫 실행은 버린다. 지루하지만 실제로 매일 마주하는 숫자는 이쪽이다.
그러니 둘 다 적고, 어느 파일을 고쳤는지도 적자.