28.09.2020

Выпуск языка программирования Rust 1.43


Опубликован релиз языка системного программирования Rust 1.43, основанного проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.

Автоматическое управление памятью в Rust избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo, позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек поддерживается репозиторий crates.io.

Основные новшества:

  • В макросах обеспечена возможность использования фрагментов элементов для их превращения в код типажей (trait), реализаций (impl) или внешних блоков. Например:
         macro_rules! mac_trait {         ($i:item) => {             trait T { $i }         }      }     mac_trait! {         fn foo() {}     }  

    Приведёт к генерации:

         trait T {         fn foo() {}     }  
  • Улучшено определение типа примитивов, ссылок и двоичных операций. Например, нижеследующий код, ранее вызывавший ошибку, теперь сможет быть скомпилирован (Rust теперь корректно определяет, что 0.0 и &0.0 должны быть типа f32):
         let n: f32 = 0.0 + &0.0;  
  • В Cargo добавлена новая переменная окружения CARGO_BIN_EXE_{имя}, выставляемая при построении интеграционных текстов и позволяющая определить полный путь до исполняемого файла, определённого в секции «[[bin]]» пакета.
  • В выражениях «if» разрешено использование атрибутов, таких как «#[cfg()]».
  • В библиотеке предоставлена возможность использования ассоциированных констант напрямую для целых и дробных типов, без импорта модуля. Например, можно сразу писать 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.

Источник: https://www.opennet.ru/opennews/art.shtml?num=52797

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