Команда Rust рада сообщить о новой версии Rust: 1.24.0. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода.
Если у вас установлена предыдущая версия Rust, для обновления достаточно выполнить:
$ rustup update stable
Если же у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.24.0 можно ознакомиться на GitHub.
Что вошло в стабильную версию 1.24.0
Этот релиз содержит две очень интересные новые фичи: rustfmt
и инкрементальную компиляцию!
rustfmt
В течении многих лет нам нужен был инструмент, который мог бы автоматически форматировать Rust
код в какой-то "стандартный" стиль. В этом выпуске мы рады анонсировать превью rustfmt
, которая может быть использована со стабильной версией 1.24. Чтобы попробовать, выполните следующие команды:
$ rustup component add rustfmt-preview
Здесь есть два важных момента: во-первых, вы используете 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. Например так:
extern "C" fn panic_in_ffi() {
panic!("Test");
}
Это не может работать, поскольку точный механизм работы паники должен быть согласован с тем, как работает C
ABI, в этом примере, или любой другой ABI в других примерах.
В Rust 1.24 этот код теперь прерывается, а не создает неопределенное поведение.
Стабилизация библиотек
Если вы фанат функции str::find
, которая используется, чтобы найти необходимый char
в &str
вы должны быть рады видеть этот пул реквест: теперь она в 10 раз быстрее! Это благодаря memchr
. [u8]::contains
её так же использует, но не получает настолько экстремального ускорения.
Так же в этом релизе были стабилизированы несколько новых API:
Теперь следующие функции могут быть использованы в константных выражениях, например, чтобы инициализировать static
:
- new функции для
Cell
,RefCell
, иUnsafeCell
- new функции для различных числовых атомик типов (примечание: AtomicBool, AtomicIsize, AtomicUsize)
- {integer}::min_value и {integer}::max_value
- mem::size_of и mem::align_of
- ptr::null и ptr::null_mut
Разработчики 1.24
Множество людей участвовало в разработке Rust 1.24. Мы не смогли бы этого добиться без участия каждого из вас. Спасибо!
Комментарии (4)
fafhrd91
16.02.2018 17:09+1Как раз framework benchmark подоспел. В plaintext, tokio-minihttp на первом месте, hyper на 6 и actix на 7
https://www.techempower.com/benchmarks/#section=data-r15&hw=ph&test=plaintext
LooMaclin Автор
16.02.2018 17:29+1Рад за ваши успехи. А вы у себя в продакшене используете его (actix имею ввиду)? Если будет время подумайте над тем, чтобы написать статью про него. Будет интересно.
fafhrd91
16.02.2018 19:51+1К сожалению, пока нет. Сложно в большой компании продавить новый язык. Есть один проект в разработке, возможно он пойдёт в продакшен на actix’е
mkpankov
А почему "Игрушечный релиз?"-то?