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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.