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

Опубліковано реліз мови програмування загального призначення Rust 1.68, заснованого проектом Mozilla, але нині розвивається під заступництвом незалежної некомерційної організації Rust Foundation. Мова сфокусована на безпечній роботі з пам'яттю та надає засоби для досягнення високого паралелізму виконання завдань, при цьому обходячись без використання збирача сміття та runtime (runtime зводиться до базової ініціалізації та супроводу стандартної бібліотеки).

Методи роботи з пам'яттю в Rust позбавляють розробника помилок при маніпулюванні покажчиками і захищають від проблем, що виникають через низькорівневу роботу з пам'яттю, таких як звернення до області пам'яті після її звільнення, розіменування нульових покажчиків, вихід за межі буфера і т.п. Для поширення бібліотек, забезпечення збирання та управління залежностями проектом розвивається пакетний менеджер Cargo. Для розміщення бібліотеки підтримується репозиторій crates.io.

Безпечна робота з пам'яттю забезпечується в Rust під час компіляції через перевірку посилань, відстеження володіння об'єктами, облік часу життя об'єктів (області видимості) та оцінку коректності доступу до пам'яті під час виконання коду. Rust також надає засоби для захисту від цілих переповнень, вимагає обов'язкової ініціалізації значень змінних перед використанням, краще обробляє помилки в стандартній бібліотеці, застосовує концепцію незмінності посилань і змінних за умовчанням, пропонує сильну статичну типізацію для мінімізації логічних помилок.

Основні нововведення:

  • У пакетному менеджері Cargo та репозиторії crates.io стабілізовано підтримку протоколу Sparse, що визначає новий спосіб роботи з індексом, в якому відображено доступні версії всіх існуючих у репозиторії пакетів. Новий протокол дозволяє суттєво підвищити швидкість роботи з crates.io та вирішити проблеми з масштабуванням при подальшому зростанні числа пакетів у репозиторії.

    Для скорочення затримок, що виникають через завантаження повного індексу, в Sparse замість доступу до індексу з використанням Git задіяне пряме завантаження по HTTPS лише необхідних індексних даних, що охоплюють залежність конкретного проекту. Для віддачі індексних даних задіяно новий сервіс index.crates.io. За замовчуванням новий протокол планують задіяти у гілці Rust 1.70, а до цього для його включення можна встановити змінну оточення CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse або додати до секції [registries.crates-io] файлу .cargo/config.toml параметр 'protocol "sparse".

  • Доданий макрос «pin!», що дозволяє створити структуру Pin<&mut T> з виразу «T» з локальним закріпленням його стану (на відміну від Box::pin не виділяє пам'ять у купі, а виконує прив'язку на рівні стека).
  • Запропоновано обробник помилок розподілу пам'яті, що застосовується за замовчуванням, застосовуваний при використанні штатного пакета alloc. Програми в яких включається лише alloc (без std) при збоях виділення пам'яті відтепер викликатимуть обробник «panic!», який за бажання може бути перехоплений за допомогою «#[panic_handler]». Програми, що використовують бібліотеку std, як і раніше виводитимуть інформацію про помилку в stderr та аварійно завершуватимуть виконання.
  • У розряд стабільних переведено нову порцію API, у тому числі стабілізовано методи та реалізації типажів:
    • {core,std}::pin::pin!
    • impl From for {f32,f64}
    • std::path::MAIN_SEPARATOR_STR
    • impl DerefMut для PathBuf
  • Ознака «const», що визначає можливість використання в будь-якому контексті замість констант, застосована у функції VecDeque::new.
  • Для роботи на платформі Android тепер потрібно щонайменше NDK r25 (API 19), тобто. мінімальну підтримувану версію Android підвищено до 4.4 (KitKat).
  • Реалізовано третій рівень підтримки для платформи Sony PlayStation Vita (armv7-sony-vita-newlibeabihf). Третій рівень передбачає базову підтримку, але без автоматизованого тестування, публікації офіційних збірок та перевірки можливості складання коду.

Джерело: opennet.ru

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