- Rust zagotavlja varnost pomnilnika pri prevajanju z lastništvom, izposojo in življenjskimi obdobji, brez uporabe zbiranja smeti.
- Sistem tipov in pravila vzdevkov omogočajo sočasnost brez podatkovnih tekem z uporabo mutexov, kanalov in pametnih kazalcev.
- Cargo, crates.io in aktivni ekosistem poenostavljajo upravljanje odvisnosti, prevajanje, testiranje in uvajanje.
- Razumevanje struktur, naštevanj, možnosti in rezultatov je ključnega pomena za obravnavo napak in modeliranje varnih podatkov v sočasnih aplikacijah.
Rust je postal eden tistih jezikov, ki Vsak razvijalec sistemov to sliši znova in znova.Je tako hiter kot C in C++, vendar s skoraj obsesivno osredotočenostjo na varnost pomnilnika in dobro izvedeno sočasnost. To ni le prazno trženje: njegova zasnova se vrti okoli tega, da prevajalnik zazna napake med prevajanjem – napake, ki jih v drugih jezikih opazite le, ko je sistem že v produkciji ... ali ko se sesuje.
Če vas zanima razumevanje Kako Rust doseže varen pomnilnik brez zbiranja smeti in sočasnost brez strahu pred prenosom podatkovTa vadnica je za vas. Obravnavali bomo vse od osnov jezika in njegovega ekosistema do ključnih konceptov, kot so lastništvo, izposojanje, sestavljeni tipi, orodja, kot je Cargo, in si celo ogledali atomske tipe in zaklepanje z bolj dostopne perspektive za tiste, ki se s sočasnostjo srečujejo prvič, vse s poudarkom na varnosti in zmogljivosti.
Vadnica za Rust: Zmogljivost, varnost pomnilnika in sočasnost
Rust je programski jezik programiranje splošni namen in večparadigmatičen, zasnovan za tako za nizkonivojsko sistemsko programiranje kot tudi za visokonivojske projekte, od OSOd igralnih mehanizmov in brskalnikov do visokozmogljivih spletnih storitev, izvira iz Mozille s ciljem izboljšanja varnosti programske opreme, zlasti v občutljivih komponentah, kot je mehanizem brskalnika.
Njegova značilnost je, da zagotavlja varnost pomnilnika med prevajanjem brez uporabe zbiralnika smeti. Namesto tega Rust uporablja sistem lastništva in preverjalnik izposoje, ki spremlja življenjsko dobo vsake vrednosti in njenih referenc. S tem se izognemo klasičnim težavam, kot so viseči kazalci, prelivanje medpomnilnika ali puščanje pomnilnika, ne da bi bilo potrebno samodejno štetje referenc ali zbiranje smeti.
Poleg tega je Rust zasnovan tako, da olajša varna sočasnostNjegov model tipov in lastništva preprečuje podatkovne tekme med nitmi, vsaj medtem ko ostane v varni kodi Rust. To pomeni, da se številne nevarne situacije zaznajo že med prevajanjem, še preden se izvede ena sama vrstica.
Zaradi vseh teh razlogov imajo velika podjetja rada Dropbox, Microsoft, Amazon ali google Rust so sprejeli v kritičnih delih svoje infrastrukture. In ni naključje, da je že leta na vrhu anket Stack Overflow kot eden od "najbolj priljubljenih" jezikov razvijalcev: združuje zmogljivost v slogu C++ s sodobnim naborom orodij (Cargo, crates.io) in zelo aktivno skupnostjo, tako imenovanimi Rustaceans.
Osnovni pojmi: programski jezik, tipi in pomnilnik
Preden se poglobimo v posebnosti varnosti pomnilnika in sočasnosti, je vredno razjasniti nekaj splošnih konceptov, ki se pojavljajo povsod čas Pri delu z Rustom, še posebej, če prihajate iz drugih jezikov ali šele začenjate programirati.
Programski jezik je navsezadnje niz pravil in struktur, ki omogoča opis algoritmov in jih pretvorite v izvedljive programe. Rust se s pomočjo prevajalnika prevede v izvorno strojno kodo rustcZato je zmogljivost, ki jo dosežete, običajno na ravni C in C++.
Upravljanje pomnilnika je postopek, s katerim program med delovanjem rezervira in sprošča bloke pomnilnikaNapake na tem področju so pogosto usodne: puščanje pomnilnika (neuspešno sproščanje neuporabljenega pomnilnika), poškodbe podatkov zaradi pisanja izven meja ali uporaba pomnilnika po tem, ko je bil že sproščen. Rust to obravnava z zelo močnim sistemom tipov in formalnimi pravili za lastništvo, izposojo in življenjske dobe.
Rust vsebuje tudi izraze, kot so pametni tipi in kazalciTip opisuje, katere vrste podatkov spremenljivka shranjuje (cela števila, števila s plavajočo vejico, nize, strukture itd.) in kako jih je mogoče upravljati. Pametni kazalci (na primer Box, Rc y Arc) so strukture, ki zajemajo pomnilniške naslove in dodajajo dodatno logiko za varno upravljanje virov, kot je štetje skupnih referenc ali premikanje vrednosti v kopico.
Na področju konkurence se uporabljajo koncepti, kot so pogoji tekmovanja, mutexi in kanali Postanejo nepogrešljivi: do tekmovalnega pogoja pride, ko več niti hkrati dostopa do skupnega vira in ga spreminja brez ustrezne koordinacije; mutex (medsebojna izključitev) zagotavlja, da v kritični del hkrati vstopi le ena nit; kanali pa omogočajo pošiljanje sporočil med nitmi brez neposredne delitve pomnilnika.
Zakaj se učiti Rust: Varnost pomnilnika in neustrašna sočasnost
Rust si je slavo prislužil, ker ponuja trije zelo dragoceni stebri sodobnega programiranjaZmogljivost, varnost in trenutna orodja. Poglejmo, zakaj so te točke tako pomembne.
Glede zmogljivosti, Rust prevaja neposredno v izvorne binarne datoteke brez potrebe po virtualnem stroju ali interpreterju. Model abstrakcij z ničelnimi stroški si prizadeva zagotoviti, da abstrakcije na visoki ravni ne povzročajo dodatnih stroškov med izvajanjem. Zato je idealen za razvoj sistemov. Igra, komponente brskalnika ali mikrostoritve z nizko zakasnitvijo.
Varnost pomnilnika temelji na njegovem sistem lastništva in posojilNi zbiralnika smeti, vendar prevajalnik natančno ve, kdo je lastnik posameznega vira, kdaj ni več potreben in kdaj ga je mogoče sprostiti. To preprečuje puščanje, viseče kazalce in številne napake, zaradi katerih je bilo programiranje v C in C++ tradicionalno tako nevarno.
Na področju konkurence Rust zasleduje tisto, kar običajno imenujemo "Sočasnost brez strahu"Sam sistem tipov preprečuje obstoj podatkovnih korenov v varni kodi. Če želite deliti spremenljive podatke med nitmi, boste morali uporabiti ustrezne primitive, kot so Mutex, RwLock o Arc, prevajalnik pa bo zagotovil, da se spoštujejo pravila o vzdevkih in spremenljivosti.
Razvojno izkušnjo izboljšujejo sodobna orodja, kot so CargoVsebuje integriranega upravitelja paketov in infrastrukturo za gradnjo ter širok ekosistem knjižnic (crates), ki pokrivajo vse od asinhronega omrežja (Tokyo) do spletnih ogrodji (Actix, Rocket, Axum). Vse to podpira odprta, plodovita in precej potrpežljiva skupnost, zlasti za začetnike.
Namestitev in potrebna orodja: rustup, rustc in Cargo
Za pisanje in zagon prvih programov v Rustu je običajno treba namestiti uradni nabor orodij z uporabo zarjaveti (glej Popoln uvod v Rust), preprost namestitveni program in upravitelj različic, ki deluje na vseh večjih operacijskih sistemih.
z zarjaveti Namestite, posodobite in preklapljate med različnimi različicami Rusta (stabilna, beta, nočna) brez kakršnih koli težav. Preprosto pojdite na uradno stran orodij Rust in sledite korakom za vaš sistem. Ko je prevajalnik nameščen, bo na voljo. rustc, vodja projekta cargo in svoje rustup v svojem terminal.
prevajalnik rustc To je tisto, kar pretvori vašo izvorno kodo v izvedljive binarne datoteke ali knjižnice. Čeprav ga lahko pokličete neposredno z ukazi kot rustc main.rsV praksi boste skoraj vedno delali prek Carga, ki obravnava klice do rustc s pravimi možnostmi.
Osrednje orodje delovnega procesa je CargoZ le nekaj ukazi lahko ustvarite nove projekte, upravljate odvisnosti, prevajate, izvajate, testirate in objavljate pakete na crates.io. Nekateri pogosto uporabljeni osnovni ukazi so: cargo new, cargo build, cargo run, cargo test y cargo check, ki preveri kodo, ne da bi ustvaril končno izvedljivo datoteko, kar je idealno za hitro odkrivanje napak.
Če želite popravljati, ne da bi karkoli nameščali, Rust igrišče (uradni spletni izvajalec) in platforme, kot je Replit, vam omogočajo pisanje in izvajanje majhnih delov kode iz brskalnika, kar je idealno za eksperimentiranje s primeri pomnilnika in sočasnosti, ne da bi morali nastaviti celotno okolje.
Vaš prvi program: Pozdravljeni, Rust in osnovni potek
Klasični način za začetek pogovora v katerem koli jeziku je z znamenitim "Pozdravljen, svet". V Rustu je datoteka main.rs vsaj lahko vsebuje nekaj tako preprostega kot funkcijo main ki na zaslon izpiše niz.
Ključna beseda fn pomeni, da definiramo funkcijo in main To je vstopna točka programa. Blok kode funkcije se nahaja znotraj zavitih oklepajev. Za pisanje v konzolo uporabite makro println!, ki sprejme nizovni literal (ali predlogo z zaznamki) in ga pošlje na standardni izhod, ki se konča z znakom za novo vrstico.
Če prevedete neposredno z rustc main.rs, dobili boste izvedljivo binarno datoteko (na primer main o main.exe (odvisno od sistema). Ko ga zaženete, boste sporočilo videli v terminalu. Vendar pa je idiomatičen način dela z Rustom ta, da Cargo prevzame vodenje projekta.
z cargo new nombre_proyecto Struktura map se ustvari samodejno z src/main.rs že pripravljeno z "Pozdravljen, svet" in datoteko Cargo.toml ki vsebuje metapodatke in prihodnje odvisnosti. Od tam naprej cargo run prevedite in zaženite binarno datotekoin ponovno se prevede le, ko zazna spremembe.
Ta način dela ni le priročen, ampak vas že od samega začetka navadi na uporabo standardnega ekosistema Rust, kar je zelo uporabno, ko začnete dodajati pakete za sočasnost, mreženje, testiranje ali karkoli drugega, kar potrebujete.
// Deklariramo glavno funkcijo: vstopna točka programa fn main() { // Za izpis besedila v konzolo uporabimo makro println! println!("Pozdravljen, svet!"); }
Spremenljivke, spremenljivost in osnovni podatkovni tipi
V Rustu so spremenljivke deklarirane s ključno besedo letin privzeto so nespremenljiviZ drugimi besedami, ko jim enkrat dodelite vrednost, je ne morete spremeniti, razen če jo izrecno deklarirate kot spremenljivo z mut.
Privzeta nespremenljivost pomaga preprečiti subtilne logične napake, zlasti v sočasnih programih, kjer bi lahko več niti želelo spremeniti isto vrednost. Če jo morate spremeniti, napišete nekaj takega let mut contador = 0;Od tam lahko ponovno dodelite nove vrednosti contador.
Rust omogoča tudi tako imenovano senčenjeNovo spremenljivko z istim imenom lahko deklarirate znotraj istega obsega in skrijete prejšnjo. To ni enako kot mutacija, ker ustvarjate novo vrednost (ki je lahko celo drugačnega tipa). Na primer, niz lahko pretvorite v celo število z istim imenom, če gre za novo deklaracijo z let.
Rustov sistem tipov je statičen, kar pomeni, da Tip vsake spremenljivke je znan ob prevajanjuVendar pa je sklepanje tipov precej močno: če napišete let x = 5;Prevajalnik predpostavlja, da gre za i32 Razen če ne navedete drugače. Dodate lahko opombe, kot so let x: i64 = 5; ko želiš biti ekspliciten.
Med razpoložljivimi skalarnimi tipi so predznačena in nepredznačena cela števila (i8, u8, i32itd.), plavajoče (f32, f64), logične funkcije (bool) in znaki Unicode (char). Te preproste tipe je običajno poceni kopirati in mnogi uporabljajo to lastnost Copykar pomeni, da se pri dodelitvi ali posredovanju funkciji kopirajo namesto premaknejo.
Nizi v Rustu: &str in String
Obdelava besedila v Rustu je lahko sprva nekoliko zmedena, saj jasno razlikuje med verige "rezine" in lastniške verigeKljučna dela sta &str y String.
Un &str je del nespremenljive verigePogled na zaporedje bajtov UTF-8, shranjeno nekje. Tipični primeri vključujejo literale, kot je "Hola"ki so tipa &'static str (Obstajajo celotno življenjsko dobo programa in so vdelane v binarno datoteko.) Rezine niso lastniki podatkov; le kažejo nanje.
String, po drugi strani pa je lasten niz, spremenljiv in gostovan v kopiciSpreminjate lahko njegovo velikost, ga združujete, prenašate med funkcijami s premikanjem njegove lastnosti itd. Pogosto se uporablja, kadar želite zgraditi dinamično besedilo ali ga dolgoročno shraniti znotraj struktur.
V mnogih scenarijih boste preklapljali med enim in drugim: na primer, ustvarili boste String::from("hola") iz rezineali pa si boste izposodili &str po String s posredovanjem referenc funkcijam, ki morajo samo brati.
Ta ločitev med lastniškimi in izposojenimi podatki je ključna za upravljanje pomnilnika in se razteza na preostali del jezika: zbirke, strukture in naštevanja sledijo istim idejam o tem, kdo je lastnik in kdo samo gleda.
Funkcije, potek upravljanja in komentarji
Funkcije v Rustu so definirane z fn in omogočajo organizacijo programa v logične enote za večkratno uporabo. Vsaka funkcija določa tip njegovih parametrov in tip njegove vrnitve sledenje puščici ->Če ne vrne ničesar smiselnega, se predpostavlja unitarni tip. ().
Pomembna podrobnost je, da se zadnji izraz v funkciji (ali katerem koli bloku) brez podpičja vzame kot implicitna vrnjena vrednost. Uporabite lahko return za zgodnje vrnitveV idiomatski kodi pa končni izraz pogosto preprosto pustite brez. ;.
Krmilni tok se obdeluje s klasiko if/elsezanke loop, while y forV Rustu, if To je izraz, ki vrne vrednosttako da ga lahko uporabite neposredno v letpod pogojem, da veje vrnejo isti tip. Zanke for Običajno iterirajo po obsegih ali iteratorjih zbirk in so priporočena možnost namesto ročnih indeksov.
Za dokumentiranje kode in olajšanje življenja vsem, ki pridejo za njimi (vključno z vami čez mesec dni), lahko uporabite vrstične komentarje z // ali blokirajte z /* ... */Poleg tega Rust ponuja komentarje k dokumentaciji z /// ki postanejo generirani dokumenti, čeprav to bolj ustreza velikim projektom.
Lastništvo, posojanje in življenjska doba: temelj varnosti spomina
Tu pridemo do bistva Rustovega modela pomnilnika: sistema lastništvo, izposojanje in življenjska dobaTa pravila zagotavljajo, da so reference vedno veljavne in da se pomnilnik varno sprosti brez nakopičenih smeti.
Osnovna pravila lastništva so preprosta za opredeliti, čeprav jih je sprva morda težko ponotranjiti: Vsaka vrednost ima enega lastnika.Hkrati je lahko samo en lastnik; in ko lastnik zapusti svoje področje delovanja, se vrednost uniči in njen pomnilnik se sprosti. To velja na primer za String: po dokončanju bloka, kjer je bil deklariran, se samodejno pokliče drop kar sprosti pomnilnik kopice.
Ko drugi spremenljivki dodelite ustrezno vrednost ali jo posredujete funkciji po vrednosti, se lastnost premakne. To pomeni, da prvotna spremenljivka po premiku preneha biti veljavnaTa semantika gibanja preprečuje dvojne izdaje, ker nikoli ni dveh lastnikov, ki bi poskušala izdati isti vir.
Da bi več delom programa omogočil dostop do iste vrednosti brez spreminjanja lastništva, Rust uvaja reference in izposojo. Ko si izposodite, ustvarite referenco. &T (nespremenljivo) ali &mut T (spremenljivo) na vrednost brez prenosa lastništva. Posojilo je omejeno s pravili preveritelja posojila., ki preverja, ali reference preživijo podatke, na katere kažejo, in ali spremenljivi in deljeni dostopi niso nevarno pomešani.
Pravila posojila lahko povzamemo takole: kadar koli lahko imate več nespremenljivih referenc na vrednost ali ena sama spremenljiva referencaVendar ne oboje hkrati. To odpravlja tekmovalne pogoje v skupnem pomnilniku: ali je veliko bralcev ali pa obstaja izoliran zapisovalec; nikoli sočasni bralci in zapisovalci na istih podatkih v istem trenutku.
Sestavljeni tipi: strukture, naštevanja in pametni kazalci
Rust ponuja več načinov za združevanje povezanih podatkov v bogatejše strukture, začenši z struktureStruktura vam omogoča, da definirate tip po meri z imenovanimi polji, na primer uporabnika z e-pošto, imenom, stanjem aktivnosti in števcem prijav.
Če želite ustvariti primerek strukture, izpolnite vsa njena polja in spremenljivko, ki jo vsebuje, lahko označite kot spremenljivo, da kasneje spremenite njene vrednosti. Obstaja tudi sintaksa za posodabljanje strukture, ki vam omogoča, da zgradite nov primerek s ponovno uporabo nekaterih polj iz obstoječega. ..otro_struct.
P naštevanja So še en bistveni steber: omogočajo vam, da definirate tip, ki je lahko ena od več možnih različic, vsaka s svojimi povezanimi podatki ali brez njih. Klasični primer je naštevanje za IP-naslove z eno različico V4 ki shranjuje štiri oktete in še enega V6 ki shrani niz z zapisom IPv6.
Rustova standardna knjižnica vključuje dva zelo pomembna naštevanja: Option<T> y Result<T, E>Prvi predstavlja prisotnost ali odsotnost vrednosti (nekaj ali nič) in se uporablja za izogibanje ničelnim kazalcem; drugi modelira operacije, ki lahko vrniti pravilen rezultat ali napako, ki zahteva, da je obravnavanje napak eksplicitno in varno.
Za upravljanje dinamičnega pomnilnika in skupno rabo podatkov ima Rust pametni kazalci kot Box<T>, ki premakne vrednost v kopico in ohrani edinstveno lastništvo; Rc<T>, skupno število referenc za enonitna okolja; in Arc<T>, podobno kot Rc vendar varno za več niti. Pravilna uporaba je ključnega pomena pri kombiniranju dinamičnega pomnilnika s sočasnostjo.
Tovor in ekosistem zabojev
Cargo je lepilo, ki drži skupaj ekosistem Rust: upravlja prevajanje, odvisnosti in življenjski cikel projektaVsak projekt ima datoteko Cargo.toml ki deluje kot manifest, v katerem so navedeni ime, različica, jezikovna izdaja in zunanje odvisnosti.
Oddelek Ta datoteka vam omogoča, da navedete pakete tretjih oseb z njihovimi različicami. Ko zaženete cargo build o cargo runCargo samodejno prenese te zaboje s spletne strani crates.io, jih prevede in poveže z vašim projektom. Tako enostavno je dodati na primer generatorje naključnih števil, spletne ogrodja ali kriptografske knjižnice.
Med najpogostejšimi ukazi so cargo new za začetek binarnih projektov o cargo new --lib za knjižnice; cargo build prevesti v načinu za odpravljanje napak; cargo build --release pridobiti optimizirano, produkcijsko usmerjeno različico; in cargo test za izvedbo serije testov.
cargo check Zasluži si posebno omembo: kodo prevede do vmesne točke, ne da bi ustvaril binarno datoteko, zaradi česar je biti zelo hiter pri odkrivanju napak pri prevajanjuTo je idealno za hitro iteriranje, medtem ko preverjevalnik izposoje opozarja na težave z lastnostmi, referencami in življenjskimi dobami.
Zahvaljujoč temu ekosistemu je običajno, da svoje projekte strukturirate kot majhne, dobro definirane pakete (crabbe), med katerimi si delite kodo in ponovno uporabljate rešitve, ki jih je ustvarila skupnost. Za napredno sočasnost boste na primer imeli pakete, kot je Tokio za asinhrono programiranje ali crossbeam za visokozmogljive sočasne podatkovne strukture.
Sočasnost v Rustu: niti, muteksi, kanali in atomske enote
Sočasnost je eden od razlogov, zakaj Rust vzbuja toliko zanimanja: omogoča vam izkoriščanje večjedrnih procesorjev. brez zatikanja v tipične napake niti in skupnega pomnilnikaČe se s temi temami ukvarjate prvič, je koristno razlikovati med več koncepti.
Sočasnost vključuje izvajanje več nalog, ki se časovno prekrivajo, bodisi na enem ali več jedrih. V Rustu lahko ustvarite sistemske niti za vzporedno izvajanje dela, jezik pa vas vodi, da zagotovite varno izmenjavo podatkov med njimi. Klasična napaka je pogoj tekmovanja, kjer dve niti hkrati dostopata do podatkov in jih spreminjata, rezultat pa je odvisen od vrstnega reda izvajanja – nekaj, kar je zelo težko odpraviti.
Za usklajevanje dostopa do skupnih podatkov se Rust zanaša na primitive, kot so mutexki zagotavljajo medsebojno izključitev: v kritični del lahko naenkrat vstopi le ena nit. V kombinaciji z Arc<T> Za deljenje lastništva med nitmi je mogoče zgraditi skupne podatkovne strukture, ki so skladne s pravili lastništva in izposoje.
Druga pogosta oblika mednitne komunikacije, ki jo Rust močno spodbuja, je posredovanje sporočil z uporabo kanalovKanal ima pošiljateljski in sprejemni konec; niti posredujejo sporočila (vrednosti) skozenj, kar zmanjša uporabo spremenljivega skupnega pomnilnika in poenostavi sklepanje o stanju sistema.
Ko se poglobite v nizkonivojsko sočasnost, se pojavi naslednje: atomske vrsteDo atomskih spremenljivk se dostopa prek operacij, ki so z vidika niti nedeljive. To omogoča implementacijo skupnih števcev, zastavic stanja, čakalnih vrst brez zaklepanja in še več. Obvladovanje atomskih spremenljivk zahteva razumevanje modelov pomnilnika in ukazov za dostop, zato mnogi razvijalci raje začnejo z mutexi in kanali, preden se poglobijo v te podrobnosti.
Prvi koraki in viri za učenje sočasnosti in atomskih algoritmov
Če vstopate v areno brez predhodnih izkušenj, je najpametnejše ravnanje zgraditi trdne temelje splošnih konceptov preden se lotimo naprednih orodij, kot so atomski tipi v Rustu. Knjige, kot je "Programiranje v Rustu", ponujajo postopen uvod, vendar je normalno, da se dela, osredotočena na atomske tipe in ključavnice, sprva zdijo obsežna.
Za lažje razumevanje je priporočljivo, da se najprej seznanite z Tradicionalne niti, medsebojna izključitev in posredovanje sporočil v Rustu. Poigrajte se s primeri std::thread, std::sync::Mutex, std::sync::Arc in kanali std::sync::mpsc Pomaga vam razumeti, kako vas prevajalnik vodi in katerim napakam se izogne.
Vzporedno je zelo priporočljivo pregledati uvodne vire o sočasnosti na splošno, tudi če niso osredotočeni na Rust: razumevanje, kaj so pogoji tekmovanja, kaj pomeni blokiranje, kaj pomeni deljeni pomnilnik v primerjavi s prenosom sporočil in kako se uporabljajo zaklepanja. Ko ti koncepti postanejo naravni, atomska fizika preneha biti "črna magija". in postanejo le še eno orodje, le zelo občutljivo.
Ko se boste vrnili k naprednejšim besedilom o atomskih elementih in zaklepih v Rustu, boste veliko lažje sledili sklepanju, če boste že razumeli, kateri problem poskuša rešiti vsak konstrukt: od preprostega števca, varnega za uporabo niti, do struktur brez zaklepov, ki zmanjšujejo konflikte.
Konec koncev Rust ponuja tako primitive visoke ravni kot tudi zelo nizkonivojska orodja, ključno pa je, da vedno izberete najvarnejšo raven abstrakcije, ki reši vaš problem, pri čemer se zatečete k atomski kodi. unsafe le, če resnično doda vrednost in če v celoti razumete njene posledice.
Celoten ekosistem tipov, lastništva, izposoje, zabojev, orodij in primitivov za sočasnost se združuje in ponuja jezik za pisanje hitra, robustna in vzdrževalna programska opremaTo zmanjšuje številne vrste napak, ki so v preteklosti pestile sistemsko programiranje. Ko boste vadili z majhnimi projekti, vajami, kot je Rustlings, in uradno dokumentacijo, se bodo ti koncepti iz navidez strogih pravil spremenili v zaveznika, ki vas opozori, preden težava doseže produkcijo.
Strasten pisec o svetu bajtov in tehnologije nasploh. Rad delim svoje znanje s pisanjem in to je tisto, kar bom počel v tem blogu, saj vam bom pokazal vse najbolj zanimive stvari o pripomočkih, programski opremi, strojni opremi, tehnoloških trendih in še več. Moj cilj je, da vam pomagam krmariti po digitalnem svetu na preprost in zabaven način.