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

Опубліковано реліз мови системного програмування Іржа 1.43, Заснованого проектом Mozilla. Мова сфокусована на безпечній роботі з пам'яттю, забезпечує автоматичне керування пам'яттю та надає засоби для досягнення високого паралелізму виконання завдань, при цьому обходячись без використання збирача сміття та час виконання.

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

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

  • У макросах забезпечена можливість використання фрагментів елементів для їх перетворення на код типажів (trait), реалізацій (impl) чи зовнішніх блоків. Наприклад:

    macro_rules! mac_trait {
    ($i:item) => {
    trait T {$i}
    }
    }
    mac_trait! {
    fn foo() {}
    }

    Приведе до генерації:

    trait T {
    fn foo() {}
    }

  • Поліпшено визначення типу примітивів, посилань та двійкових операцій.
    Наприклад, нижченаведений код, який раніше викликав помилку, тепер зможе бути скомпільований (Rust тепер коректно визначає, що 0.0 і &0.0 повинні бути типу f32):

    let n: f32 = 0.0 + 0.0;

  • У Cargo додано нову змінну оточення CARGO_BIN_EXE_{ім'я}, що виставляється при побудові інтеграційних тестів і дозволяє визначити повний шлях до виконуваного файлу, визначеного в секції «[[bin]]» пакета.
  • У виразах "if" дозволено використання атрибутів, таких як "#[cfg()]".
  • У бібліотеці надано можливість використання асоційованих констант безпосередньо для цілих та дробових типів, без імпорту модуля. Наприклад, можна відразу писати u32::MAX або f32::NAN без попередньої вказівки "use std::u32" та "use std::f32".
  • Доданий новий модуль примітивний, який реекспортує примітивні типи Rust, наприклад, коли необхідно написати макрос і переконатися, що типи не приховані.
  • У розряд стабільних переведено нову порцію API, у тому числі стабілізовано

    Once::is_completed,
    f32::LOG10_2,
    f32::LOG2_10,
    f64::LOG10_2,
    f64::LOG2_10 та
    iter::once_with.

Джерело: opennet.ru

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