"Rust – будучыня сістэмнага праграмавання, З – новы Асэмблер" – выступленне аднаго з вядучых інжынераў Intel

На нядаўна які прайшоў Саміце па тэхналогіях з адчыненым зыходным кодам (Open Source Technology Summi — OSTS) Джош Трыплет (Josh Triplett), Вядучы інжынер Intel, распавёў аб тым, што яго кампанія зацікаўлена ў тым, каб у найбліжэйшай будучыні Rust дасягнуў «парытэту» з усё яшчэ дамінантным у галіне сістэмнай і нізкаўзроўневай распрацоўкі мовай C. У сваім выступленні пад загалоўкам "Intel і Rust: будучыня сістэмнага праграмавання" ён таксама распавёў аб гісторыі сістэмнага праграмавання, аб тым, як C стаў мовай сістэмнага праграмавання "па змаўчанні", якія магчымасці Rust даюць яму перавага над C і як у найблізкай будучыні ён зможа цалкам замяніць C у дадзенай вобласці праграмавання.

"Rust – будучыня сістэмнага праграмавання, З – новы Асэмблер" – выступленне аднаго з вядучых інжынераў Intel

Сістэмнае праграмаванне - гэта распрацоўка і кіраванне праграмным забеспячэннем, якое служыць платформай для стварэння прыкладных прыкладанняў, забяспечваючы ўзаемадзеянне апошніх з працэсарам, аператыўнай памяццю, прыладамі ўводу-вываду і сеткавым абсталяваннем. Сістэмнае праграмнае забеспячэнне стварае адмысловую абстракцыю ў выглядзе інтэрфейсаў, якія дапамагаюць ствараць прыкладное ПА, не ўнікаючы ў дэталі таго, як працуе непасрэдна "жалеза".

Сам Трыплет вызначае сістэмнае праграмаванне як "усё, што не з'яўляецца дадаткам". Яно ўключае ў сябе такія рэчы, як BIOS, прашыўкі, загрузнікі і ядры аперацыйных сістэм, розныя віды ўбудаванага нізкаўзроўневага кода, а таксама рэалізацыі віртуальных машын. Цікава, што Трыплет лічыць, што вэб-браўзэр - гэта таксама сістэмнае праграмнае забеспячэнне, паколькі браўзэр даўно стаў большым, чым "проста праграмай", ператварыўшыся ў самастойную "платформу для вэб-сайтаў і вэб-прыкладанняў".

У мінулым большасць сістэмных праграм, у тым ліку BIOS, загрузнікі і прашыўкі, пісаліся на мове асэмблера. У 1960-х гадах пачаліся эксперыменты па забеспячэнні апаратнай падтрымкі моў высокага ўзроўня, што прывяло да стварэння такіх моў, як PL/S, BLISS, BCPL і ALGOL 68.

Затым, у 1970-х гадах, Дэніс Рытчы (Dennis Ritchie) стварыў мову праграмавання C (Сі) для аперацыйнай сістэмы Unix. Створаны на мове праграмавання B, якія не мелі нават падтрымкі тыпізацыі, C быў напоўнены магутнымі высокаўзроўневымі функцыямі, якія лепш за ўсё падыходзілі для напісання аперацыйных сістэм і драйвераў. Некалькі кампанентаў UNIX, уключаючы яго ядро, былі ў канчатковым выніку перапісаны на C. У далейшым многія іншыя сістэмныя праграмы, уключаючы базу дадзеных Oracle, большую частку зыходнага кода Windows і аперацыйную сістэму Linux, былі таксама напісаны на C.

C атрымаў вялікую падтрымку ў гэтым напрамку. Але што менавіта прымусіла распрацоўшчыкаў перайсці на яго? Трыплет лічыць, што для таго, каб заматываваць распрацоўшчыкаў перайсці з адной мовы праграмавання на іншую, апошні перш за ўсё павінен забяспечыць новыя функцыі без страты старых магчымасцяў.

Па-першае, мова павінна прапаноўваць "дастаткова ўражлівыя" новыя функцыі. «Ён не можа быць крыху лепшым. Ён павінен быць значна лепш, каб апраўдаць намаганні і час інжынераў, неабходны для пераходу», - тлумачыць ён. У параўнанні з мовай асэмблера ў З было шмат рэчаў, якія ён мог прапанаваць. Ён падтрымліваў у некаторай ступені бяспечную тыпізацыю, забяспечваў лепшую пераноснасць і прадукцыйнасць з высокаўзроўневымі канструкцыямі, а таксама генераваў у цэлым нашмат больш чытэльны код.

Па-другое, мова павінна забяспечваць падтрымку старых магчымасцяў, а гэта значыць, што ў гісторыі з пераходам на C распрацоўнікі павінны былі быць упэўненыя, што ён не меней функцыянальны, чым мова асэмблера. Трыплет тлумачыць: «Новая мова не можа быць проста лепшай, яна таксама павінна быць не горшай». Акрамя таго, што C быў хутчэй і падтрымліваў любыя тыпы дадзеных, якія мог выкарыстоўваць мову асэмблера, ён таксама меў тое, што Трыплет назваў "аварыйным люкам", а менавіта падтрымліваў у сабе ўстаўкі кода на мове асэмблера.

"Rust – будучыня сістэмнага праграмавання, З – новы Асэмблер" – выступленне аднаго з вядучых інжынераў Intel

Трыплет лічыць, што C зараз становіцца тым, чым была мова асэмблера шмат гадоў таму. "З – гэта новы Асэмблер", – заяўляе ён. Цяпер распрацоўшчыкі шукаюць новую мову высокага ўзроўню, які не толькі вырашыць назапашаныя ў C праблемы, выправіць якія ўжо немагчыма, але і таксама прапануе новыя ўражальныя магчымасці. Такая мова павінна быць дастаткова пераканаўчай, каб прымусіць распрацоўшчыкаў перайсці на яе, павінна быць бяспечнай, забяспечваць аўтаматычнае кіраванне памяццю і многае іншае.

«Любая мова, якая хоча быць лепшай за C, павінна прапаноўваць значна больш, чым проста абарону ад перапаўнення буфера, калі яна сапраўды хоча стаць пераканаўчай альтэрнатывай. Распрацоўнікі зацікаўлены ў зручнасці выкарыстання і прадукцыйнасці, у напісанні кода, які не патрабуе тлумачэнняў і выконвае больш працы за меншую колькасць радкоў. Таксама неабходна вырашыць праблемы бяспекі. Прастата выкарыстання і прадукцыйнасць непарыўна з ёю звязаныя. Чым менш кода вам трэба напісаць для дасягнення чаго-небудзь, тым менш у вас магчымасцяў, каб дапусціць якія-небудзь памылкі, звязаныя з бяспекай ці не», - тлумачыць Трыплет.

Параўнанне Rust і C

Яшчэ ў 2006 годзе Грейдон Хоар (Graydon Hoare), супрацоўнік Mozilla, пачаў пісаць Rust як асабісты праект. А ў 2009 годзе Mozilla пачала спансіраваць распрацоўку Rust для ўласных патрэб, а таксама пашырыла каманду для далейшага развіцця мовы.

Адна з чыннікаў, па якой Mozilla зацікавілася ў новай мове, складаецца ў тым, што Firefox быў напісаны на больш за 4 мільёнах радкоў кода C++ і меў даволі шмат крытычных уразлівасцяў. Rust быў створаны з улікам патрабаванняў бяспекі і паралелізму, што робіць яго ідэальным выбарам для перапісвання шматлікіх кампанентаў Firefox у рамках праекту Quantum па поўнай перапрацоўцы архітэктуры браўзэра. Таксама Mozilla выкарыстоўвае Rust для распрацоўкі Servo, рухавічка рэндэрынгу HTML, які ў будучыні заменіць бягучы рухавічок рэндэрынгу Firefox. Многія іншыя кампаніі пачалі выкарыстоўваць Rust для сваіх праектаў, у тым ліку Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu і многія іншыя.

Rust вырашае адну з найбольш важных праблем мовы C. Ён прапануе аўтаматычнае кіраванне памяццю, таму распрацоўшчыкам не трэба ўручную выдзяляць, а затым вызваляць яе для кожнага аб'екта ў дадатку. Што адрознівае Rust ад іншых сучасных моў, дык гэта тое, што ён не мае зборшчыка смецця, які аўтаматычна выдаляе з памяці невыкарыстоўваныя аб'екты, а таксама асяроддзі выканання, неабходнай для яго працы, як, напрыклад, Java Runtime Environment для Java. Замест гэтага ў Rust ёсць канцэпцыі валодання, запазычанні, спасылак і часу жыцця. «У Rust ёсць сістэма дэкларавання выклікаў аб'екта, якая дазваляе паказаць, ці выкарыстоўвае яго ўладальнік ці гэта проста запазычанне. Калі вы проста запазычаеце аб'ект, кампілятар будзе сачыць за гэтым і гарантаваць, што арыгінал застанецца на месцы, пакуль вы спасылаецеся на яго. А таксама Rust прасочыць, што аб'екта будзе выдалены з памяці адразу па завяршэнні яго выкарыстання, устаўляючы адпаведны выклік у код падчас кампіляцыі без дадатковых затрат часу », - распавядае Трыплет.

Адсутнасць уласнага асяроддзя выканання таксама можна лічыць дадатнай рысай Rust. Трыплет лічыць, што мовы, якія выконваюцца з яе дапамогай, складана выкарыстоўваць у якасці інструмента для сістэмнага праграмавання. Як ён тлумачыць: "Вы павінны ініцыялізаваць гэта асяроддзе выканання, перш чым зможаце выклікаць любы код, вы павінны выкарыстоўваць гэта асяроддзе выканання для выкліку функцый, і само асяроддзе выканання можа запускаць дадатковы код за вашай спіной у нечаканыя моманты часу".

Таксама Rust імкнецца забяспечыць бяспечнае паралельнае праграмаванне. Тыя ж функцыі, якія робяць яго бяспечным для памяці, адсочваюць такія рэчы, як тое, якому патоку належыць які аб'ект і якія аб'екты могуць перадавацца паміж патокамі, а якія маюць патрэбу ў блакіроўцы.

Усе гэтыя функцыі робяць Rust досыць пераканаўчым, каб распрацоўнікі змаглі абраць яго як новая прылада для сістэмнага праграмавання. Аднак, з пункту гледжання паралельных вылічэнняў Rust пакуль яшчэ крыху адстае ад C.

Трыплет збіраецца стварыць адмысловую працоўную групу, якая зоймецца ўкараненнем у Rust неабходных функцыяй, каб ён змог цалкам зраўняцца, перасягнуць і замяніць C у вобласці сістэмнага праграмавання. У тэме на Reddit, прысвечанай яго выступу, ён паведаміў, што "група FFI/C Parity знаходзіцца ў працэсе стварэння і яшчэ не пачала працу", пакуль што ён гатовы адказаць на любыя пытанні, а ў будучыні абавязкова апублікуе бліжэйшыя планы па развіцці Rust у рамках яго ініцыятывы для усіх зацікаўленых асоб.

Можна выказаць здагадку, што ў першую чаргу група FFI / C Parity зоймецца паляпшэннем падтрымкі шматструменнасці ў Rust, укараненнем падтрымкі BFLOAT16, фармату прадстаўлення лікаў з якая плавае коскі, які з'явіўся ў новых працэсарах Intel Xeon Scalable, а таксама стабілізацыяй уставак кода на Асэмблеры.



Крыніца: 3dnews.ru

Дадаць каментар