Zašto je Rust najvoljeniji programski jezik među developerima?

Infobip ❤️ Netokracijašta akvizicija znači za vas i za nas?

Zašto je Rust najvoljeniji programski jezik među developerima — razgovor sa programerom

Visoke performanse i bezbednost osobine su zbog kojih su mnogi programeri odlučili da pređu na Rust, a zbog svoje brzine ovaj programski jezik je u stanju da za veoma kratko vreme obradi velike količine podataka.

Prema ovogodišnjoj Stack Overflow analizi, Rust ulazi u sedmu godinu zaredom kao najvoljeniji programski jezik među developerima koji su imali priliku da se sa njim upoznaju, a čak 87% njih izjasnilo se da će nastaviti da ga koristi i u budućnosti.

Međutim, oni koji do sada nisu koristili Rust, mogu se zapitati šta ovaj programski jezik čini toliko posebnim. Na ovo, ali i na mnoga druga pitanja, odgovorio nam je Đorđe Pešić, Rust developer iz kompanije Ethernal.

Za početak, da li možeš da nam kažeš šta je tačno Rust programski jezik i čemu je namenjen? 

Đorđe: Rust je programski jezik opšte namene. Nastao je 2006. godine, kao lični projekat Grejdona Hoarea (Graydon Hoare), inženjera koji je radio u kompaniji Mozilla. Kako je vreme prolazilo, projekat je rastao da bi 2015. godine bila objavljena prva stabilna verzija 1.0.

Rust je vrlo brzo našao primenu u raznim ograncima industrije (blockchain, backend web, embedded, itd).

2021. godine osnovana je Rust fondacija čiji je cilj unapređenje ovog programskog jezika koji je u međuvremenu izazvao veliko interesovanje u svetu developera. Trenutno, Rust najviše koriste veliki cloud provajderi kao što je Amazon Web Services (AWS), a u okviru industrije vizualnih efekata i cyber bezbednosti. 

Rust fondacija konstantno povećava broj uticajnih članova, te su joj se pored Mozille i AWS-a, pridružili i tehnološki giganti kao što su Google, Meta, Microsoft, Arm i Huawei. 

Kako si odlučio da izučavaš baš ovaj programski jezik?

Đorđe: Od početka svoje karijere, pre nešto više od sedam godina, bavio sam se embedded C i C++ programiranjem. U poslednje dve godine, posao se sveo samo na C, pa sam u jednom krenuo da razmišljam o daljoj budućnosti, i zaključio sam da ne želim više da se bavim C-om.

U međuvremenu, C++ je dosta uznapredovao, što nisam ispratio. U istom trenutku se desilo da sam pričao sa kolegom koji se bavi Rust-om, i on mi je predstavio svoj posao. Nakon kratkog pregleda jezika i tržišta, Rust mi se učinio kao odlična alternativa za C i C++, kao i način da promenim domen, što dolazi kao osveženje u karijeri i proširivanje znanja i vidika.

Odlučio sam da pređem u blockchain domen, jer se u njemu Rust najviše koristi i, kako kaže statistika, veoma je tražen. Nakon kraćeg upoznavanja sa samim jezikom i blockchain tehnologijom, dobio sam priliku i da promenim posao i da počnem da radim u novoj oblasti.

Još jedan razlog da se odlučim za Rust je njegova ekspanzija u različite oblasti, što daje velike naznake da jezik neće zamreti, nego će nastaviti da se širi. Štaviše, počinje da se koristi i u embbedded programiranju, ali ta tranzicija je značajno sporija od ostalih, pa nisam želeo da čekam. Blockchain je veoma dinamična i izazovna oblast za učenje što mi donosi osveženje i motivaciju za daljim radom.

Na Elektrotehničkom fakultetu završio si osnovne, a potom i master studije. Da li ti je fakultet pružio predznanja iz oblasti Rust programiranja?

Đorđe: Nije. Na ETF-u se Rust ne izučava, a možda će se u budućnosti to promeniti.

Koje prednosti Rust nudi u odnosu na tri najpopularnija programska jezika: Python, C++ i Java?

Đorđe: Sa Pythonom ga ne bih poredio zato što to nisu programski jezici istog tipa. Python je interpretirani jezik, dinamički tipiziran, dok je Rust kompajliran, statički tipiziran jezik. Python ima druge domene upotrebe, koji ne spadaju u oblast mog interesovanja.

Što se tiče Jave, Rust i Java mogu biti konkurenti. Java ima prednost što ima integrisane elemente sa kojima se može razvijati grafički korisnički interfejs (GUI), dok Rust još uvek nema zvaničnu podršku za GUI. Po pitanju brzine, Rust je dominantan u odnosu na Javu.

Prema ovogodišnjem Stack Overflow istraživanju, Rust je najvoljeniji programski jezik među ispitanicima koji su imali priliku da ga upoznaju.

Što se tiče C++, on je od tradicionalnih jezika najjači konkurent Rust-u. Oba jezika imaju visok nivo apstrakcije i odlične performanse, oba se kompajliraju za konkretnu arhitekturu i performanse su dosta slične. Rust je bolji od C++ zato što je pisanje bezbednog koda uslovljeno dizajnom jezika, čime se otklanja mnoštvo bagova koji su standardno prisutni u C++ programima (loša upotreba memorije, bagovi u konkurentnim i distribuiranim programima, itd).

Mehanizmi koji su uvedeni u Rust da bi se ovo postiglo smanjuju fleksibilnost samog pisanja programa u odnosu na C++ (programer ne može baš da piše šta mu padne na pamet), ali to je mala cena za izbegavanje bagova, koji bi se inače jako teško reprodukovali i otklanjali.

U okviru ovog pitanja, pomenuo bih i C programski jezik. C je jezik niskog nivoa i još uvek dominira u embedded sistemima, pogotovo tamo gde su performanse kritične i resursi izuzetno ograničeni. Međutim, performanse Rust programa u potpunosti odgovaraju performansama C programa, s tim što je Rust kod daleko bezbedniji od C koda. U Rust-u se takođe mogu pisati programi za embedded sisteme, a sama činjenica da Rust polako ulazi u Linux kernel i u niske slojeve Android OS-a, govori sama za sebe.

Ne bih se usudio da kažem da će C i C++ izaći iz upotrebe zbog Rust-a, prvo zato što postoje jako dugo i što je mnogo softvera već napisano u ova dva jezika, a onda i zato što je C++ u aktivnom razvoju (za sada, nove verzije izlaze na svake dve godine, počev od 2011-te). Ali, u budućnosti Rust predstavlja izuzetno privlačnu alternativu.

Da li ti je bilo neophodno znanje iz nekog od navedenih programskih jezika da bi se upustio u izučavanje Rust-a?

Đorđe: Znanje C i C++ jezika bilo je izuzetno korisno i olakšalo je učenje. Ne bih rekao da je neophodno, ali smatram da je učenje Rust-a kao prvog programskog jezika prilično izazovan zadatak i daleko je lakše naučiti Rust ako se već zna neki drugi programski jezik kao i osnovni principi programiranja.

Rust nudi veću zaštitu podataka u odnosu na konkurentne jezike. Na koji način?

Đorđe: Način na koji Rust pruža zaštitu podataka je nešto što je jedinstveno za Rust. Da bi lakše objasnio, napraviću prvo osvrt na dva osnovna uslova korišćenja memorije u mainstream jezicima:

  • Memorija se oslobađa onda kada to programer želi. Ovako programer ima kontrolu nad memorijom, kao i odgovornost za pravilnu upotrebu. 
  • Nakon oslobađanja memorije, pokazivači na oslobođenu memoriju se više nikada ne smeju koristiti.

U ispunjavanju ovih uslova, jezici se obično svrstavaju u dve kategorije.

  • Bezbednost na prvom mestu: Ovde spadaju skoro svi moderni jezici (Python, JavaScript, Java, C#, i mnogi drugi) i oni koriste garbage collector za vođenje računa o memoriji, čime se programer lišava te odgovornosti. Cena za ovo su nešto lošije performanse, zato što je garbage collector poseban program koji uzima određene resurse računara, kao i nemanje kontrole nad memorijom. 
  • Kontrola na prvom mestu: Suprotan princip od prethodnog. Programeru se daje sva kontrola nad upravljanjem memorijom, čime se postižu bolje performanse, ali se i sva odgovornost za pravilnu upotrebu memorije ostavlja programeru. Ovde spadaju samo C i C++ od modernih jezika.

Dizajneri Rust-a bili su u situaciji da nijedan od gore navedenih kompromisa ne dolazi u obzir, jer su želeli da Rust bude i bezbedan i performativan, stoga su morali da unesu promene u nekim fundamentalnim principima.

Rešenje je jedinstveno za Rust i zapravo predstavlja glavni izazov prilikom učenja. To rešenje su restrikcije u upotrebi pokazivača. Uveden je čitav niz pravila koji ograničavaju programera, ali vode ka tome da kompajler garantuje ispravnu upotrebu memorije.

Rezultat je bezbedan kod, kome su očuvane performanse. Pokušaću da dam osnovni prikaz ovih pravila.

Prvo pravilo je da je svo oslobađanje memorije vezano za scope(doseg) važenja. Memorija koje je alocirana za neku promenljivu na apsolutno bilo koji način, biće oslobođena nakon izlaska iz opsega važenja promenljive vezane za tu memoriju. Ovim se izbacuje potreba za garbage collectorom i potreba da programer ručno oslobađa memoriju, iako mu je ta mogućnost ostavljena. 

Dalje, uvedeni su koncepti vlasništva (ownership) i provere pozajmljivanje (borrow checker).

Rust nudi bezbedan kod, očuvanih performansi.

Ilustrovaću ih na jednostavnim primerima.

let a=String::from(“Test”).

Promenljiva a ukazuje na, i postaje vlasnik stringa “Test”, koji je alociran u memoriji.

let b=a

Adresa stringa test se pomera u promenljivu b, čime promenljiva b postaje novi vlasnik stringa “Test”, dok promenljiva a postalje nevalidna, i više se kao takva ne može koristiti.

let c=a

Ova linija koda nije validna.

Borrow checkeer prati tokove upotrebe promenljivih i ako detektuje potencijalno nepravilnu upotrebu, program se neće kompajlirati. Jednostavan primer:

let x = vec![10, 20, 30]; // Niz brojeva, alociran u memoriji, čija se adresa nalazi u promenljivoj x.

if c {

f(x); // … promenljiva x se pomera u funkciju f, ona postaje novi vlasnik.

} else {

g(x); // … promenljiva x se pomera u funkciju g, ona postaje novi vlasnik.

}

h(x); // Nevalidno: promenljiva x je bila pomerena u neku od ove dve funkcije i više se ne može koristiti.

Primer kada će gore navedeni segment biti validan:

let x = vec![10, 20, 30]; // Niz brojeva.

if c {

f(&x); // … promenljiva x se pozajmljuje funkciji f.

} else {

g(&x); // … promenljiva x se pozajmljuje funkciji g.

}

h(x);// Segment je sada validan, jer je sve vreme promeljiva x ostala u vlasništvu ovog segmenta.

Još jedna veoma bitna osobina Rusta je multiple reader-single writer pristup memoriji preko pokazivača. Kompajler ne dozvoljava da se koristi više od jednog pokazivača na memoriju, u koju je dozvoljeno upisivanje.

Za memoriju iz koje je moguće samo čitanje, moguće je korišćenje više pokazivača za čitanje, ali nije moguće napraviti pokazivač preko koga bi se pisalo. Na ovaj način su eliminisana čitava klasa problema koja prati korišćenje podataka u konkurentnom programiranju.

Rust je u nekim aspektima čak 3 puta brži od Jave. Koji su to faktori koji utiču na brzinu ovog programskog jezika?

Đorđe: Zato što se Rust kompajlira direktno za konkretnu arhitekturu procesora, ne zahteva virtuelnu mašinu i nema garbage collector, dok se Java kompajlira u bajtkod, zahteva virtualnu mašinu (JVM) i ima garbage collector.

I za kraj, zašto misliš da su se tehnološki giganti priključili Rust fondaciji?

Đorđe: Moja pretpostavka je da oni koji koriste Rust, koriste ga zbog odličnih performansi, bezbednosti koda, manje podložnosti bagovima, kao i visokog nivoa apstrakcije koji ovaj programski jezik pruža.


Želiš da podeliš svoje mišljenje o ovoj temi? Komentari su otvoreni na našoj Facebook i LinkedIn stranici!

Popularno

Web 3.0

Da li je krah FTX-a ‘smrtni udarac’ za kripto ekosistem?

Dok se Web2 bavi akvizicijom Twittera, sa druge stranice svedoci smo jedne od najvećih kriza koje su pogodile Web3. U velikoj analizi otkrivamo kako će se propast druge najveće kripto menjačnice odraziti na čitavu industriju.

Upoznajte poslodavce

Zašto je Smallpdf uveo 16 nedelja plaćenog odsustva za novopočene tate?

Da li ste nekada čuli za termin 'paternity leave' i da li znate šta on tačno podrazumeva? Odgovor na ovo pitanje potražili smo u razgovoru sa Ivom Marinković iz kompanije Smallpdf koja je ovaj benefit nedavno omogućila svojim zaposlenima.

Novost

Prevara, laži i romansa na radnom mestu: Šta znamo o SBF i propasti FTX-a?

Kripto kriza se neumoljivo nastavlja, a mi vam donosimo najnovije vesti o FTX kolapsu i potencijalnim posledicama koje on može ostaviti na svetsku ekonomiju.

Propustili ste

Karijere

Microsoft i LinkedIn objavili online kurseve digitalnih veština za 10 miliona ljudi koji traže posao

Kompanija Microsoft ima plan da u saradnji s LinkedIn-om do 2025. godine obezbedi obuke i kurseve za 10 miliona ljudi i na taj način im omogući da steknu veštine i sertifikate koji će im pomoći u pronalaženju poslova.

Intervju

Razgovori sa seniorima: Kako je Tamara od studija psihologije došla do seniorske pozicije u ‘game dev’ industriji

Igranje modernih video igara uvek je u meni izazivalo dozu interesovanja o tome kako zapravo nastaju ovako veliki projekti. Do sada smo imali priliku da često pišemo o tome, pa i nastavljamo u tom smeru kroz razgovor sa Tamarom Perić koja je Lead Game Designer u regionalnoj kompaniji Mad Head Games.

Sponzorisano

Razvoj samouslužnih bankarskih alata kao odgovor na promene navika klijenata?

Korisnici bankarskih usluga sve više zahtevaju samostalnost u radu, bez obaveze odlaska u ekspozituru. Tendencije idu ka tome da će ekspozitura ostati dominantan kanal za nešto kompleksnije bankarske proizvode, kao i mesto gde će klijenti pretežno vršiti konsultacije sa bankarskim službenikom.

Office Talks Podcast

Kako od nule napraviti mobilnu aplikaciju za vaš proizvod? (Smallpdf)

U 120. epizodi Office Talks podkasta imali smo priliku da ugostimo Željka Ilića i Ivana Milisavljevića iz kompanije Smallpdf. Sa njima smo razgovarali o proizvodima, radu na mobilnim aplikacijama i kompanijskoj kulturi.

Tehnologija

DaFED #58: Kako na efikasan način podići performanse i optimizovati web sajt

Oslobodite vaše kalendare, jer je 58. DaFED događaj zakazan za četvrtak 8. decembra s početkokm od 18 časova, u Amfiteatru centralne zgrade Univerziteta u Novom Sadu.

Upoznajte poslodavce

Kako je Ananas postao startap unutar korporacije i okupio internacionalni tim sa iskustvom iz Amazona i Gugla?

Kako izgleda razvoj jednog od najambicioznijih e-commerce projekata u regionu? Koliko ljudi radi na developmentu i kako su oni organizovani? Odgovor na ovo pitanje potražili smo u razgovoru sa Belom Klašnjom, CTO kompanije Ananas koja stoji iza istoimene web prodavnice.