Команда Rust рада сообщить о новой версии Rust: 1.24.0. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода. Если у вас установлена предыдущая версия Rust, для обновления достаточно выполнить: Если же у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.24.0 можно ознакомиться на GitHub. Этот релиз содержит две очень интересные новые фичи: rustfmt и инкрементальную компиляцию! В течении многих лет нам нужен был инструмент, который мог бы автоматически форматировать Rust код в какой-то "стандартный" стиль. В этом выпуске мы рады анонсировать превью rustfmt, которая может быть использована со стабильной версией 1.24. Чтобы попробовать, выполните следующие команды: Здесь есть два важных момента: во-первых, вы используете rustup component add вместо cargo install. Если вы до этого использовали rustfmt установленный через cargo install вы должны удалить его в первую очередь. Во-вторых, это превью, как и сказано в названии. rustfmt пока не достиг версии 1.0 и некоторые вещи ещё настраиваются, а также исправляются ошибки. Как только rustfmt достигнет версии 1.0 мы выпустим компоненту rustfmt, а rustfmt-preview будет считаться устаревшей. В ближайшем будущем мы планируем написать пост об этой релизной стратегии, информации будет много и она выходит за рамки поста данного релиза. Для большей информации можете посетить страницу rustfmt на github. Ещё в сентябре 2016 года мы писали о инкрементальной компиляции. Этот пост вдавался в подробности, о том как она работает, но ключевая идея такова: когда вы работаете над проектом приходится часто компилировать его, меняя небольшие участки кода и опять компилировать. Исторически так сложилось, что компилировался весь ваш код независимо от того насколько небольшими были ваши изменения. Идея инкрементальной компиляции состоит в том, чтобы компилировать только тот код, который действительно изменился, это означает что последующие компиляции будут быстрее.  Начиная с версии 1.24, это будет включено по-умолчанию. Это означает, что ваши сборки будут быстрее. Не забывайте также, о команде cargo check, которая позволит получить минимальное время сборки (примечание: эта команда не билдит бинарь, лишь проверяет корректность кода, но всё равно ведёт к ускорению билда в дебаг режиме так как кэш инкрементальной компиляции насколько я понимаю у них общий). Это не конец работ по производительности компилятора и инкрементальной компиляции. В будущем мы планируем намного больше работы над этим. Например, ещё одно изменение влияющее на производительность стабилизированное в этом релизе: codegen-units теперь установлены в 16 по-умолчанию. Небольшая заметка об этом изменении: оно делает билд быстрее, но конечный код будет немного медленней. Для максимальной производительности итогового кода необходимо выставить codegen-units равным 1 в Cargo.toml вашего проекта.  Есть ещё одно изменение, о котором мы хотели упомянуть здесь: UB. Rust стремится минимизировать UB не имея ни одного в безопасном коде и как можно меньше в небезопасном. Одна область где вы могли встретить UB, это panic! вызванный из FFI. Например так: Это не может работать, поскольку точный механизм работы паники должен быть согласован с тем, как работает C ABI, в этом примере, или любой другой ABI в других примерах. В Rust 1.24 этот код теперь прерывается, а не создает неопределенное поведение. Если вы фанат функции str::find, которая используется, чтобы найти необходимый char в &str вы должны быть рады видеть этот пул реквест: теперь она в 10 раз быстрее! Это благодаря memchr. [u8]::contains её так же использует, но не получает настолько экстремального ускорения. Так же в этом релизе были стабилизированы несколько новых API: Теперь следующие функции могут быть использованы в константных выражениях, например, чтобы инициализировать static: Множество людей участвовало в разработке Rust 1.24. Мы не смогли бы этого добиться без участия каждого из вас. Спасибо! Rust