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

5 июня 2020 года

Опубликован релиз языка системного программирования 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.

Источники

править
 
 
Creative Commons
Эта статья содержит материалы из статьи «Выпуск языка программирования Rust 1.44», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.