Перед каждым стабильным релизом Rust команда прогоняет Crater — инструмент, который собирает новой версией компилятора всю публичную экосистему. В прошлом месяце Crater нашёл, что бета-Rustdoc падает на крейте
indented-blocks. Весь крейт — одна строчка #![recursion_limit = "8"], ничего больше.Rustc такой код компилирует спокойно. Rustdoc падает с «reached the configured maximum number of stack frames», разбирая внутренний трейт
NumBufferTrait из core::fmt.Формально это не регресс: число кадров стека не входит в гарантии стабильности. Но Ноа Лев из команды Rustdoc зацепился за другое — с какой стати почти пустому крейту вообще инлайнить документацию трейта из
core::fmt, который никто не переэкспортирует. Логи подтвердили, что Rustdoc действительно лезет за ним.За неделю разбора и серии PR среднее время работы упало на 25%, то есть Rustdoc стал быстрее на 33%. На реальных крейтах вроде
hyper и bitmaps выигрыш доходит до 40%, на микробенчмарках вроде helloworld — до 60%.Автор прошёл весь путь по шагам: от странного сообщения на Zulip до профилирования и правок, попутно объясняя, как Rustdoc устроен изнутри и почему он так тесно завязан на внутренние API компилятора.
@prog_stuff