HeadlinesBriefing HeadlinesBriefing.com

GitHub headstart ускоряет Rust 54%

Hacker News •
×

Запускайте зависимые крейты до того, как их зависимости завершат проверку типов. Каждый крейт ждет, пока крейты, от которых он зависит, будут полностью проверены, включая тела функций, прежде чем начать. Ему не нужны эти тела для проверки собственных типов. Он компилируется против интерфейса зависимости, метаданных в ее файле .rmeta. Headstart заставляет rustc записывать ранний файл метаданных сразу после проверки интерфейса и заставляет cargo запускать зависимые крейты на его основе. Затем тела каждого крейта проверяются, пока нижестоящие крейты уже компилируются.

cargo check: зависимые выполняются до завершения на ранних метаданных. cargo build: зависимые выполняют весь свой анализ на ранних метаданных, затем ждут полных метаданных зависимости перед генерацией кода. Пока они ждут, они возвращают свой слот задания. Если в теле есть ошибка, сборка все равно завершается с этой ошибкой, с теми же диагностическими сообщениями и кодом завершения, что и сегодня; могут отличаться только строки прогресса и межкрейтовый порядок JSON-сообщений.

Затраты — это отбрасываемая работа нижестоящих крейтов, ошибки, сообщаемые немного позже, и одновременное использование большего объема памяти (см. docs/design.md). На стандартном фронтенде rustc headstart делает чистые сборки 13 реальных проектов (rust-analyzer, zed, bevy, lemmy, polars и другие) до 54% быстрее для cargo check и до 42% быстрее для cargo build. Ни один не медленнее. С параллельным фронтендом (-Zthreads=8), который покрывает часть той же области, он добавляет до 25%. Это показатели для 16 ядер.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing