Rust теперь проверяет сам себя тем же инструментом, которым разработчики ловят breaking changes в crates.io 🦀
В стандартную библиотеку Rust интегрировали cargo-semver-checks. На это ушли месяцы работы, десятки PR и больше 15 000 строк кода.
В 2020 году нестабильный метод добавили в стабильный trait и сломали async-std на nightly. В 2021-м новый метод BuildHasher нарушил dyn-safety. В 2022-м исправление soundness-проблемы у ChunksMut случайно убрало Send и Sync.
А в марте 2026 года изменение trait привело к тому, что тесты Tokio перестали собираться на Windows. Проблема оказалась достаточно серьёзной для выпуска Rust 1.94.1.
Автор cargo-semver-checks Предраг Груевски пишет, что сам ревьюил эти изменения и вряд ли смог бы заметить ошибки вручную. Их не заметили и более опытные разработчики std.
Самой сложной частью оказалась правильное разделение stable, unstable, const-unstable и default-unstable API, чтобы CI не ругался на нормальные изменения nightly.
Теперь cargo-semver-checks сможет автоматически ловить целый класс таких проблем ещё до того, как они попадут в стабильный Rust.
🔗 http://predr.ag/blog/protecting-the-rust-stdlib-from-breakage
#RustLang #OpenSource #DevTools
В стандартную библиотеку Rust интегрировали cargo-semver-checks. На это ушли месяцы работы, десятки PR и больше 15 000 строк кода.
В 2020 году нестабильный метод добавили в стабильный trait и сломали async-std на nightly. В 2021-м новый метод BuildHasher нарушил dyn-safety. В 2022-м исправление soundness-проблемы у ChunksMut случайно убрало Send и Sync.
А в марте 2026 года изменение trait привело к тому, что тесты Tokio перестали собираться на Windows. Проблема оказалась достаточно серьёзной для выпуска Rust 1.94.1.
Автор cargo-semver-checks Предраг Груевски пишет, что сам ревьюил эти изменения и вряд ли смог бы заметить ошибки вручную. Их не заметили и более опытные разработчики std.
Самой сложной частью оказалась правильное разделение stable, unstable, const-unstable и default-unstable API, чтобы CI не ругался на нормальные изменения nightly.
Теперь cargo-semver-checks сможет автоматически ловить целый класс таких проблем ещё до того, как они попадут в стабильный Rust.
🔗 http://predr.ag/blog/protecting-the-rust-stdlib-from-breakage
#RustLang #OpenSource #DevTools