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
иUnsafeCell
new
функции для различных целочисленныхAtomic
типов{integer}::min_value
иmax_value
size_of
иalign_of
дляmem
ptr::null
иnull_mut
Смотрите примечания к выпуску для более подробной информации.
>>> Подробности