«Rust este viitorul programării de sistem, C este noul Assembler» — discursul unuia dintre inginerii de frunte de la Intel

La recentă Conferință privind Tehnologiile cu Surse Deschise (Open Source Technology Summit - OSTS) Josh Triplett, inginer principal la Intel, a vorbit despre interesul companiei sale de a ajunge în curând la un „paritate” cu limbajul C, care continuă să fie dominant în dezvoltarea sistemică și la nivel de bază. În discursul său intitulat „Intel și Rust: viitorul programării sistemice”, el a discutat despre istoria programării sistemice, despre cum C a devenit limbajul „implicit” pentru programarea sistemică, ce oportunități oferă Rust pentru a avea un avantaj față de C și cum ar putea în viitor să înlocuiască C în această domeniu de programare.

«Rust este viitorul programării de sistem, C este noul Assembler» — discursul unuia dintre inginerii de frunte de la Intel

Programarea sistemică este dezvoltarea și gestionarea software-ului care servește ca platformă pentru crearea aplicațiilor, asigurând interacțiunea acestora cu procesorul, memoria RAM, dispozitivele de intrare- ieșire și echipamentele de rețea. Software-ul de sistem creează o abstrare specială sub forma interfețelor, care ajută la dezvoltarea aplicațiilor fără a intra în detalii despre modul în care funcționează efectiv „hardware-ul”.

Însuși Triplett definește programarea sistemică ca „tot ceea ce nu este o aplicație”. Aceasta include lucruri precum BIOS, firmware, încărcătoare și nuclee de sisteme de operare, diferite tipuri de cod încorporat la nivel de bază, precum și implementări ale mașinilor virtuale. Interesant este că Triplett consideră că un browser web este de asemenea un software de sistem, deoarece browserul a evoluat într-o „platformă pentru site-uri web și aplicații web”.

În trecut, majoritatea programelor de sistem, inclusiv BIOS, încărcătoare și firmware, erau scrise în limbaj de asamblare. În anii 1960 au început experimentele pentru a oferi suport hardware pentru limbaje de nivel înalt, ceea ce a dus la crearea unor limbaje precum PL/S, BLISS, BCPL și ALGOL 68.

Apoi, în anii 1970, Dennis Ritchie a creat limbajul de programare C pentru sistemul de operare Unix. Creat pe baza limbajului de programare B, care nu avea nici măcar suport pentru tipuri de date, C a fost îmbogățit cu funcții avansate care erau cel mai bine adaptate pentru scrierea de sisteme de operare și drivere. Mai multe componente ale UNIX-ului, inclusiv nucleul său, au fost în cele din urmă rescrise în C. Ulterior, multe alte programe de sistem, inclusiv baza de date Oracle, o mare parte din codul sursă al Windows și sistemul de operare Linux, au fost, de asemenea, scrise în C.

C a primit un suport uriaș în această direcție. Dar ce anume a determinat dezvoltatorii să treacă la el? Triplet consideră că, pentru a motiva dezvoltatorii să schimbe un limbaj de programare cu altul, noul limbaj trebuie mai întâi să ofere funcții noi fără a pierde vechile capacități.

În primul rând, limbajul trebuie să ofere „funcții noi suficient de impresionante”. „Nu poate fi doar puțin mai bun. Trebuie să fie semnificativ mai bun pentru a justifica efortul și timpul inginerilor necesar pentru tranziție”, explică el. Comparativ cu limbajul de asamblare, C avea multe lucruri de oferit. Susținea într-o oarecare măsură tipizarea sigură, oferea o portabilitate și o performanță mai bune prin construcții de nivel înalt și genera, în general, un cod mult mai ușor de citit.

În al doilea rând, limbajul trebuie să ofere suport pentru vechile capacități, ceea ce înseamnă că, în povestea tranziției la C, dezvoltatorii trebuiau să fie siguri că este la fel de funcțional ca limbajul de asamblare. Triplet explică: „Un nou limbaj nu poate fi doar mai bun, el trebuie de asemenea să nu fie mai rău”. Pe lângă faptul că C era mai rapid și susținea orice tipuri de date pe care le putea folosi limbajul de asamblare, avea, de asemenea, ceea ce Triplet a numit „panta de urgență”, adică susținea inserții de cod în limbaj de asamblare.

«Rust este viitorul programării de sistem, C este noul Assembler» — discursul unuia dintre inginerii de frunte de la Intel

Triplet consideră că C devine acum ceea ce fusese limbajul de asamblare cu mulți ani în urmă. „C este un nou Assembler”, declară el. Acum dezvoltatorii caută un nou limbaj de nivel înalt care nu doar să rezolve problemele acumulate în C, imposibil de corectat acum, ci și să ofere noi și impresionante oportunități. Un astfel de limbaj trebuie să fie suficient de convingător pentru a-i determina pe dezvoltatori să treacă la el, să fie sigur, să asigure gestionarea automată a memoriei și multe altele.

„Orice limbaj care vrea să fie mai bun decât C trebuie să ofere mult mai mult decât simpla protecție împotriva depășirii buffer-ului, dacă vrea într-adevăr să devină o alternativă convingătoare. Dezvoltatorii sunt interesați de ușurința de utilizare și performanță, de scrierea codului care nu necesită explicații și care face mai multă muncă cu un număr mai mic de linii. Este, de asemenea, necesar să se rezolve problemele de securitate. Ușurința de utilizare și performanța sunt indisolubile. Cu cât trebuie să scrii mai puțin cod pentru a obține ceva, cu atât ai mai puține șanse să faci greșeli legate de securitate sau altele”, explică Triplet.

Compararea Rust și C

Încă din 2006, Graydon Hoare, un angajat al Mozilla, a început să scrie Rust ca un proiect personal. Iar în 2009, Mozilla a început să sprijine dezvoltarea Rust pentru nevoile sale proprii și a extins echipa pentru a continua dezvoltarea limbajului.

Una dintre motivele pentru care Mozilla a fost interesată de un nou limbaj este că Firefox a fost scris cu mai mult de 4 milioane de linii de cod C++ și avea destul de multe vulnerabilități critice. Rust a fost creat având în vedere cerințele de securitate și paralelism, ceea ce îl face o alegere ideală pentru rescrierea multor componente Firefox în cadrul proiectului Quantum de rearchitecturare completă a browserului. De asemenea, Mozilla folosește Rust pentru dezvoltarea Servo, motorul de redare HTML care în viitor va înlocui motorul de redare actual al Firefox. Multe alte companii au început să utilizeze Rust pentru proiectele lor, inclusiv Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu și multe altele.

Rust rezolvă una dintre cele mai importante probleme ale limbajului C. Oferă gestionare automată a memoriei, astfel încât dezvoltatorii să nu fie nevoiți să aloce și apoi să elibereze manual memorie pentru fiecare obiect din aplicație. Ceea ce îl deosebește pe Rust de alte limbaje moderne este că nu are un colector de gunoi care să elimine automat din memorie obiectele neutilizate, precum și un mediu de rulare necesar pentru a funcționa, cum ar fi Java Runtime Environment pentru Java. În schimb, Rust are concepte de proprietate, împrumut, referințe și timp de viață. „În Rust există un sistem de declarare a apelurilor de obiect, care indică dacă este utilizat de proprietar sau este doar un împrumut. Dacă îl împrumuți pur și simplu, compilatorul va urmări acest lucru și va garanta că originalul rămâne în loc, atâta timp cât te referi la el. De asemenea, Rust se va asigura că obiectul va fi eliminat din memorie imediat ce utilizarea sa s-a încheiat, inserând apelul corespunzător în cod în timpul compilării, fără costuri suplimentare de timp”, explică Triplett.

Absența unui mediu de rulare propriu poate fi considerată, de asemenea, un aspect pozitiv al Rust. Triplett consideră că limbajele care rulează cu ajutorul său sunt greu de utilizat ca instrumente pentru programarea de sistem. Așa cum explică el: „Trebuie să inițializezi acest mediu de rulare înainte de a putea apela orice cod, trebuie să folosești acest mediu pentru a apela funcții, iar mediu de rulare poate rula cod suplimentar pe fundal într-un mod neașteptat.”

De asemenea, Rust își propune să asigure programarea paralelă sigură. Aceleași funcții care îl fac sigur pentru memorie urmăresc lucruri precum cui aparține un obiect și ce obiecte pot fi transferate între fire, iar care necesită blocare.

Toate aceste funcții fac ca Rust să fie suficient de convingător pentru ca dezvoltatorii să-l aleagă ca nou instrument pentru programarea de sistem. Cu toate acestea, din perspectiva calculului paralel, Rust încă rămâne puțin în urmă în comparație cu C.

Triplet se pregătește să formeze un grup de lucru special care se va ocupa de implementarea funcțiilor necesare în Rust, astfel încât acesta să poată rivaliza, depăși și înlocui C în domeniul programării de sistem. În tema de pe Reddit, dedicată prezentării sale, el a declarat că „grupul FFI/C Parity este în proces de formare și încă nu a început lucrul”, deocamdată este pregătit să răspundă la orice întrebări, iar în viitor va publica cu siguranță planurile sale imediate pentru dezvoltarea Rust în cadrul inițiativei sale pentru toți cei interesați.

Se poate presupune că, în primul rând, grupul FFI/C Parity se va ocupa de îmbunătățirea suportului pentru programarea pe mai multe fire în Rust, implementarea suportului pentru BFLOAT16, un format de reprezentare a numerelor cu virgulă mobilă care a apărut în noile procesoare Intel Xeon Scalable, precum și stabilizarea inserțiilor de cod în Assembler.



Sursa: 3dnews.ru
Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster