Команда 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
Смотрите примечания к выпуску для более подробной информации.
>>> Подробности