"Rust je prihodnost sistemskega programiranja, C je novi asembler" - govor enega vodilnih Intelovih inženirjev

Na nedavnem srečanju Open Source Technology Summi (OSTS) Josh Triplett, vodilni inženir pri Intelu, je dejal, da je njegovo podjetje zainteresirano, da bi Rust v bližnji prihodnosti dosegel "pariteto" s C, ki je še vedno prevladujoč na področju sistemov in razvoja na nizki ravni. V svojem govoru pod naslovom "Intel in Rust: Prihodnost sistemskega programiranja" je govoril tudi o zgodovini sistemskega programiranja, kako je C postal "privzeti" sistemski programski jezik, katere lastnosti Rusta dajejo prednost pred C-jem in kako v bližnji v prihodnosti bi lahko popolnoma nadomestil C na določenem področju programiranja.

"Rust je prihodnost sistemskega programiranja, C je novi asembler" - govor enega vodilnih Intelovih inženirjev

Sistemsko programiranje je razvoj in upravljanje programske opreme, ki služi kot platforma za ustvarjanje aplikacijskih aplikacij, ki zagotavlja interakcijo slednjih s procesorjem, RAM-om, V/I napravami in omrežno opremo. Sistemska programska oprema ustvari posebno abstrakcijo v obliki vmesnikov, ki vam pomagajo pri ustvarjanju aplikacijske programske opreme, ne da bi se spuščali v podrobnosti delovanja same strojne opreme.

Sam Triplett definira sistemsko programiranje kot "vse, kar ni aplikacija". Vključuje stvari, kot so BIOS, vdelana programska oprema, zagonski nalagalniki in jedra operacijskega sistema, različne vrste vgrajene nizkonivojske kode in implementacije navideznih strojev. Zanimivo je, da Triplett meni, da je spletni brskalnik tudi sistemska programska oprema, saj je brskalnik že zdavnaj presegel "samo program" v lastno "platformo za spletna mesta in spletne aplikacije".

V preteklosti je bila večina sistemskih programov, vključno z BIOS-om, zagonskimi programi in vdelano programsko opremo, napisana v zbirnem jeziku. Poskusi so se začeli v šestdesetih letih prejšnjega stoletja, da bi zagotovili strojno podporo za jezike na visoki ravni, kar je vodilo do jezikov, kot so PL/S, BLISS, BCPL in ALGOL 1960.

Nato je v sedemdesetih letih prejšnjega stoletja Dennis Ritchie ustvaril programski jezik C za operacijski sistem Unix. Ustvarjen v programskem jeziku B, ki ni imel niti podpore za tipkanje, je bil C poln zmogljivih funkcij na visoki ravni, ki so bile najbolj primerne za pisanje operacijskih sistemov in gonilnikov. Več komponent UNIX-a, vključno z njegovim jedrom, je bilo sčasoma prepisanih v C. Kasneje so bili številni drugi sistemski programi, vključno z bazo podatkov Oracle, večino izvorne kode Windows in operacijski sistem Linux, prav tako napisani v C-ju.

C je v tej smeri prejel veliko podporo. Toda kaj točno je spodbudilo razvijalce k temu? Triplett meni, da morajo razvijalci, ki želijo motivirati k prehodu iz enega programskega jezika v drugega, najprej zagotoviti nove funkcije, ne da bi pri tem izgubili stare.

Prvič, jezik mora ponuditi "dovolj impresivne" nove funkcije. »Ne more biti boljši. Biti mora bistveno boljši, da upraviči trud in čas, ki ga inženirji potrebujejo za prehod,« pojasnjuje. V primerjavi z zbirnim jezikom je imel C veliko za ponuditi. Podpiral je nekoliko tipsko varnost, zagotavljal boljšo prenosljivost in zmogljivost s konstrukcijami na visoki ravni ter na splošno ustvaril veliko bolj berljivo kodo.

Drugič, jezik mora zagotavljati podporo za stare funkcije, kar pomeni, da so se razvijalci v zgodovini prehoda na C morali prepričati, da ni nič manj funkcionalen kot zbirni jezik. Triplett pojasnjuje: "Nov jezik ne more biti preprosto boljši, mora biti prav tako dober." Poleg tega, da je bil hitrejši in je podpiral vse tipe podatkov, ki bi jih lahko uporabljal zbirni jezik, je imel C tudi tisto, kar je Triplett imenoval "rešečna loputa", in sicer podporo za vstavljanje kode zbirnega jezika znotraj njega.

"Rust je prihodnost sistemskega programiranja, C je novi asembler" - govor enega vodilnih Intelovih inženirjev

Triplett meni, da C zdaj postaja tisto, kar je bil zbirni jezik pred mnogimi leti. "C je novi sestavljalnik," pravi. Razvijalci zdaj iščejo nov jezik na visoki ravni, ki ne bo samo rešil dolgotrajnih težav C-ja, ki jih ni več mogoče popraviti, ampak bo ponudil tudi vznemirljive nove funkcije. Tak jezik mora biti dovolj prepričljiv, da prisili razvijalce, da preidejo nanj, mora biti varen, zagotavljati samodejno upravljanje pomnilnika in še veliko več.

»Vsak jezik, ki želi biti boljši od C, mora ponuditi veliko več kot zaščito pred prelivanjem medpomnilnika, če resnično želi biti prepričljiva alternativa. Razvijalce zanimata uporabnost in zmogljivost, pisanje kode, ki je samoumevna in opravi več dela v manj vrsticah. Obravnavati je treba tudi varnostna vprašanja. Enostavna uporaba in zmogljivost gresta z roko v roki z njim. Manj kode morate napisati, da nekaj dosežete, manj možnosti imate za napake, povezane ali nepovezane z varnostjo,« pojasnjuje Triplett.

Primerjava Rust in C

Leta 2006 je Graydon Hoare iz Mozille začel pisati Rust kot osebni projekt. In leta 2009 je Mozilla začela sponzorirati razvoj Rusta za lastne potrebe in tudi razširila ekipo za nadaljnji razvoj jezika.

Eden od razlogov, zakaj se je Mozilla zanimala za novi jezik, je ta, da je bil Firefox napisan v več kot 4 milijonih vrstic kode C++ in je imel kar nekaj kritičnih ranljivosti. Rust je bil zgrajen z mislijo na varnost in sočasnost, zaradi česar je popolna izbira za prepis številnih komponent Firefoxa kot del Quantumovega projekta za popolno prenovo arhitekture brskalnika. Mozilla prav tako uporablja Rust za razvoj Servo, mehanizma za upodabljanje HTML, ki bo v prihodnosti nadomestil trenutni mehanizem za upodabljanje Firefoxa. Mnoga druga podjetja so začela uporabljati Rust za svoje projekte, vključno z Microsoftom, Googlom, Facebookom, Amazonom, Dropboxom, Fastlyjem, Chefom, Baidujem in številnimi drugimi.

Rust rešuje enega najpomembnejših problemov jezika C. Ponuja samodejno upravljanje pomnilnika, tako da ga razvijalcem ni treba ročno dodeliti in nato sprostiti za vsak predmet v aplikaciji. Rust se razlikuje od drugih sodobnih jezikov po tem, da nima zbiralnika smeti, ki samodejno odstrani neuporabljene predmete iz pomnilnika, niti nima izvajalnega okolja za izvajanje, kot je Java Runtime Environment for Java. Namesto tega ima Rust koncepte lastništva, izposoje, referenc in življenjske dobe. »Rust ima sistem za razglasitev klicev predmetov, ki vam omogoča, da določite, ali ga lastnik uporablja ali si le izposoja. Če si samo izposodite predmet, bo prevajalnik pazil nanj in zagotovil, da izvirnik ostane na mestu, medtem ko se nanj sklicujete. In Rust bo prav tako zagotovil, da bo objekt odstranjen iz pomnilnika takoj, ko ga bo prenehal uporabljati, in vstavil ustrezen klic v kodo v času prevajanja brez dodatnega časa,« pravi Triplett.

Pomanjkanje domačega izvajalnega okolja lahko štejemo tudi za pozitivno lastnost Rusta. Triplett verjame, da je jezike, ki delujejo z njim, težko uporabiti kot orodje za sistemsko programiranje. Kot pojasnjuje, "morate inicializirati to izvajalno okolje, preden lahko pokličete katero koli kodo, to izvajalno okolje morate uporabiti za klicanje funkcij in samo izvajalno okolje lahko za vašim hrbtom ob nepričakovanih trenutkih izvaja dodatno kodo."

Rust si prav tako prizadeva zagotoviti varno vzporedno programiranje. Iste funkcije, zaradi katerih je varen v pomnilniku, spremljajo stvari, na primer katera nit ima v lasti kateri predmet in kateri predmeti se lahko prenašajo med nitmi in kateri potrebujejo zaklepanje.

Zaradi vseh teh funkcij je Rust dovolj privlačen, da ga razvijalci izberejo kot svoje novo orodje za sistemsko programiranje. Kar zadeva vzporedno računalništvo, pa Rust še vedno rahlo zaostaja za C.

Triplett bo ustanovil posebno delovno skupino, ki bo implementirala potrebne funkcije v Rust, tako da se bo lahko popolnoma izenačil, presegel in nadomestil C na področju sistemskega programiranja. IN tema na redditu, posvečen svojemu govoru, je povedal, da je "skupina FFI/C Parity v procesu nastajanja in še ni začela delati", medtem ko je pripravljen odgovoriti na vsa vprašanja, v prihodnje pa bo zagotovo objavil najbližje načrte za razvoj Rusta v okviru svoje pobude za vse zainteresirane.

Predvidevamo lahko, da se bo skupina FFI / C Parity najprej ukvarjala z izboljšanjem podpore za večnitnost Rust, uvedbo podpore za BFLOAT16, format s plavajočo vejico, ki se je pojavil v novih procesorjih Intel Xeon Scalable, kot tudi stabilizacijo montažne kode vstavitve.



Vir: 3dnews.ru

Dodaj komentar