Хорошие новости: вышел Rust 1.47

Хорошие новости: вышел Rust 1.47


Без особого шума опубликован следующий релиз языка для системного программирования — Rust 1.47. Его разрабатывает Mozilla. 

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

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

Распространение библиотек, обеспечение сборки и управление зависимостями осуществляется при помощи пакетного менеджера Cargo, который активно развивается.


Что нового в Rust

Добавлена поддержка типажей для массивов правильного размера. До выхода новой версии стандартная библиотека предоставляла встроенную поддержку типажей лишь для массивов, размер которых не превышал 32 элемента. Причина — невозможность определить generic-функции для всех целых значений. Благодаря функциональности константных дженериков (const generics) теперь можно определять generic-функций для любых размеров массива. Правда, они пока еще не включены в состав стабильных возможностей языка. Зато уже есть в компиляторе и задействованы в стандартной библиотеке для типажей массивов любого размера.

Хороший пример — реализация конструкции вида:

Раньше, вместо вывода массива, эта конструкция привела бы к ошибке.

Разработчики обеспечили вывод более коротких трассировок (backtrace), которые выводятся при нештатных ситуациях. Из трассировки были исключены элементы, которые не представляют интереса в большинстве ситуаций и отвлекают от реальных проблем. Сейчас для возвращения полной трассировки можно задействовать переменную окружения RUST_BACKTRACE=full.

И если раньше для кода

трассировка выводилась в 23 этапа, то сейчас этапов всего три, причем они сразу позволяют уловить суть:

Компилятор rustc обновили до сборки с использованием LLVM 11 (Rust использует LLVM в качестве бэкенда для генерации кода). Разработчики сохранили возможность сборки со старыми LLVM, вплоть до 8-й версии. Но по умолчанию используется LLVM 11, релиз которого появится в ближайшее время.

Для Windows в компиляторе rustc появилась поддержка включения проверок целостности потока выполнения (Control Flow Guard). Активируется проверка флагом -C control-flow-guard.

В разряд стабильных перевели несколько API, включая:

  • Ident::new_raw, 
  • Range::is_empty, 
  • RangeInclusive::is_empty, 
  • Result::as_deref, 
  • Result::as_deref_mut, 
  • Vec::leak, 
  • pointer::offset_from, 
  • f32::TAU,
  • f64::TAU.

Что касается признака const, который определяет возможность использования в любом контексте вместо констант, то он применен в методах:

  • new для всех целых, отличных от нуля;

checked_add, checked_sub, checked_mul,checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub и saturating_mul для всех целых;

  • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace и is_ascii_control для типов char и u8.

Наконец, для FreeBSD задействован инструментарий из FreeBSD 11.4, поскольку FreeBSD 10 не поддерживает LLVM 11.

Дополнительная информация о новом релизе доступна здесь


Report Page