"Rust is de toekomst van systeemprogrammering, C is de nieuwe assembler" - een toespraak van een van de toonaangevende ingenieurs van Intel

Tijdens de recente Open Source Technology Summi (OSTS) Josh Triplett, een senior ingenieur bij Intel, zei dat zijn bedrijf geïnteresseerd is in het bereiken van “pariteit” met de C-taal die in de nabije toekomst nog steeds systemen en ontwikkeling op laag niveau domineert. In zijn toespraak Onder de titel 'Intel and Rust: The Future of Systems Programming' sprak hij ook over de geschiedenis van systeemprogrammering, hoe C de standaard systeemprogrammeertaal werd, welke kenmerken van Rust het een voordeel geven ten opzichte van C, en hoe het volledig vervang C op dit gebied van programmeren.

"Rust is de toekomst van systeemprogrammering, C is de nieuwe assembler" - een toespraak van een van de toonaangevende ingenieurs van Intel

Systeemprogrammering is de ontwikkeling en het beheer van software die dient als platform voor het creëren van applicatieapplicaties, waarbij ervoor wordt gezorgd dat deze laatste communiceren met de processor, RAM, invoer-/uitvoerapparaten en netwerkapparatuur. Systeemsoftware creëert een speciale abstractie in de vorm van interfaces die helpen bij het creëren van applicatiesoftware zonder zich te verdiepen in de details van hoe de hardware zelf werkt.

Triplett definieert systeemprogrammering zelf als ‘alles wat geen applicatie is’. Het omvat zaken als BIOS, firmware, bootloaders en besturingssysteemkernels, verschillende soorten ingebedde code op laag niveau en implementaties van virtuele machines. Interessant is dat Triplett gelooft dat een webbrowser ook systeemsoftware is, aangezien de browser al lang geleden meer is geworden dan “slechts een programma”, en een op zichzelf staand “platform voor websites en webapplicaties” is geworden.

In het verleden werden de meeste systeemprogramma's, inclusief BIOS, bootloaders en firmware, in assembleertaal geschreven. In de jaren zestig begonnen experimenten met het bieden van hardwareondersteuning voor talen op hoog niveau, wat leidde tot de creatie van talen als PL/S, BLISS, BCPL en ALGOL 1960.

Vervolgens creëerde Dennis Ritchie in de jaren zeventig de programmeertaal C voor het Unix-besturingssysteem. Gemaakt in de programmeertaal B, die niet eens typeondersteuning had, was C gevuld met krachtige functies op hoog niveau die het meest geschikt waren voor het schrijven van besturingssystemen en stuurprogramma's. Verschillende componenten van UNIX, inclusief de kernel, werden uiteindelijk herschreven in C. Vervolgens werden veel andere systeemprogramma's, waaronder de Oracle-database, een groot deel van de Windows-broncode en het Linux-besturingssysteem, ook in C geschreven.

C heeft in deze richting enorme steun gekregen. Maar wat zorgde er precies voor dat ontwikkelaars daarop overstapten? Triplett is van mening dat ontwikkelaars, om ontwikkelaars te motiveren om van de ene naar de andere programmeertaal over te stappen, eerst nieuwe features moeten bieden zonder oude features te verliezen.

Ten eerste moet de taal ‘redelijk indrukwekkende’ nieuwe functies bieden. “Hij kon niet beter zijn. Het moet aanzienlijk beter zijn om de inspanning en de technische tijd die nodig is om de transitie te maken te rechtvaardigen”, legt hij uit. Vergeleken met assembleertaal had C veel te bieden. Het ondersteunde enigszins typeveilig gedrag, zorgde voor betere draagbaarheid en prestaties met constructies op hoog niveau, en genereerde in het algemeen veel beter leesbare code.

Ten tweede moet de taal ondersteuning bieden voor oude functies, wat betekent dat ontwikkelaars er in de geschiedenis van de overgang naar C zeker van moesten zijn dat deze niet minder functioneel was dan assembleertaal. Triplett legt uit: “Een nieuwe taal kan niet alleen beter zijn, maar moet ook net zo goed zijn.” C was niet alleen sneller en ondersteunde elk gegevenstype dat door assembleertaal kon worden gebruikt, maar had ook wat Triplett een "ontsnappingsluik" noemde, namelijk het ondersteunen van het invoegen van assembleertaalcode in zichzelf.

"Rust is de toekomst van systeemprogrammering, C is de nieuwe assembler" - een toespraak van een van de toonaangevende ingenieurs van Intel

Triplett gelooft dat C nu wordt wat assembleertaal vele jaren geleden was. “C is de nieuwe assembler”, verklaart hij. Nu zijn ontwikkelaars op zoek naar een nieuwe taal op hoog niveau die niet alleen de problemen oplost die zich in C hebben opgehoopt en die niet langer kunnen worden opgelost, maar die ook opwindende nieuwe functies biedt. Een dergelijke taal moet overtuigend genoeg zijn om ontwikkelaars ertoe aan te zetten ernaar over te stappen, moet veilig zijn, automatisch geheugenbeheer bieden en nog veel meer.

“Elke taal die beter wil zijn dan C moet veel meer bieden dan alleen bufferoverloopbeveiliging als het echt een overtuigend alternatief wil zijn. Ontwikkelaars zijn geïnteresseerd in bruikbaarheid en prestaties, schrijven code die voor zichzelf spreekt en meer werk doet in minder regels. Ook veiligheidsproblemen moeten worden aangepakt. Gebruiksgemak en prestaties gaan hand in hand. Hoe minder code je hoeft te schrijven om iets te bereiken, hoe minder kans je hebt om fouten te maken, al dan niet op het gebied van beveiliging”, legt Triplett uit.

Vergelijking van Rust en C

In 2006 begon Graydon Hoare, een medewerker van Mozilla, Rust te schrijven als een persoonlijk project. En in 2009 begon Mozilla de ontwikkeling van Rust te sponsoren voor zijn eigen behoeften, en breidde ook het team uit om de taal verder te ontwikkelen.

Een van de redenen waarom Mozilla geïnteresseerd was in de nieuwe taal is dat Firefox in meer dan 4 miljoen regels C++-code is geschreven en nogal wat kritieke kwetsbaarheden bevatte. Rust is gebouwd met het oog op veiligheid en gelijktijdigheid, waardoor het een ideale keuze is voor het herschrijven van veel van Firefox-componenten als onderdeel van het Quantum-project om de architectuur van de browser volledig opnieuw te ontwerpen. Mozilla gebruikt Rust ook om Servo te ontwikkelen, een HTML-rendering-engine die uiteindelijk de huidige Firefox-rendering-engine zal vervangen. Veel andere bedrijven zijn Rust gaan gebruiken voor hun projecten, waaronder Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu en nog veel meer.

Rust lost een van de belangrijkste problemen van de taal C op. Het biedt automatisch geheugenbeheer, zodat ontwikkelaars het niet handmatig hoeven toe te wijzen en vervolgens vrij te maken voor elk object in de applicatie. Wat Rust anders maakt dan andere moderne talen is dat het geen garbage collector heeft die ongebruikte objecten automatisch uit het geheugen verwijdert, en ook niet over de runtime-omgeving beschikt die nodig is om het te laten werken, zoals de Java Runtime Environment voor Java. In plaats daarvan hanteert Rust de concepten van eigendom, lenen, referenties en levensduur. “Rust heeft een systeem waarmee oproepen naar een object worden aangegeven om aan te geven of de eigenaar het gebruikt of alleen maar leent. Als u eenvoudigweg een object leent, houdt de compiler dit bij en zorgt ervoor dat het origineel blijft staan ​​zolang u ernaar verwijst. Rust zorgt er ook voor dat het object uit het geheugen wordt verwijderd zodra het gebruik ervan voltooid is, door tijdens het compileren een overeenkomstige aanroep in de code in te voegen, zonder extra tijd”, zegt Triplett.

Het ontbreken van een native runtime kan ook als een positief kenmerk van Rust worden beschouwd. Triplett is van mening dat de talen waarop het draait moeilijk te gebruiken zijn als systeemprogrammeertools. Hij legt uit: "Je moet deze runtime initialiseren voordat je welke code dan ook kunt aanroepen, je moet deze runtime gebruiken om functies aan te roepen, en de runtime zelf kan op onverwachte momenten achter je rug om extra code uitvoeren."

Rust streeft er ook naar om veilige parallelle programmering te bieden. Dezelfde functies die het geheugen veilig maken, houden zaken bij zoals welke thread eigenaar is van welk object en welke objecten tussen threads kunnen worden doorgegeven en welke een vergrendeling nodig hebben.

Al deze functies maken Rust aantrekkelijk genoeg voor ontwikkelaars om het te kiezen als een nieuw hulpmiddel voor systeemprogrammering. Op het gebied van parallel computergebruik loopt Rust echter nog steeds iets achter op C.

Triplett is van plan een speciale werkgroep op te richten die zich zal concentreren op het introduceren van de noodzakelijke functies in Rust, zodat het C op het gebied van systeemprogrammering volledig kan evenaren, overtreffen en vervangen. IN draadje op Reddit, gewijd aan zijn toespraak, zei hij dat “de FFI/C Parity-groep bezig is met oprichting en nog niet met haar werk is begonnen”, want nu is hij klaar om eventuele vragen te beantwoorden, en in de toekomst zal hij zeker onmiddellijke plannen publiceren voor de ontwikkeling van Rust als onderdeel van zijn initiatief voor alle geïnteresseerde partijen.

Aangenomen kan worden dat de FFI/C Parity-groep zich allereerst zal concentreren op het verbeteren van multi-threading-ondersteuning in Rust, door ondersteuning te introduceren voor BFLOAT16, een floating point-formaat dat is verschenen in de nieuwe Intel Xeon Scalable-processors, en op het stabiliseren van de assemblage code-invoegingen.



Bron: 3dnews.ru

Voeg een reactie