Шеста верзија закрпа за Линук кернел са подршком за Руст језик

Мигел Оједа, аутор пројекта Руст-фор-Линук, предложио је издавање в6 компоненти за развој драјвера уређаја на језику Руст за разматрање од стране програмера Линук кернела. Ово је седмо издање закрпа, узимајући у обзир прву верзију, објављену без броја верзије. Подршка за Руст се сматра експерименталном, али је већ укључена у линук-нект грану и довољно је развијена да започне рад на креирању слојева апстракције над подсистемима кернела, као и писању драјвера и модула. Развој финансирају Гугл и ИСРГ (Интернет Сецурити Ресеарцх Гроуп), који је оснивач пројекта Лет'с Енцрипт и промовише ХТТПС и развој технологија за побољшање безбедности на Интернету.

У новој верзији:

  • Комплет алата и варијанта библиотеке аллоц, ослобођени могућег генерисања „паничног“ стања када дође до грешака, ажурирани су на издање Руста 1.60, који стабилизује подршку за „маибе_унинит_ектра“ режим који се користи у закрпама кернела.
  • Додата је могућност покретања тестова из документације (тестови који се такође користе као примери у документацији), кроз конверзију тестова везаних за АПИ кернела у времену превођења у КУнит тестове који се извршавају током учитавања кернела.
  • Усвојени су захтеви да тестови не смеју да доведу до Цлиппи линтер упозорења, баш као код Руст кернела.
  • Предложена је почетна имплементација “нет” модула са мрежним функцијама. Руст код има приступ мрежним структурама кернела као што су Намеспаце (засновано на структури струцт нет кернел), СкБуфф (струцт ск_буфф), ТцпЛистенер, ТцпСтреам (струцт соцкет), Ипв4Аддр (струцт ин_аддр), СоцкетАддрВ4 ( струцт соцкаддр_ин) и њихови ИПв6 екуиваленти .
  • Постоји почетна подршка за технике асинхроног програмирања (асинц), имплементиране у облику касинц модула. На пример, можете написати асинхрони код за манипулисање ТЦП утичницама: асинц фн ецхо_сервер(стреам: ТцпСтреам) -> Ресулт { лет мут буф = [0у8; 1024]; лооп { лет н = стреам.реад(&мут буф).аваит?; иф н == 0 { ретурн Ок(()); } стреам.врите_алл(&буф[..н]).аваит?; } }
  • Додат нет::филтер модул за манипулисање филтерима мрежних пакета. Додат је пример руст_нетфилтер.рс са имплементацијом филтера на Руст језику.
  • Додата имплементација једноставног мутек смутек::Мутек, који не захтева качење.
  • Додат је НоВаитЛоцк, који никада не чека закључавање и ако га заузме друга нит, узрокује пријављивање грешке приликом покушаја преузимања закључавања уместо заустављања позиваоца.
  • Додат је РавСпинЛоцк, идентификован са рав_спинлоцк_т у кернелу, да се примени на одељке који не могу бити мирни.
  • Додан тип АРеф за референце на објекат на који се примењује механизам за бројање референци (увек-рефцоунтед).
  • Рустц_цодеген_гцц бацкенд, који вам омогућава да користите либгццјит библиотеку из ГЦЦ пројекта као генератор кода у рустц-у да бисте рустц-у пружили подршку за архитектуре и оптимизације доступне у ГЦЦ-у, имплементирао је могућност покретања рустц компајлера. Промоција компајлера значи могућност коришћења генератора кода заснованог на ГЦЦ-у у рустц-у за прављење самог рустц компајлера. Поред тога, недавно издање ГЦЦ 12.1 укључује исправке за либгццјит неопходне за исправан рад рустц_цодеген_гцц. У току су припреме за пружање могућности инсталирања рустц_цодеген_гцц помоћу услужног програма руступ.
  • Примећује се напредак у развоју ГЦЦ фронтенд гццрс са имплементацијом компајлера Руст језика заснованог на ГЦЦ-у. Тренутно на гццрс-у раде два програмера са пуним радним временом.

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

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

Извор: опеннет.ру

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