Релиз языка программирования Rust 1.24

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

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

В подготовке нового выпуска приняли участие 152 разработчика. Основные новшества:

  • Реализована утилита rustfmt для автоматического формирования исходных текстов в соответствии с рекомендациями по оформлению кода на языке Rust. Для установки утилиты следует использовать команду «rustup component add rustfmt-preview»;
  • Включена по умолчанию инкрементальная компиляция, позволяющая пересобирать только изменившиеся части кода. Данный режим позволяет значительно сократить время сборки проекта при повторной компиляции после внесения мелких правок. Кроме того, в новом выпуске параметр codegen-units по умолчанию увеличен до 16, что позволило существенно ускорить процесс сборки за счёт распараллеливания операций, ценой незначительного снижения производительности результирующего исполняемого файла (для обеспечения максимальной производительности можно указать codegen-units=1);
  • Устранено неопределённое поведение обработчиков краха в контексте функций FFI (Foreign Function Interface), работа которых могла отличаться в зависимости от ABI. Например, до сих пор оставался непредсказуемым код на базе «C» ABI:
       extern "C" fn panic_in_ffi() {
           panic!("Test");
       }
    

    В Rust 1.24 такой код теперь всегда приводит к прерыванию выполнения, вместо неопределённого поведения;

  • До 10 раз ускорено выполнение операции поиска символов внутри строки при помощи функции str::find, которая переписана с использованием memchr. На memchr также переведена реализация [u8]::contains, но ускорение её работы не столь внушительно (ускорение примерно в 3 раза). С использованием ассемблерных инструкций проведена оптимизация f32::min и f32::max;
  • В разряд стабильных переведена новая порция API, в том числе RefCell::replace, RefCell::swap и std::sync::atomic::spin_loop_hint;
  • Обеспечена возможность использования внутри неизменных выражений (constant, static) функций Cell, RefCell, UnsafeCell, {integer}::min_value, max_value, mem’s size_of, align_of, ptr::null, null_mut, а также функции работы с различными целыми типами Atomic (AtomicBool::new, AtomicPtr::new, AtomicIsize::new и т.п.). Например, теперь можно указать «static COUNTER: AtomicUsize = AtomicUsize::new(1);»
  • Добавлена поддержка новых целевых платформ armv4t-unknown-linux-gnueabi и aarch64-unknown-openbsd.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.