Выпуск Rust 1.43.0: улучшение производительности компилятора и вывода типов для примитивов, item в макросах

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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


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


rustup update stable

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


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


Значительных изменений и нововведений этот релиз не содержит. Мы стабилизировали несколько новых API, улучшили производительность компилятора и добавили некоторые изменения в систему макросов. Для более подробной информации смотрите подробные примечания к выпуску.


Фрагменты item


Теперь вы можете использовать фрагменты item, встраивая их в тело типажей, реализаций или внешних блоков. Например:


macro_rules! mac_trait {
    ($i:item) => {
        trait T { $i }
    }
}
mac_trait! {
    fn foo() {}
}

Этот вызов сгенерирует следующий код:


trait T {
    fn foo() {}
}

Вывод типов для примитивов


Был улучшен вывод типов для примитивов, ссылок и бинарных операций. Например, следующий код не компилируется в Rust 1.42, но соберётся в Rust 1.43.


let n: f32 = 0.0 + &0.0;

Rust 1.42 выдаёт ошибку "casting &f64 as f32 is invalid — cannot cast &f64 as f32". Начиная с этого выпуска алгоритм правильно выводит тип операндов — f32.


Новая переменная окружения Cargo для тестов


Чтобы помочь в проведении интеграционного тестирования, Cargo теперь устанавливает новую переменную окружения.


Это легче всего объяснить на примере: допустим, мы работаем над консольным проектом, назовём его "cli". В интеграционных тестах мы хотим запустить cli и посмотреть на результат её работы. Во время выполнения тестов и бенчмарков Cargo устанавливает переменную окружения с именем CARGO_BIN_EXE_cli, и мы можем использовать её в нашем тесте:


let exe = env!("CARGO_BIN_EXE_cli");

cli становится легче вызвать, ведь теперь у нас в распоряжении его полный путь.


Изменения в библиотеке


Мы можем напрямую использовать константы, ассоциированные с целыми числами и числами с плавающей точкой, вместо того, чтобы импортировать модуль. Теперь мы можем писать u32::MAX или f32::NAN без use std::u32; и use std::f32;.


Также добавлен новый модуль primitive, реэкспортирующий примитивные типы Rust. Он может пригодиться в написании макросов, чтобы быть уверенным, что типы не будут затенены.


Ещё мы стабилизировали шесть новых API:


  • Once::is_completed
  • f32::LOG10_2
  • f32::LOG2_10
  • f64::LOG10_2
  • f64::LOG2_10
  • iter::once_with

Другие изменения


Синтаксис, пакетный менеджер Cargo и анализатор Clippy также претерпели некоторые изменения.


Участники 1.43.0


Множество людей собрались вместе, чтобы создать Rust 1.43.0. Мы не смогли бы сделать это без всех вас, спасибо!


От переводчиков


С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов.


Данную статью совместными усилиями перевели andreevlex, funkill, Hirrolot, l4l, H. K. и blandger.

Источник: https://habr.com/ru/post/498998/


Интересные статьи

Интересные статьи

Лекции по курсу «Управление Техническими Системами» читает Козлов Олег Степанович на кафедре «Ядерные реакторы и энергетические установки» факультета «Энергомашиностроения» МГТУ им. Н.Э. ...
Команда Rust рада сообщить о выпуске новой версии, 1.49.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение. Если вы установ...
Данная статья направлена, прежде всего, на начинающего специалиста, который только приступил к исследованию методов и способов обеспечения информационной безопасности исполняемого п...
В современных x86 процессорах Intel, конвеер можно разделить на 2 части: Front End и Back End. Front End отвечает за загрузку кода из памяти и его декодирование в микрооперации. Back End о...
Вывод типов в jscodeshift и TypeScript Начиная с версии 6.0 jscodeshift поддерживает работу с TypeScript (далее TS). В процессе написания codemode-ов (преобразований), может потребоваться узнать...