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

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

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

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

  • У компіляторі rustc забезпечено підтримка оптимізації на основі результатів профілювання коду (PGO, Profile-Guided Optimization),
    що дозволяють генерувати більш оптимальний код на основі аналізу статистики, накопиченої у процесі виконання програми. Для генерації профілю передбачений прапор "-C profile-generate", а для використання профілю при складанні - "-C profile-use" (спочатку програма збирається з першим прапором, обкатується і після створення профілю збирається повторно з другим прапором);

  • При виконанні команди «cargo run», яку зручно використовувати для швидкого тестування консольних додатків, додано можливість автоматичного вибору файлу, що виконується для запуску, у разі якщо в пакеті присутні кілька виконуваних файлів. Виконуваний за замовчуванням файл визначається через директиву default-run у секції [package] з параметрами пакета, що дозволяє обійтися без явного вказівки імені файлу через прапор «-bin» при кожному запуску «cargo run»;
  • У пакетний менеджер Cargo інтегрована команда «cargo vendor», яка раніше поставлялася у вигляді окремого пакету. Команда дозволяє організувати роботу з локальною копією залежностей — після виконання «cargo vendor» усі вихідні тексти залежностей проекту завантажуються з crates.io у локальний каталог, який можна використовувати для роботи без звернення до crates.io (після виконання команди показується підказка щодо зміни конфігурації). для використання каталогу під час складання). Зазначена можливість вже застосовується для організації поставки компілятора rustc з упаковкою всіх залежностей до одного архіву з релізом;
  • З'явилася можливість створення посилань на варіанти перерахувань (enum), використовуючи псевдоніми типу (наприклад, у тілі функції fn increment_or_zero(x: ByteOption) можна вказувати ByteOption::None => 0), конструкції обчислення типів (‹MyType‹.). ››::варіант => N) або звернення Self (у блоках c &self можна вказати «Self::Quarter => 25»);
  • Додано можливість створення неіменованих констант у макросах. Замість визначення імені елемента в const тепер можна використовувати символ _ для динамічного вибору неповторного ідентифікатора, що дозволяє уникнути конфлікту імен при повторному виклику макросу;
  • Додано можливість використання атрибуту «#[repr(align(N))» з перерахуваннями (enums), використовуючи синтаксис, аналогічний визначенню структури AlignN‹T› з вирівнюванням та подальшому використанню AlignN‹MyEnum›;
  • У розряд стабільних переведено нову порцію API, у тому числі стабілізовано методи BufReader::buffer, BufWriter::buffer,
    Cell::from_mut,
    Cell::as_slice_of_cells,
    DoubleEndedIterator::nth_back,
    Option::xor,
    {i,u}{8,16,64,128,size}::reverse_bits, Wrapping::reverse_bits та
    slice::copy_within.

Додатково можна відзначити початок тестування проекту Async-std, що пропонує асинхронний варіант стандартної бібліотеки Rust (порт бібліотеки std, в якому всі інтерфейси запропоновані у версії з async і готові для використання з синтаксисом async/await).

Джерело: opennet.ru

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