Релиз языка программирования Rust 1.25
Доступен релиз языка программирования Rust 1.25, развиваемого проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.
По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo, позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек поддерживается репозиторий crates.io.
В подготовке нового выпуска приняли участие 139 разработчиков. Основные новшества:
- Компилятор переведён с кодовой базы LLVM 4 на LLVM 6. В компилятор также добавлена опция »-C lto=val» для выбора типа LTO-оптимизации и целевая платформа «i586-unknown-linux-musl»;
- Предложен новый способ использования выражения «use» для оформления вложенных групп импортирования:
use std::{fs::File, io::Read, path::{Path, PathBuf}}; вместо use std::fs::File; use std::io::Read; use std::path::{Path, PathBuf};
- Добавлена возможность использования символа »|» для отделения сопоставлений в блоке match:
enum Foo { A, B, C } fn main() { let x = Foo::A; match x { | Foo::A | Foo::B => println!("AB"), | Foo::C => println!("C"), } }
- Принят и стабилизирован RFC 1358, определяющий атрибут »#[repr (align (x))]», при помощи которого можно указать способ выравнивания данных для структур;
- В разряд стабильных переведена новая порция API, в том числе std: ptr: NonNull‹T› и Location: column;
- В libcore добавлен модуль time, содержащий тип Duration, который раньше присутствовал только в libstd. Функции from_secs и from_millis теперь определены как «const», т.е. могут использоваться для создания констант:
static MINUTE: Duration = Duration::from_secs(60);
- Объявлен устаревшим метод net: lookup_host;
- Документация по умолчанию переведена на использование разметки CommonMark (спецификация для формата Markdown) вместо Hoedown;
- На сайте doc.rust-lang.org предложено новое руководство «Rust By Example»;
- В пакетном менеджере Cargo команда «new now» теперь по умолчанию создаёт исполняемые контейнеры (crate) в виде бинарного исполняемого файла (флаг »--bin»), а не библиотеки (для библиотеки теперь нужно явно указывать флаг »--lib»). Команда «new now» также теперь не удаляет префикс «rust-» и суффикс »-rs» из имени пакета;
- Существенно ускорена работа «cargo doc» и операции получения кода зависимостей из Git.
© OpenNet