Издаване на Rust 1.99.0. Microsoft премести Rust в категорията на основните езици

Обявен е новия релиз на програмния език Rust 1.99, който първоначално е разработен от Mozilla, но сега се развива под егидата на независима неправителствена организация, наречена Rust Foundation. Езикът е насочен към безопасната работа с паметта и предлага средства за постигане на високо ниво на паралелност в изпълнението на задачи, като в същото време не използва Garbage Collector и runtime (runtime се състои в основна инициализация и поддръжка на стандартната библиотека).

Методите за работа с паметта в Rust са насочени към предотвратяване на грешки при манипулиране на указатели и защита от проблеми, произтичащи от нискоуровнева работа с паметта, като достъп до освобождавано пространство, разименоване на нулеви указатели, излизане извън границите на буфера и др. За разпространение на библиотеки, осигуряване на построяване и управление на зависимости, проектът развива пакетния мениджър Cargo. Поддържа се хранилище за библиотеки на crates.io.

Безопасната работа с паметта в Rust се осигурява по време на компилацията чрез проверка на референтите, проследяване на притежанието на обекти, вземане под внимание на времето на живот на обектите (област на видимост) и оценка на коректността на достъпа до паметта по време на изпълнението на кода. Rust също така предоставя средства за защита срещу препълване на цели числа, изисква задължителна инициализация на стойностите на променливите преди тяхната употреба, по-добре обработва грешките в стандартната библиотека, прилага концепцията за неизменяемост (immutable) на референтите и променливите по подразбиране и предлага силна статична типизация за минимизиране на логическите грешки.

Основни нововъведения:

  • Добавена е възможността за създаване на функции на Rust с променлив брой аргументи (variadic), експортирани за извикване от проекти на C (C ABI). Като последен елемент на списъка с параметри в такива функции може да се посочва конструкция „...“, която се обработва в Rust с помощта на специален тип VaList, действуващ аналогично на va_list в C. unsafe extern «C» fn sum(mut args: ...) -> i32 { let a = unsafe { args.next_arg::() }; let b = unsafe { args.next_arg::() }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
  • Функциите Layout::for_value_raw, mem::size_of_val_raw и mem::align_of_val_raw са стабилизирани, което позволява безопасно определяне на размера и подравняването на сурови указатели (raw pointer), включително при използване на типове с динамичен размер, като срезове, без необходимост от създаване на препратки към данни.
  • В документацията е добавено препоръчително избягване на освобождаването на памет, за която е получена статична препратка с неограничена продължителност на живота (&’static) чрез извикване на Box::leak (round-trip unleaking), тъй като такова действие потенциално може да доведе до проблеми поради несъвместимост с бъдещи оптимизации на компилатора и свързаните механизми за разпределение на памет. Вместо да се създава статична препратка за временно предаване на собствеността, се препоръчва използването на сурови указатели, например, чрез извикване на Box::into_non_null.
  • Нов набор от API е преведен в категорията стабилни, включително стабилизирани методи и реализации на типажи:
    • IntoIterator за Box<[T; N]>
    • IntoIterator за &Box<[T; N]>
    • IntoIterator за &mut Box<[T; N]>
    • VecDeque::retain_back
    • core::ffi::VaList
    • Box::into_non_null
    • Box::from_non_null
    • Vec::into_parts
    • Vec::from_parts
    • core::mem::size_of_val_raw
    • core::mem::align_of_val_raw
    • core::alloc::Layout::for_value_raw
    • String::from_utf8_lossy_owned
    • string::FromUtf8Error::into_utf8_lossy
    • FusedIterator за StepBy<I>
    • std::fs::set_times
    • std::fs::set_times_nofollow
  • В пакетния мениджър cargo е реализиран нов вграден профил „debug“, аналогичен на профила „dev“ (в бъдеще възможностите за отстраняване на грешки и разработки ще бъдат разделени). При изграждане в CI, инкременталната компилация е деактивирана по подразбиране.
  • Целевата платформа riscv64-unknown-linux-musl е преместена на второ ниво на поддръжка, което предполага гаранция за изграждане, но без гаранции при преминаване на тестовия набор.

Допълнително може да се отбележи, че наскоро бяха анонсирани проекти и събития, свързани с Rust:

  • Компанията Microsoft е превела Rust в списъка на езиците за първоначална поддръжка и ще осигури пълна поддръжка на всички етапи на разработка в компанията. Преди това, първоначалната поддръжка вътре в компанията е била предоставяна за езиците C++, C# и TypeScript. Отбелязва се, че Rust вече се използва в над 100 репозитория на Microsoft. Освен това, компоненти на Rust вече се прилагат в продукти като Microsoft 365 и Copilot, а за компилатора MSVC е подготвен отделен бекенд rustc_codegen_utc за Rust, основан на компилатора rustc.

    Основната цел на прилагането на Rust в Microsoft е засилването на сигурността на кода, критичен от гледна точка на безопасността. Според техническия директор на Microsoft Azure около 70% от всички уязвимости в Windows са причинени от проблеми с паметта, които могат да бъдат избегнати при използване на Rust.

  • Компанията Google премахна старата реализация на механизма за междупроцесно взаимодействие Binder от ядрото на Linux, написана на език C, в полза на новия драйвер Binder IPC, пренаписан на Rust. Отбелязва се, че в продължение на 15 години съществуването на стария драйвер е натрупало значителен технически дълг и множество усложнения, които затрудняваха откритията на грешки, поддръжката и добавянето на нови възможности. Драйверът Binder IPC на Rust е признат за основен и вече не се представя като експериментална разработка.
  • Обявен е издаването на Arti 2.7.0, реализираща инструментария Tor, написан на език Rust. Когато кодът на Arti достигне ниво, способно напълно да замени версията на C, разработчиците на Tor имат намерение да придадат на Arti статус на основна реализация на Tor и постепенно да прекратят поддръжката на реализацията на C. В новата версия е обособено развитие на функционалността за релей и сървъри директории (Directory Authority), свързани с парсинг на документи, поддържане на огледални сървъри и обработка на DNS трафик. Добавена е реализация на RPC за промяна и проверка на конфигурацията. Устранени са няколко уязвимости - на администраторите на onion услуги се препоръчва спешно да актуализират своите системи.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster