„A rozsda a rendszerprogramozás jövője, a C az új összeszerelő” – az Intel egyik vezető mérnökének beszéde

A legutóbbi nyílt forráskódú technológiai csúcstalálkozón (OSTS) Josh Triplett, az Intel vezető mérnöke elmondta, hogy cége abban érdekelt, hogy a Rust a közeljövőben „paritást” érjen el a C nyelvvel, amely még mindig uralja a rendszereket és az alacsony szintű fejlesztést. Beszédében "Intel and Rust: The Future of Systems Programming" címmel beszélt a rendszerprogramozás történetéről, arról is, hogyan lett a C az alapértelmezett rendszerprogramozási nyelv, a Rust mely tulajdonságai adnak előnyt a C-vel szemben, és hogyan képes teljesen cserélje ki a C-t ezen a programozási területen.

„A rozsda a rendszerprogramozás jövője, a C az új összeszerelő” – az Intel egyik vezető mérnökének beszéde

A rendszerprogramozás olyan szoftver fejlesztése és kezelése, amely platformként szolgál alkalmazás-alkalmazások létrehozásához, biztosítva, hogy az utóbbiak kölcsönhatásba lépjenek a processzorral, a RAM-mal, a bemeneti/kimeneti eszközökkel és a hálózati berendezésekkel. A rendszerszoftver speciális absztrakciót hoz létre interfészek formájában, amelyek segítenek az alkalmazásszoftverek létrehozásában anélkül, hogy belemélyednének a hardver működésének részleteibe.

Triplett maga a rendszerprogramozást úgy definiálja, mint „mindent, ami nem alkalmazás”. Ez magában foglalja a BIOS-t, a firmware-t, a rendszerbetöltőket és az operációs rendszer kerneleit, a különféle típusú beágyazott alacsony szintű kódokat és a virtuális gépek megvalósítását. Érdekes módon Triplett úgy véli, hogy a webböngésző egyben rendszerszoftver is, mivel a böngésző már régen több lett, mint „csak egy program”, önálló „webhelyek és webes alkalmazások platformja”.

A múltban a legtöbb rendszerprogram, beleértve a BIOS-t, a rendszerbetöltőket és a firmware-t, assembly nyelven íródott. Az 1960-as években kísérletek kezdődtek a magas szintű nyelvek hardveres támogatásával, ami olyan nyelvek létrehozásához vezetett, mint a PL/S, BLISS, BCPL és ALGOL 68.

Aztán az 1970-es években Dennis Ritchie megalkotta a C programozási nyelvet a Unix operációs rendszerhez. A B programozási nyelven létrehozott, még gépelési támogatással sem rendelkező C-t erős, magas szintű funkciókkal töltötték meg, amelyek a legalkalmasabbak operációs rendszerek és illesztőprogramok írására. A UNIX több összetevője, beleértve a kernelt is, végül C nyelven íródott át. Ezt követően sok más rendszerprogram, köztük az Oracle adatbázis, a Windows forráskódok nagy része és a Linux operációs rendszer is C nyelven íródott.

C óriási támogatást kapott ebben az irányban. De pontosan mi késztette a fejlesztőket arra, hogy erre váltsanak? Triplett úgy véli, hogy a fejlesztők motiválásához az egyik programozási nyelvről a másikra való váltásra, az utóbbinak először új funkciókat kell biztosítania anélkül, hogy elveszítené a régi funkciókat.

Először is, a nyelvnek "ésszerűen lenyűgöző" új funkciókat kell kínálnia. – Nem is lehetne jobb. Ennek lényegesen jobbnak kell lennie, hogy indokolja az átálláshoz szükséges erőfeszítést és mérnöki időt” – magyarázza. Az assembly nyelvhez képest a C sok mindent kínált. Támogatta a típusbiztos viselkedést, jobb hordozhatóságot és teljesítményt nyújtott magas szintű konstrukciókkal, és összességében sokkal olvashatóbb kódot generált.

Másodszor, a nyelvnek támogatnia kell a régi funkciókat, ami azt jelenti, hogy a C-re való átállás történetében a fejlesztőknek meg kellett bizonyosodniuk arról, hogy ez nem kevésbé működőképes, mint az assembly nyelv. Triplett elmagyarázza: „Egy új nyelv nem lehet csak jobb, hanem ugyanolyan jónak is kell lennie.” Amellett, hogy gyorsabb, és támogat minden olyan adattípust, amelyet az assembly nyelv használhat, a C-nek volt egy Triplett által nevezett "escape hatch"-je is – vagyis támogatta az assembly nyelvi kód beillesztését önmagába.

„A rozsda a rendszerprogramozás jövője, a C az új összeszerelő” – az Intel egyik vezető mérnökének beszéde

Triplett úgy véli, hogy a C mára az assembly nyelvvé válik, ami sok évvel ezelőtt volt. „C az új összeszerelő” – jelenti ki. A fejlesztők most egy új, magas szintű nyelvet keresnek, amely nemcsak a C-ben felgyülemlett, már nem javítható problémákat oldja meg, hanem izgalmas újdonságokat is kínál. Egy ilyen nyelvnek elég meggyőzőnek kell lennie ahhoz, hogy rávegye a fejlesztőket rá, biztonságosnak kell lennie, biztosítania kell az automatikus memóriakezelést és még sok minden mást.

„Minden nyelvnek, amely jobb akar lenni, mint a C, sokkal többet kell kínálnia, mint puffer túlcsordulás elleni védelmet, ha valóban lenyűgöző alternatíva akar lenni. A fejlesztőket érdekli a használhatóság és a teljesítmény, olyan kódot írnak, amely magától értetődő, és kevesebb sorban több munkát végez. A biztonsági kérdésekkel is foglalkozni kell. A könnyű használat és a teljesítmény kéz a kézben járnak. Minél kevesebb kódot kell megírnod, hogy elérj valamit, annál kevesebb a lehetőséged bármilyen hibát elkövetni, akár biztonsági vonatkozásúak, akár nem” – magyarázza Triplett.

Rust és C összehasonlítása

2006-ban Graydon Hoare, a Mozilla alkalmazottja személyes projektként kezdte írni a Rust-ot. 2009-ben pedig a Mozilla elkezdte szponzorálni a Rust fejlesztését saját igényeire, és kibővítette a csapatot a nyelv továbbfejlesztése érdekében.

Az egyik ok, amiért a Mozilla érdeklődött az új nyelv iránt, az az, hogy a Firefox több mint 4 millió sornyi C++ kódot tartalmazott, és jó néhány kritikus biztonsági rést tartalmazott. A Rust a biztonság és a párhuzamosság szem előtt tartásával készült, így ideális választás a Firefox számos összetevőjének átírásához a Quantum projekt részeként, hogy teljesen újratervezzék a böngésző architektúráját. A Mozilla a Rustot is használja a Servo fejlesztésére, egy HTML-megjelenítő motorra, amely végül felváltja a jelenlegi Firefox-megjelenítő motort. Sok más cég is elkezdte használni a Rustot projektjeihez, köztük a Microsoft, a Google, a Facebook, az Amazon, a Dropbox, a Fastly, a Chef, a Baidu és még sok más.

A Rust megoldja a C nyelv egyik legfontosabb problémáját: automatikus memóriakezelést kínál, így a fejlesztőknek nem kell manuálisan lefoglalniuk, majd felszabadítaniuk az alkalmazás minden objektumához. A Rust abban különbözik a többi modern nyelvtől, hogy nincs benne szemétgyűjtő, amely automatikusan eltávolítja a nem használt objektumokat a memóriából, és nincs meg a működéséhez szükséges futási környezet sem, mint például a Java Runtime Environment for Java. Ehelyett a Rust a tulajdonjog, a kölcsönzés, a hivatkozások és az élettartam fogalmát használja. „A Rustnak van egy rendszere, amely deklarálja egy objektum hívásait, jelezve, hogy a tulajdonos használja-e, vagy csak kölcsönkéri. Ha egyszerűen kölcsönvesz egy objektumot, a fordító nyomon követi ezt, és biztosítja, hogy az eredeti a helyén maradjon, amíg hivatkozik rá. A Rust gondoskodik arról is, hogy az objektumot azonnal eltávolítsák a memóriából, amint a használat befejeződött, és a fordítási időben beilleszt egy megfelelő hívást a kódba, további idő nélkül” – mondja Triplett.

A natív futtatókörnyezet hiánya is a Rust pozitív tulajdonságának tekinthető. Triplett úgy véli, hogy a nyelveket, amelyeken fut, nehéz rendszerprogramozási eszközként használni. Amint elmagyarázza: "Inicializálnia kell ezt a futási környezetet, mielőtt bármilyen kódot hívhatna, ezt a futási környezetet kell használnia függvények hívásához, és maga a futási környezet váratlan időpontokban további kódot futtathat a háta mögött."

A Rust a biztonságos párhuzamos programozásra is törekszik. Ugyanazok a funkciók, amelyek biztonságossá teszik a memóriát, nyomon követik a dolgokat, például, hogy melyik szál melyik objektumot birtokolja, és mely objektumok továbbíthatók a szálak között, és melyeket kell zárolni.

Mindezek a tulajdonságok elég meggyőzővé teszik a Rust-ot ahhoz, hogy a fejlesztők új rendszerprogramozási eszközként válasszák. A párhuzamos számítások terén azonban Rust még mindig egy kicsit le van maradva C-től.

A Triplett egy speciális munkacsoportot kíván létrehozni, amely a szükséges funkciók bevezetésére fog összpontosítani a Rustban, hogy a rendszerprogramozás terén teljes mértékben kiegyenlítse, felülmúlja és helyettesítse a C-t. BAN BEN szál a Redditenbeszédének szentelve elmondta, hogy „az FFI/C Parity csoport létrehozása folyamatban van, és még nem kezdte el a munkát”, egyelőre kész válaszolni minden kérdésre, és a jövőben mindenképpen közzéteszi az azonnali terveit. a Rust fejlesztéséért minden érdekelt félnek szóló kezdeményezésének részeként.

Feltételezhető, hogy az FFI/C Parity csoport mindenekelőtt a Rust többszálas támogatásának fejlesztésére, az új Intel Xeon Scalable processzorokban megjelent lebegőpontos formátum, a BFLOAT16 támogatására, valamint a stabilizáló összeállításra összpontosít. kódbeillesztések.



Forrás: 3dnews.ru

Hozzászólás