- PVSM.RU - https://www.pvsm.ru -
Мы рады представить новую версию Rust 1.10. Rust — это системный язык программирования, нацеленный на безопасную работу с памятью, скорость и параллельное выполнение кода.
Как обычно, вы можете установить Rust 1.10 [1] с соответствующей страницы официального сайта, а также ознакомиться с подробным списком изменений [2] в этой версии на GitHub. В этот релиз вошло 1276 патчей.
В Rust 1.10 стала доступна одна из наиболее желаемых сообществом возможностей: прерывание работы (abort) при панике вместо размотки стека. Это поведение управляется флагом -C panic=abort
[3] или настройкой в Cargo.toml
[4]. Зачем это нужно? Как вы помните, паника означает непридвиденную проблему [5], и для многих приложений abort — разумный выбор. При использовании panic=abort
генерируется меньше кода, что означает меньшие по объёму исполняемые файлы и чуть меньшее время компиляции. Очень приблизительная оценка говорит об уменьшении на 10% и размера файла, и времени компиляции. Эта возможность была определена в RFC 1513 [6].
Вторая большая возможность в 1.10 — новый тип контейнера — cdylib
[7]. Существующий формат динамических библиотек dylib
отныне используется только для динамических библиотек, используемых в проектах на Rust, а cdylib
будет использоваться при компиляции кода на Rust для встраивания в другие языки. В выпуске 1.10 cdylib
поддерживается компилятором, но пока не поддерживается Cargo. Этот формат был определён в RFC 1510 [8].
Также в ряде случаев была улучшена производительность компилятора [9], использовать документацию и сам rustdoc
стало удобнее [10], а сообщения об ошибках стали читабельнее.
Наконец, произошло большое изменение в процессе разработки Rust. Оно не влияет на пользователей непосредственно, но сильно поможет тем, кто занимается распространением Rust. Компилятор Rust написан на Rust, что означает использование Rust для сборки Rust. Этот процесс называется "бутстрепинг" (англ. "bootstrapping"). Исторически, мы делали это с помощью снэпшотов компилятора определённой версии, из которых всегда и бутстрапились; при этом снэпшот периодически обновлялся, при необходимости. Более того, т.к. компилятор Rust использует нестабильные возможности Rust, чтобы собрать компилятор, нужна была конкретная версия nightly. Это хорошо работало годами, но мы переросли
такой процесс. Его главный недостаток состоит в том, что он требует загрузки снэпшота в бинарном виде, что плохо подходит для дистрибутивов Linux. В частности, мейнтейнеры дистрибутивов хотели бы собирать последние версии Rust, используя только версии, доступные в предыдущих версиях пакетов, а не недоверенные бинарники. По сути, мы изменили нашу систему сборки так, что Rust 1.10 собирается компилятором Rust 1.9. В будущем, этот способ будет использоваться дальше — Rust 1.11 будет собран с помощью Rust 1.10. Более того, теперь компилятор можно собрать стабильным компилятором. Это упрощает весь процесс бутстрепинга, и значительно помогает мейнтейнерам дистрибутивов, т.к. им больше не нужно два отдельных пакета. Подробнее можно прочитать в комментариях к pull request [11].
Подробнее о изменениях в языке в целом можно прочитать в замечаниях к выпуску [2].
Было стабилизировано примерно 70 интерфейсов:
std::os::windows::fs::OpenOptionsExt
[12].std::panic::{set,take}_hook
.CStr::from_bytes_with_nul
, чтобы создавать CStr
из среза байт [14] (и непроверяемый (unchecked) вариант [15]).std::fs::Metadata
[16].compare_exchange
для различных атомарных типов [17].std::os::unix::net::{UnixStream, UnixListener, UnixDatagram, SocketAddr}
.В дополнение, для &CStr
, CString
, UnsafeCell
, fmt::Error
, Condvar
, Mutex
, и RwLock
теперь реализован Default
.
Наконец, на Linux, если HashMap не может быть инициализирован с помощью getrandom
, он временно откатится на использование /dev/urandom
[19], чтобы не блокироваться рано в процессе загрузки.
Подробнее смотрите замечания к выпуску [2].
В этом выпуске Cargo получил несколько небольших улучшений.
profile.*.panic
[4] управляет тем, как должна выполняться паника.cargo install
появился флаг --force
[22].cargo test
теперь принимает флаг --doc
[23], с которым выполняются только тесты в документации.cargo --explain
[24], который отражает флаг rustc --explain
.Подробнее смотрите замечания к выпуску [2].
В выпуске версии 1.10 участвовало 139 человек. Большое вам спасибо!
Автор: mkpankov
Источник [25]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/155133
Ссылки в тексте:
[1] установить Rust 1.10: https://www.rust-lang.org/install.html
[2] подробным списком изменений: https://github.com/rust-lang/rust/blob/master/RELEASES.md#version-1100-2016-07-07
[3] флагом -C panic=abort
: https://github.com/rust-lang/rust/pull/32900
[4] настройкой в Cargo.toml
: https://github.com/rust-lang/cargo/pull/2687
[5] непридвиденную проблему: http://blog.rust-lang.org/2016/05/26/Rust-1.9.html
[6] RFC 1513: https://github.com/rust-lang/rfcs/blob/master/text/1513-less-unwinding.md
[7] cdylib
: https://github.com/rust-lang/rust/pull/33553
[8] RFC 1510: https://github.com/rust-lang/rfcs/blob/master/text/1510-rdylib.md
[9] производительность компилятора: https://github.com/rust-lang/rust/blob/master/RELEASES.md#performance
[10] удобнее: https://github.com/rust-lang/rust/blob/master/RELEASES.md#usability
[11] pull request: https://github.com/rust-lang/rust/pull/32942
[12] Специфичные для Windows файловые операции std::os::windows::fs::OpenOptionsExt
: https://github.com/rust-lang/rfcs/pull/1252
[13] зарегистрировать и разрегистрировать хуки на панику: https://github.com/rust-lang/rfcs/pull/1328
[14] CStr::from_bytes_with_nul
, чтобы создавать CStr
из среза байт: http://doc.rust-lang.org/std/ffi/struct.CStr.html#method.from_bytes_with_nul
[15] и непроверяемый (unchecked) вариант: http://doc.rust-lang.org/std/ffi/struct.CStr.html#method.from_bytes_with_nul_unchecked
[16] улучшения в std::fs::Metadata
: http://doc.rust-lang.org/std/fs/struct.Metadata.html
[17] compare_exchange
для различных атомарных типов: https://github.com/rust-lang/rfcs/pull/1443
[18] специфичных для UNIX сетевых возможностей: https://github.com/rust-lang/rfcs/pull/1479
[19] временно откатится на использование /dev/urandom
: https://github.com/rust-lang/rust/pull/33086
[20] сообщает статус: https://github.com/rust-lang/cargo/pull/2693
[21] нельзя использовать: https://github.com/rust-lang/cargo/pull/2707
[22] флаг --force
: https://github.com/rust-lang/cargo/pull/2405
[23] флаг --doc
: https://github.com/rust-lang/cargo/pull/2578
[24] Добавлен cargo --explain
: https://github.com/rust-lang/cargo/pull/2551
[25] Источник: https://habrahabr.ru/post/305486/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.