Tijdens de onlangs gehouden Open Source Technology Summit (OSTS)Ā , hoofdingenieur bij Intel, verklaarde dat zijn bedrijf geĆÆnteresseerd is in het bereiken van 'pariteit' voor Rust met de nog steeds dominante programmeertaal C in het domein van systeem- en laag-niveau ontwikkeling. met de titel 'Intel en Rust: de toekomst van systeemprogrammering' sprak hij ook over de geschiedenis van systeemprogrammering, hoe C de standaard programmeertaal voor systeemprogrammering werd, welke voordelen Rust biedt ten opzichte van C, en hoe het in de nabije toekomst C in dit domein kan vervangen.

Systeemprogrammering is de ontwikkeling en het beheer van software die fungeert als het platform voor de creatie van applicaties, waarbij interactie wordt geboden met de processor, het RAM, invoerapparaten en netwerkinfrastructuur. Systeemsoftware creƫert een specifieke abstractie in de vorm van interfaces die helpen bij de ontwikkeling van applicaties zonder in detail te hoeven duiken in hoe de 'hardware' werkt.
Triplett zelf definieert systeemprogrammering als 'alles wat geen applicatie is'. Dit omvat zaken zoals BIOS, firmware, bootloaders en besturingssysteemkernen, verschillende soorten embedded low-level code en implementaties van virtuele machines. Interessant is dat Triplett vindt dat een webbrowser ook systeemsoftware is, aangezien de browser inmiddels veel meer is geworden dan 'slechts een programma', en is geƫvolueerd naar een zelfstandige 'platform voor websites en webapplicaties'.
In het verleden werd het merendeel van de systeemsoftware, waaronder BIOS, bootloaders en firmware, geschreven in assemblytaal. In de jaren 60 werden experimenten gestart om hardware-ondersteuning voor hogere programmeertalen te bieden, wat leidde tot de creatie van talen zoals PL/S, BLISS, BCPL en ALGOL 68.
In de jaren '70 creƫerde Dennis Ritchie de programmeertaal C voor het besturingssysteem Unix. Gebouwd op de programmeertaal B, die zelfs geen typeondersteuning had, was C gevuld met krachtige high-level functies die bij uitstek geschikt waren voor het schrijven van besturingssystemen en stuurprogramma's. Verschillende componenten van UNIX, waaronder de kern, werden uiteindelijk herschreven in C. Verder zijn veel andere systeemprogramma's, waaronder de Oracle-database, het grootste deel van de Windows-broncode en het besturingssysteem Linux, ook in C geschreven.
C kreeg enorme ondersteuning in deze richting. Maar wat heeft ontwikkelaars ertoe aangezet over te stappen? Triplett gelooft dat om ontwikkelaars te motiveren van de ene programmeertaal naar de andere over te stappen, de laatste vooral nieuwe functies moet bieden zonder oude mogelijkheden te verliezen.
Ten eerste moet de taal "indrukwekkende" nieuwe functies bieden. "Het kan niet een beetje beter zijn. Het moet aanzienlijk beter zijn om de inspanning en de tijd van ingenieurs die nodig zijn voor de overstap te verantwoorden," legt hij uit. In vergelijking met assembler bood C veel dingen die het kon bieden. Het ondersteunde tot op zekere hoogte veilige typisering, zorgde voor betere draagbaarheid en prestaties met high-level constructies en genereerde over het algemeen veel beter leesbare code.
Ten tweede moet de taal ondersteuning bieden voor oude mogelijkheden, wat betekent dat ontwikkelaars bij de overstap naar C moesten weten dat het niet minder functioneel was dan assembler. Triplett legt uit: "Een nieuwe taal kan niet alleen beter zijn, hij moet ook niet slechter zijn." Naast het feit dat C sneller was en alle gegevenstypen ondersteunde die assembler kon gebruiken, had het ook wat Triplett een "noodluik" noemde, wat betekende dat het de mogelijkheid ondersteunde om wat code in assembler in te voegen.

Triplet denkt dat C nu wordt wat de programmeertaal Assembly vele jaren geleden was. "C is de nieuwe Assembly", stelt hij. Ontwikkelaars zijn nu op zoek naar een nieuwe programmeertaal van hoge kwaliteit die niet alleen de problemen oplost die in C zijn ontstaan en die niet langer kunnen worden gerepareerd, maar ook nieuwe indrukwekkende mogelijkheden biedt. Een dergelijke taal moet overtuigend genoeg zijn om ontwikkelaars te overtuigen om over te stappen, moet veilig zijn, automatische geheugenbeheer bieden en nog veel meer.
"Elke taal die beter wil zijn dan C, moet veel meer bieden dan alleen bescherming tegen buffer overflow, als het echt een overtuigend alternatief wil worden. Ontwikkelaars zijn geĆÆnteresseerd in gebruiksgemak en prestaties, in het schrijven van code die geen uitleg nodig heeft en meer werk doet met minder regels. Het is ook noodzakelijk om veiligheidsproblemen aan te pakken. Gebruiksgemak en prestaties zijn onlosmakelijk met elkaar verbonden. Hoe minder code je moet schrijven om iets te bereiken, hoe minder kans je hebt om veiligheidsfouten te maken," legt Triplet uit.
Vergelijking van Rust en C
Al in 2006 begon Graydon Hoare, een medewerker van Mozilla, Rust te schrijven als een persoonlijk project. In 2009 begon Mozilla de ontwikkeling van Rust te sponsoren voor zijn eigen behoeften en breidde ook het team uit voor verdere ontwikkeling van de taal.
Een van de redenen waarom Mozilla geĆÆnteresseerd was in een nieuwe taal, is dat Firefox was geschreven in meer dan 4 miljoen regels C++ code en veel kritieke kwetsbaarheden had. Rust is ontwikkeld met veiligheid en parallelisme in gedachten, wat het een ideale keuze maakt voor het herschrijven van veel componenten van Firefox als onderdeel van het Quantum-project voor een volledige herarchitecturering van de browser. Ook gebruikt Mozilla Rust voor de ontwikkeling van Servo, de HTML-rendering engine die in de toekomst de huidige rendering engine van Firefox zal vervangen. Veel andere bedrijven zijn begonnen met het gebruik van Rust voor hun projecten, waaronder Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu en vele anderen.
Rust lost een van de belangrijkste problemen van de C-taal op. Het biedt automatisch geheugenbeheer, zodat ontwikkelaars niet handmatig geheugen voor elk object in de applicatie hoeven toe te wijzen en vervolgens vrij te geven. Wat Rust onderscheidt van andere moderne talen is dat het geen garbage collector heeft die automatisch ongebruikte objecten uit het geheugen verwijdert, noch een runtime-omgeving die nodig is voor de werking, zoals de Java Runtime Environment voor Java. In plaats daarvan heeft Rust concepten van eigendom, lenen, referenties en levensduur. "Rust heeft een systeem voor het verklaren van objectaanroepen, waarmee kan worden aangegeven of het eigendom of slechts een lening is. Als je een object alleen leent, houdt de compiler dit in de gaten en zorgt ervoor dat het origineel op zijn plaats blijft terwijl je ernaar verwijst. Bovendien zorgt Rust ervoor dat het object onmiddellijk uit het geheugen wordt verwijderd zodra het gebruik ervan is voltooid, door tijdens de compilatie de juiste aanroep in de code in te voegen zonder extra tijdskosten," zegt Triplett.
Het ontbreken van een eigen runtime-omgeving kan ook als een positief kenmerk van Rust worden beschouwd. Triplett gelooft dat talen die hiermee worden uitgevoerd moeilijk te gebruiken zijn als hulpmiddel voor systeemprogrammering. Zoals hij uitlegt: "Je moet deze runtime-omgeving initialiseren voordat je enige code kunt aanroepen, je moet deze runtime-omgeving gebruiken om functies aan te roepen, en de runtime-omgeving kan op onverwachte momenten extra code achter je rug uitvoeren."
Rust streeft er ook naar om veilig parallel programmeren te garanderen. Dezelfde functies die het veilig maken voor geheugen, volgen zaken zoals welke thread bij welk object behoort en welke objecten tussen threads kunnen worden doorgegeven en welke geblokkeerd moeten worden.
Al deze functies maken Rust behoorlijk overtuigend, zodat ontwikkelaars het kunnen kiezen als een nieuw hulpmiddel voor systeemprogrammering. Echter, vanuit het perspectief van parallelle computing loopt Rust nog een beetje achter op C.
Triplet is planning to create a special working group that will focus on implementing necessary features in Rust so that it can fully match, surpass, and replace C in the field of systems programming. In , dedicated to his presentation, he mentioned that "the FFI/C Parity group is in the process of being established and has not yet started working," and for now, he is ready to answer any questions, while he will definitely publish the upcoming plans for the development of Rust within his initiative for all interested parties in the future.
It can be assumed that the FFI/C Parity group will first focus on improving multithreading support in Rust, implementing support for BFLOAT16, a format for representing floating-point numbers that has emerged in the new Intel Xeon Scalable processors, as well as stabilizing code inserts in Assembly.
Bron: 3dnews.ru
