Mnogi softverski projekti se pojavljuju zato što je – negde tamo – programer morao da reši neki svoj lični problem.
To je manje-više ono što se dogodilo Grejdonu Houru. Davne 2006. godine, Hour je bio 29-godišnji programer koji je radio za Mozilu. Vraćajući se kući s posla otkrio je da lift u njegovoj zgradi nije u funkciji; softver je prestao da radi i to nije bio prvi put.
Hour je živeo na 21. spratu i dok se penjao uz stepenice, pomislio je kako to nema smisla. “Kako to da programeri ne mogu da naprave softver za lift koji se neće kvariti”, prolazilo mu je kroz misli. Hour je znao da su mnogi takvi kvarovi posledica problema sa načinom na koji određeni program koristi memoriju.
Napisao program da bi rešio sebi problem
Softver u, ovom slučaju, liftovima često je napisan na jezicima poput C++ ili C, koji su poznati po tome što omogućavaju programerima da pišu kod koji radi veoma brzo i prilično je kompaktan. Problem je u tome što su ti jezici takođe skloni memorijskim greškama koje mogu da sruše ceo program.
Većina nas, kada bismo bili u situaciji da moramo da se penjemo do 21. sprata, jednostavno bismo se razbesneli i to bi ostalo na tome. Ali Hour je odlučio da uradi nešto po tom pitanju. Otvorio je svoj laptop i počeo da dizajnira novi kompjuterski jezik, za koji će nadao da će omogućiti pisanje manjeg, brzog koda bez memorijskih grešaka. Taj jezik je nazvao Rust, po grupi izuzetno izdržljivih gljiva koje su, kako sam kaže, “dizajnirane za preživljavanje”.
Kako biste shvatili zašto je Rust toliko koristan, vredi zaviriti ispod haube u to kako se programski jezici bave računarskom memorijom.
Možete, vrlo grubo, zamisliti dinamičku memoriju u računaru kao školsku tablu. Kako deo softvera radi, on stalno upisuje male delove podataka na tablu, prati koji se gde nalazi i briše ih kada više nisu potrebni. Međutim, različiti računarski jezici to rade na različite načine. Stariji jezici kao što su C ili C++ su dizajnirani da programeru pruže kontrolu nad tim kada i kako softver koristi tablu. Ta moć je korisna: sa tom kontrolom nad dinamičkom memorijom, programer može pokrenuti softver veoma brzo.
Zbog toga se C i C++ često koriste za pisanje koda koji je u direktnoj interakciji sa hardverom. Mašine koje nemaju operativni sistem kao što su Windows ili Linux, od mašina za dijalizu do kasa u prodavnicama, rade na takvom kodu.
Ali, koliko god da su brzi, jezici kao što su C i C++ zahtevaju kompromis. Programeri moraju pažljivo da prate u šta se memorija upisuje i kada softver treba da je izbriše. Šta ako slučajno zaboravite da izbrišete nešto? Pa, možete izazvati pad: softver kasnije može pokušati da iskoristi prostor u memoriji za koji misli da je prazan kada tamo zapravo nečega ima. Ili biste digitalnom uljezu dali ulaz u vaš sistem. Haker bi mogao da primeti da program ne čisti svoju memoriju kako treba - informacije koje je trebalo da budu obrisane (lozinke, finansijske informacije) su se možda zadržale i haker bi mogao da ih ukrade. Kako deo C ili C++ koda postaje sve veći i veći, moguće je da čak i najpažljiviji programer napravi mnogo grešaka u memoriji.
Tokom 90-ih, novi jezici kao što su Java, JavaScript i Python postali su popularni. Kako bi rešili probleme programera, oni su automatski upravljali memorijom koristeći “sakupljače smeća”, komponente koje bi povremeno čistile memoriju kako delovi softvera budu pokretani.
Eto, mogli ste da pišete kod koji nije imao memorijske greške. Ali, loša strana je bila gubitak one moći koju su C i C++ pružali. Programi su takođe radili sporije (jer su sakupljači smeća oduzimali ključno vreme obrade). Pritom, softver napisan na ovim jezicima koristi mnogo više memorije.
Programski jezik između “dva plemena”
Tada se svet programiranja podelio, otprilike, na dva plemena. Ako je softver trebalo da radi brzo ili na malom čipu u uređaju, veća je verovatnoća da je bio napisan u C ili C++ jeziku. Ako vam je bila potrebna veb aplikacija ili aplikacija za mobilni telefon, onda biste koristili noviji jezik koji sam sakuplja smeće.
Sa programskim jezikom Rust, Hour je imao za cilj da stvori jezik koji će biti savršeno izbalansiran između ova dva plemena. Nije zahtevao od programera da ručno određuju gde će u memoriji stavljati podatke, to bi Rust činio umesto njih. Ali nametnuo je mnoga stroga pravila o tome kako se podaci mogu koristiti ili kopirati unutar programa.
Morali ste da naučite sva ta pravila, koja su bila teža od onih u Python-u ili JavaScript-u. Bilo bi teže napisati kod u Rust-u, ali bi bio “memorijski bezbedan” - nije bilo straha da ćete slučajno ubaciti kobne memorijske greške.
Najvažnije, Rust je ponudio “sigurnost istovremenosti”. Savremeni programi rade više stvari odjednom - drugim rečima, istovremeno - i ponekad te različite niti koda pokušavaju da modifikuju isto deo memorije u skoro isto vreme. Memorijski sistem koji ima Rust je to sprečavao.
Sedamnaest godina kasnije, Rust je postao jedan od najpopularnijih jezika na planeti. Postoji 2,8 miliona programera koji koriste Rust, a kompanije kao što su Microsoft ili Amazon smatraju Rust ključem za svoju budućnost. Discord je koristio Rust da ubrza svoje sisteme, Dropbox ga koristi za sinhronizaciju datoteka sa vašim računarom, a Cloudflare ga koristi za obradu više od 20% celokupnog internet saobraćaja.
Kada Stack Overflow sprovede svoje godišnje ankete o programskim jezicima Rust je uvek na vrhu među omiljenima. Zapravo, Rust je već sedam godina za redom ocenjen kao najomiljeniji programski jezik. Rust, kao i drugi uspešni open source projekti sada ima stotine saradnika, a mnogi od njih su volonteri i na njemu rade jer jednostavno vole ovaj jezik. Hour se povukao iz projekta 2013. godine i srećan je što ga je predao drugim programerima.
1 komentar