Второ издание на закрпи за кернелот Линукс со поддршка за јазикот Rust

Мигел Оједа, автор на проектот Rust-for-Linux, предложи ажурирана верзија на компоненти за развој на двигатели на уреди на јазикот Rust за разгледување од развивачите на кернелот на Linux. Поддршката за 'рѓа се смета за експериментална, но веќе е договорена за вклучување во Linux-следната гранка. Новата верзија ги елиминира коментарите дадени за време на дискусијата за првата верзија на закрпи. Линус Торвалдс веќе се вклучи во дискусијата и предложи промена на логиката за обработка на некои операции со битови.

Потсетете се дека предложените промени овозможуваат користење на Rust како втор јазик за развој на двигатели и модули на јадрото. Поддршката на Rust е претставена како опција што не е стандардно овозможена и не резултира со вклучување на Rust како потребна зависност од изградбата на кернелот. Користењето на Rust за развој на драјвери ќе ви овозможи да креирате побезбедни и подобри драјвери со минимален напор, без проблеми како што се пристап до меморијата по ослободувањето, дереференции на нула покажувач и пречекорувања на баферот.

Безбедното ракување со меморијата е обезбедено во Rust во времето на компајлирање преку проверка на референци, следење на сопственоста на објектот и животниот век на објектот (обем), како и преку проценка на исправноста на пристапот до меморијата за време на извршувањето на кодот. Rust исто така обезбедува заштита од прелевање на цели броеви, бара задолжителна иницијализација на вредностите на променливите пред употреба, подобро се справува со грешките во стандардната библиотека, стандардно го применува концептот на непроменливи референци и променливи, нуди силно статичко пишување за да се минимизираат логичките грешки.

Најзабележливите промени во новата верзија на закрпи:

  • Кодот за распределба на меморијата е ослободен од потенцијално генерирање на „панична“ состојба кога ќе се појават грешки како што е без меморија. Вклучена е варијанта на библиотеката Rust alloc, која го преработува кодот за да се справи со неуспесите, но крајната цел е да ги пренесе сите карактеристики потребни за кернелот во главното издание на alloc (промените се веќе подготвени и префрлени на стандардот Руст библиотека).
  • Наместо ноќни изданија, сега можете да користите бета изданија и стабилни изданија на компајлерот rustc за да составите кернел со поддршка за Rust. Во моментов, rustc 1.54-beta1 се користи како референтен компајлер, но откако ќе биде објавено изданието 1.54 на крајот на месецот, тој ќе биде поддржан како референтен компајлер.
  • Додадена е поддршка за пишување тестови со користење на стандардниот атрибут „#[test]“ за Rust и можност за користење doctests за документирање на тестови.
  • Додадена е поддршка за ARM32 и RISCV архитектури како додаток на претходно поддржаните x86_64 и ARM64.
  • Подобрени имплементации на GCC Rust (GCC frontend for Rust) и rustc_codegen_gcc (rustc backend за GCC), кои сега ги поминуваат сите основни тестови.
  • Ново ниво на апстракција е предложено за употреба во Rust програмите на механизмите на кернелот напишани во C, како што се црвено-црните дрвја, објектите со број на референци, создавањето дескриптори на датотеки, задачите, датотеките и векторите за влез/излез.
  • Компонентите за развој на драјвери имаат подобрена поддршка за модулот file_operations, модулот!
  • Binder сега поддржува пренесување на дескриптори на датотеки и LSM куки.
  • Се предлага пофункционален пример на Rust драјвер - bcm2835-rng за хардверски генератор на случаен број на Raspberry Pi плочите.

Дополнително, се споменуваат некои проекти на компании поврзани со употребата на Rust во јадрото:

  • Мајкрософт изрази интерес за учество во работата за интегрирање на поддршката на Rust во кернелот на Linux и е подготвен да обезбеди имплементации на драјвери за Hyper-V на Rust во наредните месеци.
  • АРМ работи на подобрување на Rust поддршката за системи базирани на ARM. Проектот Rust веќе предложи промени кои би ги направиле 64-битните ARM системи платформа Tier 1.
  • Google директно обезбедува поддршка за проектот Rust for Linux, развива нова имплементација на механизмот за комуникација меѓу процесите на Binder во Rust и ја разгледува можноста за преработка на различни драјвери во Rust. Преку ISRG (Истражувачка група за безбедност на Интернет), Google обезбеди финансирање за работа за интегрирање на поддршката на Rust во кернелот на Linux.
  • IBM има имплементирано кернел поддршка за Rust за PowerPC системи.
  • Лабораторијата LSE (Systems Research Laboratory) разви SPI драјвер во Rust.

Извор: opennet.ru

Додадете коментар