Az intelligens mutatók további előnyöket kínálnak a hagyományos mutatókkal szemben. Itt van minden, amit tudnia kell a Rust intelligens mutatóiról.
A memóriakezelés a Rust egyik értékesítési pontja, különösen azért, mert a biztonság nem sérül. A Rust tulajdonosi rendszere lehetővé teszi a fordító számára, hogy garantálja a kód biztonságát és a memóriahibáktól, például a lógó mutatóktól és a memóriaszivárgásoktól való mentességet.
A Rust intelligens mutatókat is biztosít további metaadatokkal és képességekkel a hagyományos mutatókon túl. Az intelligens mutatók hasznosak a memóriaszivárgások kezelésére.
Mik azok az intelligens mutatók a rozsdában?
Az intelligens mutatók az egyik Rust adattípusai amely kiterjeszti a szokásos mutatók képességeit olyan további funkciókkal, mint a túlterhelt operátorok, destruktorok és az automatikus memóriakezelés.
A Rust struktúrákat használ az intelligens mutatók végrehajtására; így az intelligens mutatók tulajdonosi képességekkel is rendelkeznek.
Amikor összekapcsolja a dinamikusan lefoglalt adatokat tartalmazó memóriát intelligens mutatókkal, a rendszer automatikusan felszabadítja azokat. Az intelligens mutatók funkciót biztosítanak a
Rust tárgy élettartama, így praktikusak az olyan hibák megelőzésére, mint a nullmutató hivatkozások megszüntetése és a memóriaszivárgás, amelyek népszerűek más alacsony szintű nyelvekben, például a C-ben és a C++-ban.Az intelligens mutatók használatának előnyei
Íme néhány előnye az intelligens mutatók használatának:
- Automatikus memóriakezelés: Az intelligens mutatók automatikus memóriakezelést biztosítanak, beleértve a kiosztást és a felosztást, ellentétben a normál mutatókkal végzett kézi memóriakezeléssel.
- Fokozott biztonság: Az intelligens mutatók érvényesítik a tulajdonjog szemantikáját, biztosítva, hogy egyszerre csak egy tulajdonos férhessen hozzá az erőforrásokhoz, megakadályozva az adatnyomkövetést és az egyidejűséggel kapcsolatos hibákat.
- Rugalmasság: A Rust több intelligens mutatót biztosít, mindegyik a saját készletével tulajdonosi szemantika a biztonságos kód rugalmas megírásához.
- Erőforrás menedzsment: Intelligens mutatók segítségével kezelhet más erőforrásokat, például fájlkezelőket és hálózati socketeket az erőforrások beágyazásával egy intelligens mutatón belül, amely megkönnyíti az életciklusuk kezelését, és biztosítja, hogy megfelelően zárják és elengedik használat.
- Jobb teljesítmény: Az intelligens mutatók javítják a teljesítményt azáltal, hogy csökkentik a memóriamásolást és a lefoglalást – az intelligens mutatók használatából eredő kisebb memóriaterület nagyobb teljesítményt eredményez.
Az intelligens mutatók közepes és nagy méretű alkalmazásokhoz alkalmasak, különösen olyan esetekben, amikor a memóriakezelés kritikus.
Az intelligens mutatók típusai
A Rust többféle intelligens mutatót kínál, beleértve Doboz, Rc, RefCell, és Mutex.
1. A Box Smart Pointer
A Doboz A Smart Pointer a Rust legegyszerűbb és leggyakoribb intelligens mutatója. A Doboz Az intelligens mutató segít az értékek kiosztásában a kupacban, és keretes mutatót hoz létre a hozzáférhetőség érdekében.
A Doboz A Smart Pointer praktikus a dinamikus memóriakiosztáshoz, amikor biztosítania kell, hogy a memória automatikusan fel legyen szabadítva, ha a mutatók kívül esnek.
Így deklarálhatja és használhatja a Doboz mutató:
fnfő-(){
// a doboz intelligens mutató új példánya
hagyja x = Doboz::új(5);
println!(x)
}
A Doboz A típus a Rust előjátékának része, így a többi intelligens mutatótól eltérően nem kell importálnia a típust.
A x változó az a Doboz mutató az 5 egész számra mutat. A Rust lefoglalja a memóriát a kupacban lévő értékhez, és automatikusan felszabadítja, ha a változó hatókörén kívül esik.
2. Az Rc Smart Pointer
A Rc A (Referenciaszámított) intelligens mutató funkcionalitást biztosít a megosztott tulajdon értékeinek létrehozásához. A Rc Az intelligens mutatók nyomon követik az értékre mutató hivatkozások számát, és felszabadítják az értéket, ha az utolsó hivatkozás kívül esik.
A Rc Az intelligens mutató akkor hasznos, ha meg kell osztania egy érték tulajdonjogát a program több részében elérhető hozzáférés érdekében.
Kijelenteni egy Rc smart pointer, akkor importálja a Rc struct a szabványos könyvtárból, deklaráljon egy újat Rc mutatót a új függvényt, és klónozzuk a mutatóváltozót a klón változó.
használat std:: rc:: Rc;
fnfő-() {
// az RC intelligens mutató új példánya
hagyja x = Rc:: new(5);
hagyja y = Rc:: klón(&x);
println!("x = {}, y = {}", x, y);
}
A x változó a Rc mutató változó, és a y A változó egy klón, amely hozzáfér a memóriában lévő értékhez. A referenciaszám kettő, és az érték felszabadításra kerül a memóriából, ha a változók nem tartoznak a hatókörbe.
3. A RefCell Smart Pointer
A RefCell Az intelligens mutató belső változtathatóságot biztosít, amely lehetővé teszi a változtathatatlan és változtatható hivatkozások egymás mellett létezését mindaddig, amíg adott időnként egy változtatható hivatkozás van.
A RefCell Az intelligens mutató praktikus a változtatható hivatkozások tulajdonában lévő értékek mutálásához.
A Refcell A függvény nem része a Rust előjátékának, ezért az intelligens mutató használatához importálnia kell a struktúrát a szabványos könyvtárból.
használat std:: cella:: RefCell;
fnfő-(){
// a Refcell intelligens mutató új példánya
hagyja x = RefCell:: new(5);hagyja y = x.kölcsön();
hagyja z = x.borrow_mut();println!("y = {}", *y);
println!("z = {}", *z);
}
A Refcell smart pointer tartalmazza az értéket, és a y A változó az értékre való állandó hivatkozás. A kölcsön_mut függvény módosítható hivatkozást hoz létre az értékre.
A program biztonságos, ha egyszerre csak egy változtatható hivatkozás van.
4. A Mutex Smart Pointer
A Mutex Az intelligens mutató kölcsönös kizárásokat biztosít. A Mutex Az intelligens pointer praktikus az egyidejű programok több szálon keresztüli értékeinek elérésének szinkronizálásához.
A Mutex Az intelligens mutató kölcsönös kizárást biztosít annak biztosítására, hogy csak egy szál férhessen hozzá az értékhez, miközben megakadályozza az adatnyomkövetést.
Importálnia kell a Mutex struct és hozzon létre egy új példányt a új funkciót használni Mutex Intelligens mutató rozsda színben.
használat std:: szinkron:: Mutex;
fnfő-() {
// a mutex mutató új példánya
hagyja számláló = Mutex:: new(0);{
hagyjamut szám = counter.lock().unwrap();
*szám += 1;
}
println!("Eredmény: {}", *counter.lock().unwrap());
}
A számláló változó az új Mutex példa. A fő- függvény zárolást szerez a mutexen a zár módszere a Mutex példa. A zár lehetővé teszi a számláló értékének biztonságos módosítását a zár feloldása és az érték kinyomtatása előtt.
A Mutex típus garantálja, hogy csak egy szál férhet hozzá a megosztott erőforrásokhoz (ebben az esetben a számláló változó), és egyszerre módosítsa az értékét. A kölcsönös kizárás biztosítja, hogy a megosztott erőforrásokhoz való egyidejű hozzáférés soros legyen az adatnyomkövetések és más egyidejűségi problémák elkerülése érdekében.
A Rust tulajdonosi modellje garantálja a memória biztonságát
Az intelligens mutatók a Rust egyik megközelítése a memóriabiztonság és a rugalmasság terén. A Rust tulajdonosi modellje biztosítja, hogy a programok biztonságosan használják a memóriát a kölcsönzés-ellenőrzővel a fordítási időben.
A kölcsönzés-ellenőrző a Rust tulajdonosi modelljének kulcsfontosságú jellemzője, amely szigorú szabályokat ír elő a memória hozzáférhetőségére és módosítására vonatkozóan.