Состоялся (https://blog.rust-lang.org/2017/11/22/Rust-1.22.html) релиз языка программирования Rust 1.22 (http://www.rust-lang.org), развиваемого проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.
По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo (http://blog.rust-lang.org/2014/11/20/Cargo.html), позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек поддерживается репозиторий crates.io (https://crates.io/).
В подготовке нового выпуска приняли участие 160 разработчиков. Основные новшества (https://github.com/rust-lang/rust/blob/master/RELEASES.md#ve...):
- В разряд стабильных переведена возможность (https://github.com/rust-lang/rust/pull/42526) использования оператора
"?" вместе с конструкцией "Option‹тип›" по аналогии с ранее обеспеченной поддержкой "?" в блоках "Result‹тип, выражение›". Оператор "?" проверяет значение и если результат отличается от заданного, осуществляется выход с возвратом кода ошибки. Например:
fn try_option_none() -› Option‹u8› {
let val = None?;
Some(val)
}
assert_eq!(try_option_none(), None);
- Типы с операцией Drop теперь можно применять в элементах const и static, что позволяет использовать в них значения, вычисляемые на этапе компиляции. Например:
struct Foo {
a: u32
}
impl Drop for Foo {
fn drop(&mut self) {}
}
const F : Foo = Foo { a : 0 };
static S : Foo = Foo { a : 0 };
- Операции вида "T op= &T" теперь применимы ко встроенным числовым типам, например:
let mut x = 2;
let y = &8;
x += y; // Ранее нужно было явно выполнять разыменование, указывая x += *y.
- Увеличена скорость компиляции в отладочном режиме;
- В Rustdoc теперь можно добавлять тесты, обрывающие компиляцию ( compile-fail);
- Прекращена поддержка целевой платформы le32-unknown-nacl (https://github.com/rust-lang/rust/pull/45041) в связи с переводом PNaCl в разряд устаревших (теперь рекомендуется использовать WebAssembly);
- Стабилизированы API From‹Cow‹str›› в Box‹Error›, Hasher в {&mut Hasher, Box‹Hasher›}, fmt::Debug в SplitWhitespace;
- В пакетном менеджере Cargo появилась возможность определения (https://github.com/rust-lang/cargo/pull/4496) примеров, состоящих из нескольких файлов (для подобных примеров создаётся поддиректория с main.rs). Добавлена (https://github.com/rust-lang/cargo/pull/3992) поддержка взаимодействия с внешними Git-репозиториями вендоров.
URL: https://blog.rust-lang.org/2017/11/22/Rust-1.22.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=47620