Az okos mutatók elég gyakran használnak nem biztonságos (unsafe) kódot. Ahogy korábban említettük, ezek gyakran használt eszközök, ha a legközvetlenebb módon kell a memóriával dolgozni.
Mit jelent az, hogy nem biztonságos kód? A nem biztonságos kódok ugyanúgy működnek, mint a rendes Rust, azzal a kivétellel, hogy van néhány képessége, amire a Rust fordító nem tud semmiféle garanciát adni.
Az egyik legfontosabb ilyen képesség a nyers mutatók lekövetése. Ez azt jelenti, hogy
készítünk egy nyers mutatót, ami mutat valahova a memóriában és kijelentjük róla, hogy amire
mutat, az "márpedig igenis érvényes adat!" és olyan formára hozzuk, amivel tudunk dolgozni (pl.:
*const u8
-ból u8
-at csinálunk).
A Rust nem képes a memória minden bájtjának jelentését követni. Mivel nem képes garantálni, hogy
egy nyers mutatóként használt tetszőleges szám által hivatkozott memóriaterületen mit fogunk
találni, ezt a memória-hozzáférés műveletet unsafe { ...}
blokkba kell tennünk.
Bár az okos mutatók rengetegszer követnek nyers mutatókat, ezek a típusok meglehetősen alaposan ellenőrzött eszközök és elég biztosak lehetünk benne, hogy biztonságosak.