Rust Tutorial: Memory Chengetedzo uye Concurrency

Kugadziridza kwekupedzisira: 04/12/2025
munyori: Isaac
  • Rust inochengetedza ndangariro kuchengetedzeka pakuunganidzwa kuburikidza nevaridzi, kukwereta, uye hupenyu hwese, pasina kushandisa kuunganidza marara.
  • Iyo mhando sisitimu uye aliasing mitemo inobvumira concurrency isina mijaho yedata uchishandisa mutexes, chiteshi, uye smart anonongedzera.
  • Cargo, crates.io, uye inoshanda ecosystem inorerutsa kutsamira manejimendi, kuunganidza, kuyedzwa, uye kutumira.
  • Kunzwisisa zvimiro, enums, Sarudzo, uye Mhedzisiro ndiyo kiyi yekubata zvikanganiso uye kuenzanisira data rakachengeteka mumashandisirwo akafanana.

C programming mutauro vs Rust: zvakanakira uye nekuipa

Ngura yava imwe yemitauro iyoyo Wese anogadzirisa masisitimu anopedzisira azvinzwa kasingaperi.Inokurumidza seC uye C ++, asi neinenge yakatarisana nekutarisa kuchengetedza ndangariro uye yakanyatso itwa concurrency. Uku hakusi kungoshambadzira kusina chinhu: dhizaini yayo inotenderedza komputa yekuona zvikanganiso panguva yekuunganidza-zvikanganiso izvo mune mimwe mitauro unongoona kana sisitimu yatove mukugadzirwa ...

Kana iwe uchida kufarira Iyo Rust inowana sei yakachengeteka ndangariro pasina kuunganidzwa kwemarara uye concurrency pasina kutya data inomhanyaIchi chidzidzo ndechenyu. Tichavhara zvese kubva kune zvakakosha zvemutauro uye ecosystem yayo kusvika kune akakosha pfungwa semuridzi, kukwereta, marudzi akakoniwa, maturusi akaita seCargo, uye kunyange kutarisa mhando dzeatomu uye kukiya kubva kune inosvikika maonero kune ayo matsva kuenderana, zvese zvine tarisiro pakuchengetedza uye kuita.

Rust Tutorial: Kuita, Kuchengetedza Memory, uye Concurrency

Rust mutauro wepurogiramu programming chinangwa chikuru uye multi-paradigm, yakagadzirirwa yakaderera-level masisitimu programming pamwe chete nemapurojekiti epamusoro-soro, kubvira operating systemsKubva painjini dzemitambo nemabhurawuza kuenda kuwebhusaiti yepamusoro-soro, zvakabva kuMozilla nechinangwa chekuvandudza kuchengetedzwa kwesoftware, kunyanya muzvikamu zvine hunyoro senge injini yebrowser.

Chimiro chayo chinotsanangura ndechekuti inovimbisa kuchengetedza ndangariro panguva yekuunganidza pasina kushandisa muunganidzi wemarara. Pane kudaro, Rust inoshandisa muridzi sisitimu uye yekukwereta cheki inoteedzera hupenyu hwega hwega kukosha uye mareferensi ayo. Izvi zvinodzivirira matambudziko echinyakare senge anorembera anonongedzera, buffer mafashama, kana ndangariro kuvuza pasina kuda otomatiki referensi kuverenga kana kuunganidza marara.

Uyezve, Rust yakagadzirirwa kuita kuti zvive nyore safe concurrencyRudzi rwayo uye muridzi wemhando inodzivirira nhangemutange yedata pakati petambo, zvirinani ichiri mune yakachengeteka Rust kodhi. Izvi zvinoreva kuti mamiriro mazhinji ane njodzi anoonekwa panguva yekuunganidza, mutsetse mumwechete usati waitwa.

Nezvikonzero zvese izvi, makambani makuru anoda Dropbox, Microsoft, Amazon kana Google Vakatora Rust muzvikamu zvakakosha zvezvivakwa zvavo. Uye hazvisi zvetsaona kuti yakakwirisa Stack Kufashukira sarudzo kwemakore seimwe yemitauro "inodiwa" nevagadziri: inosanganisa C ++-maitiro ekuita neazvino toolset (Cargo, crates.io) uye nharaunda inoshanda kwazvo, iyo inonzi Rustaceans.

Basic pfungwa: programming mutauro, mhando uye ndangariro

Usati wanyura mune izvo chaizvo zvekuchengetedza ndangariro uye concurrency, zvakakodzera kujekesa mamwe akajairwa pfungwa dzinoonekwa mukati mese. el tiempo Paunenge uchishanda neRust, kunyanya kana uchibva kune mimwe mitauro kana kuti uchangotanga kuronga.

Mutauro wepurogiramu, pakupedzisira, seti yemitemo uye zvimiro zvinokutendera iwe kutsanangura algorithms uye vashandure kuita zvirongwa zvinogoneka. Rust inounganidza kune yekuzvarwa muchina kodhi ichishandisa muunganidzi wayo rustcNaizvozvo, kuita kwaunowana kunowanzo kuenderana neC uye C ++.

Memory management ndiyo nzira iyo chirongwa inochengetedza uye inoburitsa zvivharo zvendangariro uchimhanyaZvikanganiso munzvimbo ino zvinowanzouraya: kudonha kwendangariro (kutadza kuburitsa ndangariro isina kushandiswa), huwori hwe data kubva kunze kwe-ku-miganhu kunyora, kana kushandisa ndangariro mushure mekunge yasunungurwa. Rust inogadzirisa izvi nemhando yakasimba kwazvo yerudzi uye mitemo yepamutemo yekuve muridzi, kukwereta, uye hupenyu hwese.

Ngura inewo mazwi akadai smart mhando uye anonongedzeraRudzi runotsanangura kuti ndeupi rudzi rwe data zvitoro zvakasiyana-siyana (integers, zvinoyangarara, tambo, zvimiro, nezvimwewo) uye mashandisirwo angaitwa. Smart anonongedzera (semuenzaniso, Box, Rc y Arc) zvimiro zvinoputira ndangariro kero uye kuwedzera mamwe mantiki kubata zviwanikwa zvakachengeteka, sekuverenga mareferensi akagovaniswa kana kufambisa hunhu kumurwi.

Mundima yemakwikwi, pfungwa dzakadai se mamiriro erudzi, zvimumumu, uye nzira Ivo vanove vakakosha: mamiriro emujaho anoitika kana tambo dzakawanda dzichiwana uye gadzirisa yakagovaniswa sosi panguva imwe chete pasina kurongeka kwakaringana; mutex (mutual exclusion) inovimbisa kuti tambo imwe chete inopinda muchikamu chakakosha panguva; uye zviteshi zvinobvumira mameseji kutumirwa pakati peshinda pasina kugovana zvakananga ndangariro.

Sei uchidzidza Rust: Kuchengetedza ndangariro uye kusatya concurrency

Ngura yakawana mukurumbira wayo nekuti inopa mbiru nhatu dzakakosha kwazvo dzemazuva ano hurongwaKuita, kuchengetedzeka, uye zvishandiso zvazvino. Ngationei kuti nei pfungwa idzi dzichikosha.

Nezvekuita, Rust inounganidza zvakananga kumabhinari ekuzvarwa pasina kudiwa kwemuchina kana muturikiri. Iyo zero-mutengo yekubvisa modhi inovavarira kuve nechokwadi chekuti-yepamusoro-nhanho yekubvisa haiwedzeri pamusoro panguva yekumhanya. Naizvozvo, yakanakira kusimudzira masisitimu. videogames, browser components kana low-latency microservices.

Memory chengetedzo yakavakirwa pairi muridzi uye hurongwa hwechikweretiIko hakuna muunganidzi wemarara, asi muunganidzi anoziva chaizvo muridzi wega wega sosi, kana isingachadiwi, uye painogona kuburitswa. Izvi zvinodzivirira kuvuza, mapoinzi akarembera, uye akawanda ezvikanganiso izvo zvagara zvichiita kuti C uye C ++ kuronga kuve nengozi.

Munzvimbo yemakwikwi, Rust inoteedzera inowanzonzi "concurrency without fear"Iyo mhando system pachayo inodzivirira data midzi kubva kune iripo mune yakachengeteka kodhi. Kana iwe uchida kugovera data inoshanduka pakati petambo, iwe unozofanirwa kushandisa primitives yakakodzera senge Mutex, RwLock o Arc, uye mugadziri achaona kuti ariasing uye mutability mitemo inoremekedzwa.

  Maitiro ekuuraya hutachiona Windows neMalwarebytes nhanho nhanho

Chiitiko chekusimudzira chinowedzerwa nemidziyo yemazuva ano senge kagoIyo inoratidzira yakasanganiswa pasuru maneja uye kuvaka zvivakwa, uye yakafara ecosystem yemaraibhurari (makreti) anovhara zvese kubva kune asynchronous networking (Tokyo) kune webhu masisitimu (Actix, Rocket, Axum). Zvese izvi zvinotsigirwa nenharaunda yakavhurika, yakawanda, uye ine moyo murefu, kunyanya kune vanotanga.

Kuisa uye zvakakosha maturusi: rustup, rustc uye Cargo

Kunyora uye kumhanyisa zvirongwa zvako zvekutanga muRust, yakajairika nzira yekutanga ndeyekuisa iyo yepamutemo toolchain uchishandisa ngura kumusoro (ona Zadzisa sumo yeRust), iri nyore yekuisa uye vhezheni maneja inoshanda pane ese makuru masisitimu anoshanda.

Con ngura kumusoro Unogona kuisa, kugadzirisa, uye kushandura pakati pemhando dzakasiyana dzeRust (yakagadzikana, beta, husiku) pasina kutyora chero chinhu. Ingoenda kune yepamutemo Rust zvishandiso peji uye tevera matanho eiyo system yako. Kana yangoiswa, iyo compiler ichave iripo. rustc, maneja weprojekiti cargo uye zvake rustup mamuri terminal.

muunganidzi rustc Ndizvo zvinoshandura yako sosi kodhi kuita mabhinari anogoneka kana maraibhurari. Kunyangwe iwe uchigona kuidaidza nayo zvakananga rairo Chemhondoro rustc main.rsMukuita, iwe unogara uchishanda kuburikidza neCargo, iyo inobata mafoni kune rustc nesarudzo dzakakodzera.

Chishandiso chepakati chekufambiswa kwebasa ndeye kagoNemirairo mishoma chete, unogona kugadzira mapurojekiti matsva, kutonga zvinotsamira, kuunganidza, kumhanya, kuyedza, uye kushambadza mapakeji pa crates.io. Mimwe mirairo inowanzoshandiswa ndeye: cargo new, cargo build, cargo run, cargo test y cargo check, iyo inotarisa kodhi pasina kuburitsa yekupedzisira inoteedzera, yakanakira kuona zvikanganiso nekukurumidza.

Kana iwe uchida tinker pasina kuisa chero chinhu, Rust Playground (iyo yepamutemo online executor) uye mapuratifomu seReplit anobvumidza iwe kunyora uye kumhanya zvidimbu zvidiki zvekodhi kubva kubrowser, yakakwana yekuyedza ndangariro uye concurrency mienzaniso pasina kumisa nharaunda yese.

Chirongwa chako chekutanga: Mhoro, Rust, uye kuyerera kwekutanga

Nzira yekare yekutanga hurukuro mumutauro chero upi zvake ndeyemukurumbira "Mhoro, nyika." MuRust, faira main.rs zvingangove nechinhu chiri nyore sebasa main iyo inodhinda tambo pachiratidziri.

Shoko rinokosha fn inoratidza kuti tiri kutsanangura chiito, uye main Iyi ndiyo nzvimbo yekupinda chirongwa. Iyo kodhi kodhi yebasa inoenda mukati meiyo curly braces. Kunyorera kune console, shandisa iyo macro println!, iyo inogamuchira tambo chaiyo (kana template ine mabhukumaki) uye inoitumira kune yakajairwa kubuda inopera mumutsara mutsva.

Kana iwe ukabatanidza zvakananga ne rustc main.rs, iwe unowana iyo inogoneka bhinari (semuenzaniso, main o main.exe (zvichienderana nehurongwa). Paunenge uchimhanyisa, iwe uchaona meseji muiyo terminal. Asi iyo idiomatic nzira yekushanda naRust ndeyekusiya Cargo kutungamira pachirongwa.

Con cargo new nombre_proyecto Folder chimiro chinogadzirwa otomatiki chine a src/main.rs yakatogadzirirwa ne "Mhoro, nyika" uye faira Cargo.toml iyo ine metadata uye zvinoenderana neramangwana. Kubva ipapo, cargo run unganidza uye mhanyisa iyo binaryuye inongodzokorora kana yaona shanduko.

Iyi nzira yekushanda haisi nyore chete, asi inoita kuti iwe ujaire kushandisa yakajairwa Rust ecosystem kubva pakutanga, iyo inobatsira kwazvo paunotanga kuwedzera makrete e concurrency, networking, kuyedza, kana chero chaunoda.

// Tinozivisa basa guru: purogiramu yekupinda fn main () {// Isu tinoshandisa println! macro kudhinda zvinyorwa kune console println!("Mhoro, nyika!"); }

Variables, mutability, uye basic data marudzi

MuRust, misiyano inoziviswa nezwi rakakosha let, uye nekusingaperi hazvichinjikiMune mamwe mazwi, kana iwe ukavapa kukosha, haugone kuigadzirisa kunze kwekunge waiburitsa pachena kuti inoshanduka ne mut.

Kusachinja nekukasira kunobatsira kudzivirira zvisizvo zvikanganiso zvepfungwa, kunyanya muzvirongwa zvakabatana apo tambo dzakawanda dzinogona kuda kushandura kukosha kwakafanana. Kana iwe uchida kuchichinja, iwe unonyora chimwe chinhu chakadai let mut contador = 0;Kubva ipapo iwe unogona kupazve mitsva mitsva kune contador.

Ngura inobvumirawo izvo zvinonzi wallingIwe unogona kuzivisa shanduko itsva ine zita rimwechete mukati mechikamu chimwe chete, uchiviga iyo yapfuura. Izvi hazvina kufanana nekuchinja, nekuti uri kugadzira kukosha kutsva (iyo inogona kunge iri yerudzi rwakasiyana). Semuenzaniso, unogona kutendeutsa kubva patambo kuenda pairi nhamba uchishandisa zita rimwechete, chero chiri chiziviso chitsva chine let.

Rust's type system is static, zvinoreva kuti Mhando yemhando yega yega inozivikanwa pakuunganidzaNekudaro, nyora inference ine simba rakanyanya: kana iwe ukanyora let x = 5;Muumbi anofunga kuti iri a i32 Kunze kwekunge wazvitaura zvakasiyana. Iwe unogona kuwedzera zvinyorwa zvakadai se let x: i64 = 5; paunoda kuve pachena.

Pakati peanowanikwa scalar marudzi akasainwa uye asina kusaina nhamba (i8, u8, i32, zvichingodaro), izvo zvinoyangarara (f32, f64), maBooleans (bool) uye Unicode mavara (char). Aya marudzi akareruka anowanzo kuchipa kutevedzera uye mazhinji anoita hunhu Copyzvinoreva kuti kana ukavapa kana kuapfuudza kune rimwe basa, anokopwa pane kutamiswa.

Tambo muRust: &str uye String

Kubata mameseji muRust kunogona kukanganisa zvishoma pakutanga nekuti inonyatso siyanisa pakati cheni "zvidimbu" uye cheni dzevaridziZvidimbu zviviri zvakakosha &str y String.

Un &str Ndicho chidimbu chetani isingachinjikiMaonero eUTF-8 byte sequence yakachengetwa kumwe kunhu. Mienzaniso yakajairika inosanganisira zvinyorwa zvakafanana "Hola"izvo zviri zverudzi &'static str (Izvo zviripo kwehupenyu hwose hwepurogiramu uye zvakabatanidzwa mubhinari.) Zvimedu hazvisi izvo zve data; vanongonongedzera kwairi chete.

  Maitiro ekunyatso gadzirisa bhara rebasa mukati Windows 11: Zadzisa gwara uye matipi epamberi

String, kune rumwe rutivi, ndi tambo yake, inoshanduka uye yakagarwa mumurwiInogona kugadziridzwa, yakabatanidzwa, yakapfuura pakati pemabasa nekufambisa pfuma yayo, nezvimwewo. Inowanzoshandiswa kana iwe uchida kuvaka zvinyorwa zvine simba kana kuzvichengeta kwenguva refu mukati mezvivakwa.

Muzviitiko zvakawanda iwe unoshandura pakati peimwe neimwe: semuenzaniso, iwe uchagadzira a String::from("hola") kubva pachidimbukana kuti uchakwereta a &str a String nokupfuudza mareferensi emabasa anongoda kuverenga chete.

Uku kupatsanurwa pakati pedata remunhu uye rekukwereta ndiyo kiyi yekutarisira ndangariro uye inoenderera kune wasara mutauro: kuunganidzwa, zvimiro, uye enums zvinotevera pfungwa dzakafanana dzekuti ndiani muridzi uye ndiani anongotarisa.

Mabasa, kudzora kuyerera, uye makomendi

Mabasa muRust anotsanangurwa ne fn uye bvumira chirongwa kuti chirongedzerwe kuita reusable logical units. Basa rega rega rinotsanangura rudzi rwema parameter ayo uye rudzi rwekudzoka kwayo kutevera museve ->Kana iyo isingadzoki chinhu chine musoro, mhando yekubatana inofungidzirwa. ().

Chinhu chakakosha ndechekuti kutaura kwekupedzisira mune basa (kana chero bhuroka) isina semicolon inotorwa seyakajeka yekudzoka kukosha. Unogona kushandisa return zvekudzoka nekukurumidzaAsi mune idiomatic kodhi, iwe kazhinji unongosiya kutaura kwekupedzisira pasina. ;.

Kuyerera kwekutonga kunoitwa nemakirasi if/elsezvishwe loop, while y forMuRust, if Iri izwi rinodzosa kukoshasaka unogona kuishandisa zvakananga mu a letkana matavi achidzoka zvakafanana. Zvishwe for Ivo vanowanzo dzokorora pamusoro pemisara kana yekuunganidza iterators uye ndiyo inokurudzirwa sarudzo pachinzvimbo chemanyorero indexes.

Kunyora kodhi uye kuita kuti hupenyu huve nyore kune ani nani anouya mushure (kusanganisira iwe mumwedzi), unogona kushandisa line makomendi ne // kana block with /* ... */Mukuwedzera, Rust inopa zvinyorwa zvinyorwa ne /// izvo zvinova zvinyorwa zvinogadzirwa, kunyangwe izvo zvinoenderana zvakanyanya mumapurojekiti makuru.

Uridzi, kukweretesa, uye hupenyu hwese: hwaro hwekuchengetedza ndangariro

Pano tinosvika pamwoyo weRust's memory model: the system of muridzi, kukwereta, uye hupenyu hweseMitemo iyi inovimbisa kuti mareferensi anogara achishanda uye kuti ndangariro dzinoburitswa zvakachengeteka pasina marara akaunganidzwa.

Mitemo yekutanga yevaridzi iri nyore kutaura, kunyangwe ingave yakaoma kuisa mukati pakutanga: Kukosha kwega kwega kune muridzi mumwe.Panogona kuva nemuridzi mumwe chete panguva; uye kana muridzi anosiya chiyero chayo, kukosha kunoparadzwa uye ndangariro yayo inoburitswa. Izvi zvinoshanda, semuenzaniso, kune a String: pakupedzwa kwe block payakaziviswa, inosheedzera otomatiki drop iyo inosunungura murwi wendangariro.

Paunopa kukosha kwakakodzera kune imwe shanduko kana kupfuudza nekukosha kune basa, pfuma inofambiswa. Izvi zvinoreva kuti shanduko yepakutanga inorega kushanda mushure mekufambaIyi semantics yekufamba inodzivirira kuburitswa kaviri, nekuti hapana kana varidzi vaviri vanoedza kuburitsa imwechete sosi.

Kubvumira zvikamu zvakawanda zvechirongwa kuwana kukosha kwakafanana pasina kuchinja muridzi, Rust inosuma mareferensi uye kukwereta. Paunokwereta, unogadzira referensi &T (isingachinji) kana &mut T (mutable) kune kukosha pasina kutamisa muridzi. Chikwereti chinoganhurwa nemitemo yeanoongorora chikwereti., iyo inotarisa kuti mareferensi haapfuuri data raanongedza uye kuti zvinochinjika nekugovaniswa mapindiro hazvina kusanganiswa zvine njodzi.

Mitemo yechikwereti inogona kupfupikiswa sezvizvi: chero nguva, iwe unogona kunge uine mareferensi akawanda asingachinji kune kukosha, kana chirevo chimwe chete chinoshandukaAsi kwete zvose panguva imwe chete. Ikoku kunobvisa migariro yomujaho mundangariro inogoveranwa: kungave kune varavi vazhinji, kana kuti kune mumwe munyori ari oga; usambofa wavaverengi nevanyori panguva imwe chete pane data rimwechete panguva imwe chete.

Composite mhando: structs, enums, uye akangwara anonongedzera

Rust inopa nzira dzinoverengeka dzekuunganidza data rine hukama kuita zvimiro zvakapfuma, kutanga ne structsChimiro chinokutendera kuti utsanangure rudzi rwetsika ine minda ine mazita, semuenzaniso mushandisi ane email, zita, chimiro chechiitiko uye yekupinza counter.

Kugadzira muenzaniso wechimiro, iwe unozadza minda yayo yese, uye iwe unogona kumaka iyo inoshanduka iyo inayo seinochinjika kugadzirisa hunhu hwayo gare gare. Iko kune zvakare iyo struct yekuvandudza syntax, iyo inokutendera iwe kuvaka chiitiko chitsva nekushandisazve mamwe minda kubva kune iripo. ..otro_struct.

ari enums Ndiyo imwe mbiru yakakosha: ivo vanokutendera iwe kutsanangura mhando inogona kuve imwe yeakati wandei akasiyana akasiyana, imwe neimwe iine yayo yakabatana data kana isina iyo. Muenzaniso wekare ndeye enum yemakero eIP, ine musiyano mumwe V4 iyo inochengeta octet ina uye imwe V6 iyo inochengeta tambo ine IPv6 notation.

Rust's standard library inosanganisira maviri akakosha enums: Option<T> y Result<T, E>Yekutanga inomiririra kuvepo kana kusavapo kwekukosha (chimwe chinhu kana chinhu), uye inoshandiswa kudzivirira null anonongedzera; yechipiri modhi mashandiro anogona dzosa mhinduro chaiyo kana kukanganisa, inoda kuti kukanganisa kubata kuve kwakajeka uye kwakachengeteka.

Kugadzirisa ndangariro yakasimba uye kugovera data, Rust ane smart pointer Chemhondoro Box<T>, iyo inofambisa kukosha kune murwi uye inochengetedza hunhu hwakasiyana; Rc<T>, nhamba yereferensi yakagovaniswa yenzvimbo dzine tambo imwe chete; uye Arc<T>, yakafanana ne Rc asi yakachengeteka kune dzakawanda shinda. Kuzvishandisa nemazvo kwakakosha kana uchibatanidza ndangariro ine simba ne concurrency.

Cargo uye Crates Ecosystem

Cargo ndiyo glue inobata iyo Rust ecosystem pamwechete: inotarisira kuunganidza, kutsamira, uye purojekiti yehupenyuImwe neimwe purojekiti ine faira Cargo.toml iyo inoshanda sechiratidziro, ichizivisa zita, vhezheni, edition yemutauro, uye zvekunze zvinotsamira.

  Yakagadziriswa: Windows 10 Yemukati PCI Bhazi Mutyairi Kanganiso

Chikamu Iri faira rinokutendera iwe kunyora wechitatu-bato makereti neshanduro dzawo. Paunomhanya cargo build o cargo runCargo inodhawunirodha otomatiki makrete aya kubva ku crates.io, inoaunganidza, uye inoabatanidza nepurojekiti yako. Zviri nyore kuwedzera, semuenzaniso, majenareta enhamba dzisina kujairika, mawebhusaiti, kana maraibhurari ecryptographic.

Pakati pemirairo yakajairika ndeye cargo new kutanga mabhinari mapurojekiti o cargo new --lib kumaraibhurari; cargo build kuunganidza mudebug mode; cargo build --release kuwana yakagadziridzwa, yakanangana nekugadzira vhezheni; uye cargo test kumhanyisa bhatiri rebvunzo.

cargo check Inokodzera kutaurwa kwakakosha: inounganidza kodhi kusvika padanho repakati pasina kugadzira bhinari, inoita kuti ive. kurumidza kuona kukanganisa kwekuunganidzaYakanakira kudzokorodza nekukasira apo anokwereta anoongorora achinongedza matambudziko ane zvivakwa, mareferensi, uye hupenyu hwese.

Kutenda kune ino ecosystem, zvakajairika kuronga mapurojekiti ako sediki, akanyatsotsanangurwa makrete, kugovera kodhi pakati pavo uye kushandisazve mhinduro dzakagadzirwa nenharaunda. Kune yepamberi concurrency, semuenzaniso, iwe unenge uine makrete seTokio easynchronous programming kana crossbeam kune yakakwirira-inoshanda panguva imwe chete data zvimiro.

Concurrency muRust: shinda, mutexes, chiteshi, uye maatomu

Concurrency ndicho chimwe chezvikonzero nei Rust ichigadzira kufarira kwakawanda: inobvumidza iwe kutora mukana weakawanda-musimboti processors. pasina kuwira mune zvakajairwa zvikanganiso zveshinda uye yakagovaniswa ndangariroKana iri nguva yako yekutanga kusvika pamisoro iyi, zvinobatsira kusiyanisa pakati pepfungwa dzinoverengeka.

Concurrency inosanganisira kuita akawanda mabasa anopindirana nenguva, ingave pane imwechete kana akawanda cores. MuRust, unogona kugadzira tambo dzehurongwa kuti dziite basa dzakafanana, uye mutauro unotungamira iwe kuti uve nechokwadi chekuti kugovana data pakati pavo kwakachengeteka. Chikanganiso chekare ndiyo mamiriro emujaho, apo tambo mbiri dzinowana nekugadzirisa data panguva imwe chete, uye mhedzisiro inoenderana nehurongwa hwekuuraya-chimwe chinhu chakaoma kugadzirisa.

Kuti urongedze kuwana kune yakagovaniswa data, Rust inotsamira pane zvekutanga senge mutexiyo inovimbisa kusabatanidzwa: tambo imwe chete inogona kupinda muchikamu chakakosha panguva. Mubatanidzwa ne Arc<T> Kuti ugovane muridzi pakati petambo, zvinokwanisika kuvaka yakagovaniswa data zvimiro zvinoenderana nemitemo yemuridzi uye yekukwereta.

Imwe nzira yakajairwa yekukurukurirana kune tambo, inokurudzirwa zvakanyanya muRust, meseji inopfuura uchishandisa channelsMugero une magumo ekutumira uye magumo ekugamuchira; shinda dzinopfuudza mameseji (values) kuburikidza nayo, izvo zvinoderedza kushandiswa kwemutable yakagovaniswa ndangariro uye inorerutsa kufunga nezve mamiriro ehurongwa.

Paunenge uchinyura mukati meyakaderera-level concurrency, zvinotevera zvinoonekwa: maatomu marudziAtomic variables inowanikwa kuburikidza nemashandiro ayo asingaonekwe kubva pakuona kweshinda. Izvi zvinobvumira kushandiswa kwemakaunda akagovaniswa, mireza yenyika, mitsetse isina kukiya, nezvimwe. Kubata maatomu akasiyana kunoda kunzwisisa mamodheru endangariro uye mirairo yekuwana, saka vazhinji vanogadzira vanosarudza kutanga nemamutexes nemachaneli vasati vaongorora mune izvi zvinhu.

Matanho ekutanga uye zviwanikwa zvekudzidza concurrency uye atomu

Kana uri kupinda munhandare usina ruzivo rwekare, nzira yehungwaru yekuita ndeye kuvaka hwaro hwakasimba hwepfungwa dzakakwana usati wabata maturusi epamberi senge Rust's atomic types. Mabhuku akaita se "Programming Rust" anopa sumo zvishoma nezvishoma, asi zvakajairika kuti mabasa akatarisana nemhando dzeatomu uye makiyi aite seakaonda pakutanga.

Kuti zvive nyore, zvinokurudzirwa kutanga kujairana nazvo Tsika dzechinyakare, kusabatanidzwa, uye kutumira meseji muRust. Tamba nemienzaniso ye std::thread, std::sync::Mutex, std::sync::Arc uye nzira dze std::sync::mpsc Inokubatsira kuti unzwisise kuti iyo compiler inokutungamira sei uye kuti ndeapi zvikanganiso zvaanodzivirira.

Mukufanana, zvinokurudzirwa kuti uongorore zviwanikwa zvekutanga pane concurrency kazhinji, kunyangwe kana zvisina kutarisana neRust: kunzwisisa kuti mamiriro erudzi ndeapi, kuvharidzira kunoreva chii, chii chakagovaniswa chiyeuchidzo chinopesana nekupfuura kwemeseji, uye makiyi anoshandiswa sei. Kana iwo pfungwa dzave dzakasikwa kwauri, atomic fizikisi inomira kuve "mashiripiti matema". uye vanova chimwe chishandiso, chinongova chakapfava kwazvo.

Paunodzokera kune mamwe manyoro epamusoro-soro pamusoro peatomiki uye kukiya muRust, zvichave nyore kutevera kufunga kana iwe uchitonzwisisa kuti dambudziko ripi riri kuyedza kugadzirisa: kubva kune yakapusa shinda-yakachengeteka counter kuenda kukiya-yemahara zvimiro zvinoderedza kupokana.

Pakupedzisira, Rust inopa ese epamusoro-level primitives uye yakaderera-level maturusi, uye kiyi ndeyekugara uchisarudza yakachengeteka nhanho yekubvisa inogadzirisa dambudziko rako, uchitendeukira kune atomu kodhi. unsafe chete kana ichiwedzera kukosha uye iwe unonzwisisa zvizere zvazvinoreva.

Iyi yese ecosystem yemhando, muridzi, kukwereta, makrete, maturusi, uye concurrency primitives inosanganiswa kupa mutauro wekunyora. inokurumidza, yakasimba uye inochengetedza softwareIzvi zvinoderedza marudzi mazhinji ezvikanganiso zvakagara zvichitambudza masisitimu ehurongwa. Sezvo iwe uchidzidzira nemapurojekiti madiki, maekisesaizi seRustlings, uye zvinyorwa zviri pamutemo, aya pfungwa anozobva pakuita senge mitemo yakaoma kusvika pakuva mubatsiri anokuyambira dambudziko risati rasvika kugadzira.

Nhanganyaya kumutauro weRust nemuenzaniso-0
Nyaya inoenderana:
Yakazara Sumo yeRust: A Inoshanda Yekutanga Gwaro rine Mienzaniso