Выпуск Rust 1.33

в 10:37, , рубрики: DMCA, open source, Rust, выпуск, Компиляторы, Программирование, релиз, системное программирование

Команда разработчиков Rust рада сообщить о выпуске новой версии Rust, 1.33.0. Rust — это язык программирования, который дает возможность каждому создавать надежное и эффективное программное обеспечение.

Если у вас установлена предыдущая версия Rust с помощью rustup, то для обновления Rust до версии 1.33.0 вам достаточно выполнить:

$ rustup update stable

Если у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.33.0 можно ознакомиться на GitHub.

Что вошло в стабильную версию 1.33.0

Основные улучшения этого выпуска: значительное расширение возможностей const fn и стабилизация нового Pin API.

Расширение возможностей const fn

const fn теперь умеет гораздо больше, а именно:

  • безусловное (irrefutable) сопоставление с образцом (например, const fn foo((x, y): (u8, u8)) { ... })
  • let привязки (например, let x = 1;)
  • изменяемые let привязки (например, let mut x = 1;)
  • выражения присваивания (например x = y) и операторов присваивания (например, x += y), включая присваивание проекциям (например, полю структуры или результату оператора индексирования — x[3] = 42)
  • инструкции выражений (expression statements) (например, 3;)

Еще теперь можно вызывать "const unsafe fn" из "const fn", например:

const unsafe fn foo() -> i32 { 5 }
const fn bar() -> i32 {
    unsafe { foo() }
}

Благодаря этим улучшениям стало возможным объявить константными большое количество функций стандартной библиотеки. Они перечислены ниже в библиотечной секции.

Pin API

Данный выпуск привносит в язык новый механизм, представленный типом std::pin::Pin и маркерным типажом Unpin. Основная идея подробно описана в документации "std::pin" модуля:

Иногда может быть полезно запретить перемещение объекта, т.е. гарантировать неизменность его адреса в памяти. Основным сценарием использования такой возможности являются самоссылающиеся структуры, поскольку перемещение таких объектов приведет к инвалидации указателей, что может привести к неопределенному поведению (UB).

Pin<P> гарантирует, что объект, на который ссылается любой указатель типа P, имеет неизменное расположение в памяти, т.е. он не может быть перемещен и его память не может быть освобождена. Такие значения называются "закрепленными" ("pinned").

Ожидается, что этот механизм будет использоваться в основном авторами библиотек, поэтому мы сейчас не станем погружаться глубже в детали (с которыми можно ознакомиться в документации по ссылке выше). Однако, стабилизация этого API является важным событием для всех пользователей Rust, потому что является ключевым этапом на пути к очень ожидаемому async/await. За статусом оставшейся работы в этом направлении можно следить на areweasyncyet.rs.

Импортирование как "_"

Теперь можно импортировать сущности как "_". Это позволяет импортировать реализации типажа без занесения его имени в текущее пространство имен, например:

use std::io::Read as _;

// Тут не возникнет конфликта имен:
pub trait Read {}

Подробности смотрите в примечаниях к выпуску.

Стабилизация стандартной библиотеки

Вот список всего, что стало константным:

Кроме того, стабилизированы следующие API:

Подробности смотрите в примечаниях к выпуску.

Улучшения в Cargo

Теперь cargo пересобирает крейт, если какой-то из его файлов был изменен во время изначальной сборки.

Подробности смотрите в примечаниях к выпуску.

Crates.io

Как было объявлено ранее, начиная с этого выпуска crates.io будет требовать подтверждения почтового адреса для публикации крейтов. Начиная с 2019-03-01 00:00 UTC выполнение cargo publish будет завершаться с ошибкой для учетных записей без подтвержденной почты.

Это необходимо для соответствия требованиям DMCA. Если вы не заметили предупреждений об этом, которые cargo писал в последних выпусках, зайдите в crates.io/me для указания и подтверждения вашей почты. Данный почтовый адрес никогда не будет опубликован и будет использован исключительно для непосредственного функционала crates.io.

Разработчики 1.33.0

Множество людей совместно создавало Rust 1.33. Мы не смогли бы завершить работу без участия каждого из вас. Спасибо!

Автор: ozkriff

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js