Излезе Rust 1.88. Операционната система Munal и утилитата rsched на Rust

Публикувано е издание на програмисткия език с общо предназначение Rust 1.88, който е основан на проекта Mozilla и в момента се разработва под покровителството на независима неправителствена организация Rust Foundation. Езикът е съсредоточен върху безопасната работа с памет и предлага средства за постигане на висок паралелизъм в изпълнението на задачите, без да използва garbage collector и runtime (runtime се свежда до базова инициализация и поддръжка на стандартната библиотека).

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

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

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

  • Добавена е възможността за указване на множество изрази „let“ в условни блокове „if“ и „while“, като за тяхното свързване се използва операторът „&&“ (логическо И). Изразите „let“ могат да се комбинират с булеви условни изрази. Променливите, декларирани в let-изрази, могат да се използват в последващите условни изрази, а също така и в блоковете „if“ и „while“. if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
  • Добавена е поддръжка за написване на „голи“ функции, обозначавани с атрибута „#[unsafe(naked)]“ и съдържащи един единствен повик на „naked_asm!“. За създадените по този начин функции няма епилог и пролог, генерирани от компилатора, което позволява на разработчика напълно да контролира служебния асемблерен код, прикрепен към функцията („голата“ функция съдържа само асемблерните инструкции, посочени от разработчика, и не включва специални обработчици на аргументи и върнати стойности, добавени от компилатора). „Голите“ функции са по-удобна алтернатива на функциите, дефинирани в блока „global_asm!“. #[unsafe(naked)] pub unsafe extern „sysv64“ fn wrapping_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( „add rax, rdi, rsi“, „ret“ ); }
  • В езика предикати, прилаган в атрибутите за условна компилация „cfg“ и „cfg_attr“ (които позволяват включването или изключването на части от кода в зависимост от зададени условия), е добавена поддръжка за булеви литерали „true“ и „false“, които са идентифицирани с конфигурации, които винаги са включени или винаги са изключени. Тези литерали могат да се използват и в макроса „cfg!“ и в таблиците „[target]“ в манифестите и конфигурациите за Cargo. Изразите cfg(true) и cfg(false) могат да се прилагат вместо cfg(all()) и cfg(any()) за по-ясно изразяване на намеренията.
  • В пакетния мениджър Cargo е включен автоматичен старт на garbage collector за прочистване на кеша в домашната директория на потребителя. Преди това, запазените в кеша пакети с изтеглени зависимости не бяха чистени, което водеше до постоянно увеличаване на дисковото пространство. Включеният механизъм за почистване на кеша автоматично ще изтрива изтеглени от външни crate-файлове, които не са били адресирани повече от 3 месеца, и локално инсталирани crate-файлове, които не са били използвани повече от месец. Почистването на кеша не се стартира при използване на опции „—offline“ или „—frozen“ в crage.
  • Нов набор от API е преведен в категорията стабилни, включително стабилизирани методи и реализации на типажи:
    • Cell::update
    • impl Default for *const T
    • impl Default for *mut T
    • mod ffi::c_str
    • HashMap::extract_if
    • HashSet::extract_if
    • hint::select_unpredictable
    • proc_macro::Span::line
    • proc_macro::Span::column
    • proc_macro::Span::start
    • proc_macro::Span::end
    • proc_macro::Span::file
    • proc_macro::Span::local_file
    • ::as_chunks
    • ::as_rchunks
    • ::as_chunks_unchecked
    • ::as_chunks_mut
    • ::as_rchunks_mut
    • ::as_chunks_unchecked_mut
  • Признак «const» приложен в функциите:
    • NonNull::replace
    • ::replace
    • std::ptr::swap_nonoverlapping
    • Cell::replace
    • Cell::get
    • Cell::get_mut
    • Cell::from_mut
    • Cell::as_slice_of_cells
  • Първият слой поддръжка на целевата платформа i686-pc-windows-gnu е премахнат.

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

  • Проектът Munal OS развива експериментална операционна система, написана на Rust и основана на концепцията unikernel. В Munal OS не се прилага превземаща многозадачност, мапинг на страници на паметта и виртуално адресно пространство (използва се разпределението на паметта от UEFI). Ядрото и приложенията се изпълняват в едно адресно пространство с прилагането на модел за сигурност, базиран на sandbox-изолация WASM (в състава му е включен механизмът wasmi за стартиране на приложения под формата на байткод WebAssembly).

    Операционната система разполага с графичен интерфейс и поддържа управление чрез клавиатура и мишка. За разработка на графични приложения се използва собствен тулкит с библиотека от виджети. За мрежова комуникация са предложени TCP стек и драйвер за мрежово устройство. Сред наличните приложения за Munal OS са: уеб браузър с базова поддръжка на HTML и HTTPS, текстов редактор и терминал за изпълнение на код на Python. Кодът е отворен под лицензия MIT.

    Излезе Rust 1.88. Операционната система Munal и утилитата rsched на Rust
  • Представен е ядрото Asterinas 0.15.2, написано на Rust и предоставящо ABI, съвместимо с ядрото на Linux. Ядрото поддържа архитектури x86-64 и RISC-V и реализира 206 от 368 системни извиквания на Linux. В развитието на ядрото участват 45 разработчици, основно от различни китайски университети. Ядрото е построено с архитектура „framekernel“, в която компонентите на ядрото са разположени в общо адресно пространство, а безопасността се постига на ниво логично разделяне на безопасен код и код, в който не може да се изключи появата на проблеми със сигурността. Всички системни извиквания, файлови системи и драйвери се реализират на ниво OS Services и не могат да включват unsafe-блокове. Кодът се разпространява под лиценз MPL 2.0.
  • За ядрото на Linux е подготвена утилита rsched, която позволява анализ на статистиката за работата на планировчика на задачите. На практика утилитата позволява оценка на решенията на планировчика, свързани с предоставянето на ресурси на процесите, както и проследяване на появяващите се забавяния при планирането. За събиране на данни в ядрото се използва подсистемата BPF, а работещият в пространството на потребителя инструментарий е написан на Rust. Автор на утилитата е Крис Мейсън (Chris Mason), създател и главен архитект на файловата система Btrfs.
  • Компанията Collabora обяви разработката на вариант на инструментария Coccinelle за езика Rust. Coccinelle първоначално е предназначен за автоматизация на търсенето и преобразуването на код на езика C в ядрото на Linux. Преобразованията се задават под формата на правила, наподобяващи абстрактни пачове, които не са свързани с конкретна позиция в кода.
  • Разработчиците на GNOME представиха библиотеката за загрузка на изображения glycin, написана на езика Rust и осигуряваща декодиране на изображения с помощта на sandbox-изолация. Поддържа се предаване на декодирания контент чрез gdk::Textures и извличане на метаданни. Предоставят се обвивки за използване на glycin в GTK4, както и бекенд за включване на glycin в библиотеката GdkPixbuf, използвана в GNOME за загрузка на изображения. Glycin вече е включен в изображения с Loupe, предлаган по подразбиране в GNOME. При това, бекендът за GdkPixbuf дава възможност за използване на glycin в GNOME Shell, генератори на миниатюри и произволни приложения на GNOME, без да се налага промяна в тези програми.

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

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