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

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

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

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

  • В пакетный менеджер Cargo интегрирована команда «cargo tree», выводящая древовидный граф зависимостей. Также добавлена опция »--duplicates» («cargo tree -d»), позволяющая оценить зависимости в разных версиях одного пакета.
         mdbook v0.3.2 (/Users/src/rust/mdbook)     ├── ammonia v3.0.0     │   ├── html5ever v0.24.0     │   │   ├── log v0.4.8     │   │   │   └── cfg-if v0.1.9     │   │   ├── mac v0.1.1     │   │   └── markup5ever v0.9.0     │   │       ├── log v0.4.8 (*)     │   │       ├── phf v0.7.24     │   │       │   └── phf_shared v0.7.24     │   │       │       ├── siphasher v0.2.3     │   │       │       └── unicase v1.4.2     │   │       │           [build-dependencies]     │   │       │           └── version_check v0.1.5     ...  
  • Для приложений, не привязанных к std (»#![no_std]»), реализована поддержка методов асинхронного программирования, основанных на функции «async», блоке async move { … } и операторе ».await», которые упрощают написание обработчиков, не блокирующих основной поток команд.
  • В парсер добавлена поддержка расширяемой схемы определения иерархии модулей. Например, следующая конструкция не приведёт к выводу ошибки, несмотря на фактическое отсутствие модуля «foo/bar/baz.rs» (семантически конструкция по-прежнему недопустима и может вызвать ошибку, но изменения можно увидеть и разобрать на уровне макросов и условной компиляции):
         #[cfg(FALSE)]     mod foo {         mod bar {             mod baz;         }     }  
  • В компиляторе rustc добавлена возможность использования флага »-C codegen-units» в инкрементальном режиме. Переработана реализация catch_unwind, которая теперь не оказывает влияния на производительность, если отключён процесс «размотки» (unwinding) и не возникает исключений.
  • Обеспечен третий уровень поддержи для платформ aarch64-unknown-none, aarch64-unknown-none-softfloat, arm64-apple-tvos и x86_64-apple-tvos. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования и публикации официальных сборок.
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы PathBuf: with_capacity, PathBuf: capacity, PathBuf: clear, PathBuf: reserve, PathBuf: reserve_exact, PathBuf: shrink_to_fit, {f32|f64}:: to_int_unchecked, Layout: align_to, Layout: pad_to_align, Layout: array и Layout: extend.
  • Расширены функции стандартной библиотеки:
    • Добавлен специальный вариант «vec![]», напрямую отражаемый в Vec: new (), что позволяет использовать «vec![]» в контексте вместо констант.
    • В convert: Infallible добавлена реализация (impl) типажа Hash.
    • В OsString реализованы умные указатели DerefMut и IndexMut, возвращающие »&mut OsStr».
    • Добавлена поддержка Unicode 13.
    • В String реализован From‹&mut str›.
    • В IoSlice реализован типаж Copy.
    • В Vec‹T› реализован From‹[T; N]›.
    • В proc_macro: LexError реализованы fmt: Display и Error.
  • Признак «const», определяющий возможность использования в любом контексте вместо констант, применён в методах from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes и to_ne_bytes для всех целочисленных типов.
  • Добавлена поддержка генерации статических библиотек в формате ».a» вместо ».lib» для GNU-платформ для Windows.
  • Минимальные требования к LLVM подняты до версии LLVM 8.



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

© OpenNet