Rust 1.24

Команда Rust рада сообщить о выпуске Rust 1.24.0. Rust — это системный язык программирования, нацеленный на безопасность, быстрое и параллельное исполнение программ.
Если у вас уже установлена предыдущая версия через rustup, для обновления просто выполните
$ rustup update stable
Для новой установки скачайте rustup и не забудьте прочитать примечания к выпуску 1.24.0 на GitHub.
Что нового в Rust 1.24.0?
rustfmt
Несколько лет мы ждали инструмент для автоматического приведения исходного кода на Rust в «стандартный вид». Встречайте предварительную версию rustfmt! Чтобы попробовать, просто выполните
$ rustup component add rustfmt-preview
Нужно отметить два важных момента: во-первых, вы должны использовать именно rustup component add, а не cargo install. Если вы ранее использовали rustfmt через cargo install, вам необходимо предварительно его удалить. Во-вторых, не забывайте о том, что rustfmt ещё не достиг версии 1.0. Некоторые детали пока в разработке, а баги в процессе исправления. Как только rustfmt достигнет версии 1.0, компонент rustfmt-preview будет объявлен устаревшим и заменён на rustfmt.
В ближайшее время мы планируем написать отдельный пост об этой стратегии выпусков. Для дополнительной информации смотрите страницу rustfmt на GitHub.
Пошаговая сборка
Ещё в сентябре 2016 года мы подробно писали об этом в нашем блоге. Идея пошаговой компиляции довольна проста: если поддерживается этот механизм, то пересобираться будет только тот код, который был изменён с момента предыдущей компиляции. Это намного быстрее, чем полностью собирать весь проект, даже если изменения исходного кода достаточно малы. Начиная с версии 1.24, пошаговая компиляция включена по умолчанию. Не забудьте о cargo check, если будете пытаться достигнуть минимально возможного времени сборки.
Важно отметить, что и работа над производительностью компилятора в целом, и над пошаговой сборкой в частности, будет продолжена. Кое-что доступно уже в этом выпуске 1.24.0 — значение codegen-units теперь 16 по умолчанию. Одно небольшое замечание об этом изменении: оно делает компиляцию быстрее, но исполняемый файл получается немного медленнее. Для максимальной скорости программы выставьте codegen-units в 1 в вашем Cargo.toml.
Другие изменения
Есть ещё одно изменение, о котором мы хотели бы поговорить: неопределённое поведение (undefined behavior). Как правило, Rust старается избегать неопределённого поведения, исключив его полностью из безопасного (safe) кода, и сведя к минимуму в небезопасном (unsafe) коде. Одним местом, где вы всё ещё могли получить неопределённое поведение, была ситуация, когда вызов panic! проходит через FFI.
extern "C" fn panic_in_ffi() {
panic!("Test");
}
Это не может работать, поскольку точный механизм работы паник должен быть согласован с тем, как работает "C" ABI в этом примере, или любой другой ABI в других случаях.
В Rust 1.24 исполнение такого кода будет прерываться, а не порождать неопределённое поведение. Смотрите примечания к выпуску для более подробной информации.
Стабилизация библиотек
Если вы любитель функции str::find, которая используется для нахождения char в &str, вы будете рады узнать, что она стала быстрее в 10 раз! Этого удалось достигнуть использованием memchr. [u8]::contains теперь также его использует, хотя прирост скорости оказался более умеренным.
Несколько новых API были стабилизированы в этом выпуске:
Следующие функции теперь могут быть использованы в постоянных выражениях (constant expressions), например при инициализации static:
newфункции дляCell,RefCellиUnsafeCellnewфункции для различных целочисленныхAtomicтипов{integer}::min_valueиmax_valuesize_ofиalign_ofдляmemptr::nullиnull_mut
Смотрите примечания к выпуску для более подробной информации.
>>> Подробности
