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

9 сентября 2021 года

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

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

Основные новшества:

  • В пакетном менеджере Cargo реализована возможность объединения дубликатов ошибок и предупреждений, возникающих во время сборки. При выполнении таких команд как "cargo test" и "cargo check --all-targets", приводящих к многократной сборке пакета с разными параметрами, пользователю теперь показывается сводная информация о возникновении повторяющейся проблемы, вместо отображения нескольких одинаковых предупреждений при повторной сборке одного и того же файла.

$ cargo +1.55.0 check --all-targets
Checking foo v0.1.0
warning: function is never used: 'foo'
--> src/lib.rs:9:4
|
9 | fn foo() {}
| ^^^
|
= note: '#[warn(dead_code)]' on by default

warning: 'foo' (lib) generated 1 warning
warning: 'foo' (lib test) generated 1 warning (1 duplicate)
Finished dev [unoptimized + debuginfo] target(s) in 0.84s

  • Код для разбора чисел с плавающей запятой в стандартной библиотеке переведён на использование более быстрого и точного алгоритма Эйзеля-Лемира, применение которого решило некоторые ранее наблюдаемые проблемы с округлением и разбором чисел с очень большим числом цифр.
  • Стабилизирована возможность указания незакрытых диапазонов в шаблонах ("X.." интерпретируется как диапазон, который начинается со значения X и заканчивается максимальным значением целого типа):

match x as u32 {
0 = println!("zero!"),
1.. = println!("positive number!"),
}

  • Расширены варианты ошибок, охватываемые списком std::io::ErrorKind (классифицирует ошибки по категориям, таким как NotFound и WouldBlock). Раньше, ошибки не подпадающие под имеющиеся категории, попадали в категорию ErrorKind::Other, которая также применялась для ошибок в стороннем коде. Теперь для не подпадающих под имеющиеся категории ошибок создана отдельная внутренняя категория ErrorKind::Uncategorized, а категория ErrorKind::Other ограничена только ошибками, возникающими не в стандартной библиотеке (функции стандартной библиотеки, возвращающие

io::Error, больше не используют категорию ErrorKind::Other).

Источники править


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

Комментарии

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