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

Rust 1.37 - опубліковано реліз мови системного програмування Rust

Rust 1.37 - опубліковано реліз мови системного програмування Rust

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

Автоматичне управління пам'яттю в Rust позбавляє розробника від маніпулювання покажчиками та захищає від проблем, що виникають через низькорівневу роботу з пам'яттю, таких як звернення до області пам'яті після її звільнення, розіменування нульових покажчиків, вихід за межі буфера тощо. Для поширення бібліотек, забезпечення складання та управління залежностями проектом розвивається пакетний менеджер Cargo, що дозволяє отримати потрібні для програми бібліотеки в один клік. Для розміщення бібліотек підтримується репозиторій 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, }{8,16,64,128,size}::reverse_bits, Wrapping::reverse_bits та slice::copy_within.

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

Інші новини