Домой Интернет Вышел Rust 1.30

Вышел Rust 1.30

38

В блоге разработчиков мультипарадигмального языка программирования Rust опубликована информация о выходе Rust 1.30. Создатели улучшили модульную систему, расширили возможность применения макросов и внесли ещё несколько правок.

Работа с модулями в Rust 1.30

Создатели языка обратили внимание на то, что правила работы с модулями в Rust неинтуитивны и затрудняют освоение языка. В версии 1.30 они постарались сделать эту систему более понятной, внеся некоторые изменения в use.

Внешние контейнеры теперь загружаются первыми:

// old let json = ::serde_json::from_str("..."); // new let json = serde_json::from_str("..."); 

Благодаря этому исправлению при обработке кода внешние контейнеры будут использоваться независимо от иерархии модулей.

Кроме того, useвыводит в область видимости объекты с помощью ключевого слова crate:

mod foo { pub fn bar() { // ... } } // old use ::foo::bar; // or use foo::bar; // new use crate::foo::bar; 

Использование макросов

В Rust 1.30 разработчики реализовали опцию создания двух новых типов процедурных макросов. Attribute-like макрос даёт пользователю возможность определять собственные атрибуты. Он также обладает большей гибкостью в действии, чем пользовательское извлечение, так как его можно использовать в функциях. В качестве примера разработчики приводят код, который будет применён во фреймворке веб-приложения:

#[route(GET, "/")] fn index() { 

При этом атрибут #[route] определяется самим фреймворком и может выглядеть следующим образом:

#[proc_macro_attribute] pub fn route(attr: TokenStream, item: TokenStream) -> TokenStream { 

Function-like макрос работает как вызов функции. Пример определения макроса-функции, обрабатывающей SQL-запрос в Rust 1.30, может выглядеть так:

#[proc_macro] pub fn sql(input: TokenStream) -> TokenStream {

В таком случае в коде программы макрос sql! используется следующим образом:

let sql = sql!(SELECT * FROM posts WHERE id=1);

Разработчики добавили возможность выводить макросы в поле видимости с помощью use. Эта мера помогла упорядочить код и исключить аннотацию macro_use.

Контейнер proc_macro теперь работает стабильно, что позволит использовать API для написания макросов.

Поскольку по мере развития языка постепенно менялся набор ключевых слов, в Rust 1.30 было принято решение сделать доступным использование таких слов в качестве идентификаторов с помощью префикса #r.

// define a local variable named for let r#for = true; // define a function named for fn r#for() { // ... } // call that function r#for()

Создатели Rust задумались о пользователях, которые работают с RTL-письменностью, поэтому в именах некоторых функций слово «left» заменили на «start», а «right» на «end».

В макросы добавили управление видимостью ключевых слов, таких как pub, употребляя спецификатор vis. Для сборки приложения без использования стандартной библиотеки в режиме no_std добавлен атрибут #[panic_handler]. Он позволяет определять функции для обработки сбоев (panic) в Rust runtime.

Предыдущие крупные изменения языка произошли в версии 1.28, вышедшей в начале августа 2018 года. Тогда разработчики добавили возможность настройки глобальных аллокаторов памяти. Опубликованная в середине сентября версия 1.29 получила инструмент статистического анализа cargo clippy и функцию автоматического исправления некоторых синтаксических ошибок cargo fix . Rust регулярно обновляется, и уже на 29 октября 2018 года запланирован релиз беты 1.31 (Rust 2018).

Ещё интересное для вас:
— Как расширить функциональность ПО на продакшене, ничего не сломав.
Сложный тест по C# — проверьте свои знания.
Level Up — всё для прокачки программиста.

Комментарии

Пожалуйста, авторизуйтесь чтобы добавить комментарий.
  Подписаться  
Уведомление о

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: