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

Опубліковано реліз мови системного програмування 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 варення: 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:: Інші).
  • У розряд стабільних переведено нову порцію API, у тому числі стабілізовано методи та реалізації типажів:
    • Bound::cloned
    • Drain::as_str
    • IntoInnerError::into_error
    • IntoInnerError::into_parts
    • MaybeUninit::assume_init_mut
    • MaybeUninit::assume_init_ref
    • MaybeUninit::write
    • array::map
    • ops::ControlFlow
    • x86::_bittest
    • x86::_bittestandcomplement
    • x86::_bittestandreset
    • x86::_bittestandset
    • x86_64::_bittest64
    • x86_64::_bittestandcomplement64
    • x86_64::_bittestandreset64
    • x86_64::_bittestandset64
  • Ознака «const», що визначає можливість використання в будь-якому контексті замість констант, застосована у методі str::from_utf8_unchecked.
  • Реалізовано третій рівень підтримки для платформи powerpc64le-unknown-freebsd. Третій рівень передбачає базову підтримку, але без автоматизованого тестування, публікації офіційних збірок та перевірки можливості складання коду.

Джерело: opennet.ru

Додати коментар або відгук