Candellmans
Мастер
- Сообщения
- 7,983
- Реакции
- 8,505
Выпуск языка программирования Rust 1.44
5.06.20
Опубликован релиз языка системного программирования Rust 1.44, основанного проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.
Автоматическое управление памятью в Rust избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo, позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек поддерживается репозиторий crates.io.
В тексте анонса нового выпуска разработчики Rust ввязались в политику и демонстративно отказались публиковать полноценный обзор изменений в Rust 1.44 в знак солидарности с протестующими против полицейского насилия, указав, что этот вопрос важнее обмена техническими знаниями. Основные новшества:
OpenNet
5.06.20
Опубликован релиз языка системного программирования 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:ad_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:isplay и 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.
OpenNet