Релиз языка программирования 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