+38/050/370-3627
+38/093/220-0872
+38/044/257-2444
Новини

Реліз мови системного програмування Rust 1.30

Реліз мови системного програмування Rust 1.30

Відбувся реліз мови системного програмування Rust 1.30, що розвивається проектом Mozilla. Мова сфокусована на безпечній роботі з пам'яттю, забезпечує автоматичне керування пам'яттю та надає засоби для досягнення високого паралелізму виконання завдань, при цьому обходячись без використання збирача сміття та runtime.

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

У підготовці нового випуску взяли участь 178 розробників. Основні нововведення:

  • Додано підтримку двох нових видів процедурних макросів: макроси схожі на атрибути та макроси схожі на функції. Атрибутоподібні макроси нагадують раніше доступні довільні макроси на базі механізму "derive", але крім генерації коду тільки для атрибуту "#[derive]" дозволяють створювати власні довільні атрибути, а також не обмежені роботою тільки зі структурами та перерахуваннями (enums). Макроси схожі на функції дозволяють визначити макрос у формі виклику функції (наприклад, "let sql = sql!(SELECT * FROM posts WHERE id=1);").
  • Додано можливість винесення макросу в поточну область видимості (scope) за аналогією функціями за допомогою ключового слова "use", без використання спеціальної інструкції "#[macro_use]";
  • Стабілізований пакет (crate) proc_macro, що надає API для спрощення створення макросів. У proc_macro також значно розширено API для обробки помилок, який вже задіяний у пакетах подібних до syn і quote;
  • Почалася робота зі спрощення системи створення модулів. Додана можливість використання ключового слова "crate" в дорозі для відсилання до кореня ієрархії модулів, наприклад, "crate::foo" посилається на модуль "foo", розміщений в "src/lib.rs". При використанні зовнішніх пакетів відтепер не потрібно вказувати префікс "::", наприклад, замість "json = ::serde_json::from_str(foo);" тепер можна написати "let json = serde_json::from_str(foo);". Логіка розбору шляху "a::b::c" виглядає так: якщо "a" є ім'ям пакета, то в цьому пакеті здійснюється пошук "b::c"; якщо в "a" вказано ключове слово "crate", то пошук "b::c" здійснюється щодо кореня ієрархії модулів; інакше "a::b::c" вилучається з поточної позиції в ієрархії модулів;
  • Додано можливість використання ключових слів як ідентифікаторів. Наприклад, створення локальної змінної з ім'ям "for" можна вказати "let r#for = true;", а створення функції з ім'ям "for" - "fn r#for() { " . При виклику такої функції слід використовувати ознаку raw-ідентифікатора - "r#for();";
  • Додано атрибут "#[panic_handler]", що надає можливість визначення функції обробки збоїв (panic) в Rust runtime. Подібне може бути корисним для складання програми без стандартної бібліотеки, використовуючи режим no_std;
  • Реалізовано можливість визначення макросів видимості ключових слів, таких як "pub", використовуючи специфікатор "vis";
  • Стабілізовано атрибути для інструментів Rust, таких як rustfmt та clippy. Наприклад, "#[rustfmt::skip]" може застосовуватися для відключення форматування наступного елемента;
  • У розряд стабільних переведено нову порцію API, у тому числі Ipv4Addr::{BROADCAST, LOCALHOST, UNSPECIFIED}, Ipv6Addr::{BROADCAST, LOCALHOST, UNSPECIFIED}, Iterator::find_map;
  • Через неправильне трактування у функціях "trim_*" понять "ліво" і "право" для RTL-мов, дані функції перейменовані: trim_left на trim_start, trim_right на trim_end, trim_left_matches на trim_start_matches, trim_right >
  • У пакетний менеджер Cargo додано індикатор прогресу виконання операцій.

Інші новини

Найкраща ціна