Vid det nyligen genomförda Open Source Technology Summit (OSTS) , ledande ingenjör pÄ Intel, berÀttade om att hans företag Àr intresserat av att Rust inom en snar framtid ska nÄ "paritet" med det fortfarande dominerande sprÄket C inom system- och lÄgnivÄutveckling. under rubriken "Intel och Rust: framtiden för systemprogrammering" berÀttade han Àven om historien bakom systemprogrammering, hur C blev det "standard" systemprogrammeringssprÄket, vilka möjligheter Rust erbjuder som ger det fördelar över C och hur det inom en snar framtid kan ersÀtta C helt i detta omrÄde av programmering.

Systemprogrammering handlar om att utveckla och hantera programvara som tjÀnar som plattform för att skapa applikationer, vilket möjliggör deras interaktion med processorer, RAM, in- och utmatningsenheter och nÀtverksutrustning. Systemprogramvaran skapar en speciell abstraktion i form av grÀnssnitt som hjÀlper till att skapa applikationsprogramvara utan att behöva förstÄ detaljerna i hur "maskinvaran" fungerar.
Triplett definierar systemprogrammering som "allt som inte Àr en applikation". Det omfattar saker som BIOS, bootloaders och systemkÀrnor, olika typer av inbyggd lÄgnivÄkod, samt implementationer av virtuella maskiner. Intressant nog anser Triplett att en webblÀsare ocksÄ Àr systemprogramvara, eftersom webblÀsaren har blivit mer Àn "bara ett program" och har utvecklats till en sjÀlvstÀndig "plattform för webbplatser och webbapplikationer."
Tidigare skrevs de flesta systemprogram, inklusive BIOS, bootloaders och firmware, pÄ assembler. PÄ 1960-talet inleddes experiment med att ge hÄrdvarustöd för högre nivÄsprÄk, vilket ledde till skapandet av sprÄk som PL/S, BLISS, BCPL och ALGOL 68.
PÄ 1970-talet skapade Dennis Ritchie programmeringssprÄket C för operativsystemet Unix. C, som utvecklades baserat pÄ det typfria programmeringssprÄket B, erbjöd kraftfulla hög-nivÄfunktioner som var sÀrskilt lÀmpade för att skriva operativsystem och drivrutiner. Flera komponenter i UNIX, inklusive dess kÀrna, blev sÄ smÄningom omskrivna i C. MÄnga andra systemprogram, inklusive Oracle-databasen, största delen av Windows-kÀllkoden och operativsystemet Linux, har ocksÄ skrivits i C.
C fick stort stöd i detta avseende. Men vad var det som fick utvecklarna att byta till det? Triplett anser att för att motivera utvecklare att byta frÄn ett programmeringssprÄk till ett annat, mÄste det nya sprÄket framför allt erbjuda nya funktioner utan att förlora de gamla möjligheterna.
För det första mÄste sprÄket erbjuda "tillrÀckligt imponerande" nya funktioner. "Det kan inte vara bara lite bÀttre. Det mÄste vara betydligt bÀttre för att rÀttfÀrdiga den insats och tid som ingenjörerna behöver för att göra övergÄngen", förklarar han. JÀmfört med assembler-sprÄket hade C mÄnga saker att erbjuda. Det stöder till viss del sÀker typning, ger bÀttre portabilitet och prestanda med hög-nivÄkonstruktioner, samt genererar i allmÀnhet mycket mer lÀsbar kod.
För det andra mÄste sprÄket stödja gamla funktioner, vilket innebÀr att utvecklarna bör vara övertygade om att C Àr lika funktionellt som assembler-sprÄket. Triplett förklarar: "Ett nytt sprÄk kan inte bara vara bÀttre, det mÄste ocksÄ vara minst lika bra". Förutom att C var snabbare och stödde alla datatyper som assembler-sprÄket kunde anvÀnda, hade det ocksÄ det som Triplett kallade en "nödhÄlsöppning", vilket innebÀr att det stödde insÀttningar av assemblerkod internt.

Triplet anser att C nu blir vad assembler sprÄket var för mÄnga Är sedan. "C Àr det nya Assembler", sÀger han. Nu söker utvecklare ett nytt hög-nivÄsprÄk som inte bara löser de problem som uppstÄtt i C, som det redan Àr omöjligt att ÄtgÀrda, utan ocksÄ erbjuder nya imponerande funktioner. Ett sÄdant sprÄk mÄste vara tillrÀckligt övertygande för att fÄ utvecklare att byta till det, mÄste vara sÀkert, erbjuda automatisk minneshantering och mycket mer.
"Ett sprÄk som vill vara bÀttre Àn C mÄste erbjuda mycket mer Àn bara skydd mot buffertöverflöd om det verkligen vill bli ett övertygande alternativ. Utvecklare Àr intresserade av anvÀndbarhet och prestanda, att skriva kod som inte krÀver förklaringar och utför mer arbete med fÀrre rader. SÀkerhetsproblem mÄste ocksÄ lösas. AnvÀndarvÀnlighet och prestanda Àr oskiljaktigt kopplade. Ju mindre kod du behöver skriva för att uppnÄ nÄgot, desto mindre riskerar du att göra nÄgra sÀkerhetsrelaterade fel", förklarar Triplet.
JÀmförelse mellan Rust och C
Redan 2006 började Graydon Hoare, en anstÀlld pÄ Mozilla, skriva Rust som ett personligt projekt. à r 2009 började Mozilla finansiera utvecklingen av Rust för sina egna behov och utvidgade dessutom teamet för vidareutveckling av sprÄket.
En av anledningarna till att Mozilla blev intresserad av ett nytt sprÄk Àr att Firefox var skrivet pÄ mer Àn 4 miljoner rader C++-kod och hade ganska mÄnga kritiska sÄrbarheter. Rust skapades med krav pÄ sÀkerhet och parallellitet i Ätanke, vilket gör det till ett utmÀrkt val för att skriva om mÄnga komponenter i Firefox inom ramen för Quantum-projektet för en fullstÀndig omarbetning av webblÀsarens arkitektur. Mozilla anvÀnder ocksÄ Rust för att utveckla Servo, en HTML-renderingsmotor som i framtiden kommer att ersÀtta den nuvarande renderingsmotorn i Firefox. MÄnga andra företag har börjat anvÀnda Rust för sina projekt, inklusive Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu och mÄnga andra.
Rust löser ett av de viktigaste problemen med C-sprÄket. Det erbjuder automatisk minneshantering, sÄ utvecklare behöver inte manuellt allokera och sedan frigöra minne för varje objekt i applikationen. Det som sÀrskiljer Rust frÄn andra moderna sprÄk Àr att det inte har nÄgon skrÀpsamling, som automatiskt tar bort oanvÀnda objekt frÄn minnet, samt ingen körmiljö som Àr nödvÀndig för dess drift, som Java Runtime Environment för Java. IstÀllet anvÀnder Rust koncepten Àgande, lÄning, referenser och livslÀngd. "I Rust finns det ett system för att deklarera objektanrop, vilket gör att du kan ange om det anvÀnds av sin Àgare eller om det bara Àr en lÄning. Om du bara lÄnar ett objekt kommer kompilatorn att övervaka detta och sÀkerstÀlla att originalet förblir pÄ plats sÄ lÀnge du refererar till det. Dessutom kommer Rust att se till att objektet tas bort frÄn minnet sÄ snart det inte lÀngre anvÀnds, genom att infoga den lÀmpliga anropet i koden under kompileringen utan extra tidskostnader," sÀger Triplett.
Avsaknaden av en egen körmiljö kan ocksÄ ses som en positiv aspekt av Rust. Triplett anser att sprÄk som körs med hjÀlp av den Àr svÄra att anvÀnda som verktyg för systemprogrammering. Som han förklarar: "Du mÄste initiera denna körmiljö innan du kan anropa nÄgon kod, du mÄste anvÀnda denna körmiljö för att kalla funktioner, och sjÀlva körmiljön kan köra ytterligare kod bakom din rygg vid ovÀntade tillfÀllen."
Rust strÀvar ocksÄ efter att sÀkerstÀlla sÀkert parallellt programering. De funktioner som gör den minnessÀker övervakar sÄdana saker som vilken trÄd som Àger vilket objekt och vilka objekt som kan överföras mellan trÄdar och vilka som behöver lÄsas.
Alla dessa funktioner gör Rust tillrÀckligt övertygande för att utvecklare ska vÀlja det som ett nytt verktyg för systemprogrammering. Men nÀr det gÀller parallella berÀkningar ligger Rust fortfarande lite efter C.
Triplet planerar att skapa en specialarbetsgrupp som ska arbeta med att implementera nödvÀndiga funktioner i Rust sÄ att det helt kan jÀmföras med, övertrÀffa och ersÀtta C inom systemprogrammering. , som handlar om hans presentation, meddelade han att "FFI/C Parity-gruppen Àr i processen att skapas och har Ànnu inte börjat arbeta", men att han Àr redo att svara pÄ alla frÄgor och i framtiden kommer att publicera nÀrmaste planer för utvecklingen av Rust inom ramen för hans initiativ för alla intresserade.
Man kan anta att FFI/C Parity-gruppen i första hand kommer att arbeta med att förbÀttra stödet för flertrÄdad programkörning i Rust, implementera stöd för BFLOAT16, ett talformat för flyttal som introducerades i de nya Intel Xeon Scalable-processorerna, samt stabilisera inbÀddning av kod i assembler.
KĂ€lla: 3dnews.ru
