Bibliothèque standard Rust (std 1.99.1)
Présentation
Cette compétence regroupe ce que la documentation officielle de std dit qu'il est facile de mal comprendre : paniques, comportements par défaut surprenants, notes de plateforme, API déconseillées et les nouvelles API stables qui remplacent les anciens idiomes. Les bases que tout développeur Rust connaît sont laissées de côté. Chaque affirmation dans les fichiers references/ se termine par l'URL de la documentation dont elle provient, afin que vous puissiez rouvrir la page. https://doc.rust-lang.org/std/index.html
Version couverte
Rust std 1.99.1, canal stable. Les versions "depuis" proviennent des pages. Une API marquée comme nightly ici n'est pas utilisable sur la version stable 1.99.1, ne la suggérez pas. Avant d'utiliser une API stabilisée après la version minimale de Rust du projet, vérifiez cette version.
Comment naviguer
- Trouvez le domaine du code que vous écrivez ou révisez dans le tableau ci-dessous.
- Ouvrez uniquement ce fichier de référence. Chacun est autonome, avec une table des matières en haut.
- Appliquez sa règle par défaut. Ne prenez la porte de sortie que lorsque la condition énoncée est remplie.
- Lors d'une revue, vérifiez également le tableau "Anciens motifs" à la fin du fichier, et suggérez le remplacement.
Règles à plus haute valeur ajoutée
Command::output()etstatus()renvoientOklors d'une sortie non nulle. Vérifiez toujoursstatus.success(). https://doc.rust-lang.org/std/process/struct.Command.htmlPath::joinouPathBuf::pushavec un chemin absolu remplace tout le chemin de base. https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.pushenv::set_varestunsafeet non sûr dès que des threads s'exécutent (en dehors de Windows). Configurez les enfants avecCommand::env. https://doc.rust-lang.org/std/env/fn.set_var.html- Appelez
flush()sur unBufWriteravant le drop, qui ignore les erreurs de flush. https://doc.rust-lang.org/std/io/struct.BufWriter.html OpenOptions::write(true)sanstruncate(true)laisse l'ancienne fin. UtilisezFile::create_newpour une création atomique. https://doc.rust-lang.org/std/fs/struct.OpenOptions.html#method.write- Préférez
try_exists()àexists(), qui cache les erreurs en renvoyantfalse. https://doc.rust-lang.org/std/path/struct.Path.html#method.try_exists - L'init infaillible unique utilise
LazyLock(1.80). Une initialisation paniquante deLazyLockl'empoisonne pour toujours. L'init faillible utiliseOnceLock(1.70) : chargez d'abord, gérez l'erreur à l'extérieur, puisget_or_initouset, jamaisLazyLock<Result<..>>. https://doc.rust-lang.org/std/sync/struct.LazyLock.html#poisoning https://doc.rust-lang.org/std/sync/struct.OnceLock.html#method.get_or_init thread::scope(1.63) emprunte des variables locales dans les threads sansArcni'static. https://doc.rust-lang.org/std/thread/fn.scope.html- Une boucle
recv()ne se termine que lorsque chaqueSenderest libéré. Libérez letxoriginal. https://doc.rust-lang.org/std/sync/mpsc/index.html - Utilisez
Arc::into_inner, pasArc::try_unwrap(..).ok(), lorsque l'arc d'erreur est jeté. https://doc.rust-lang.org/std/sync/struct.Arc.html unwrap_or(f()),ok_or(..)etmap_or(..)évaluent leur argument avec empressement. Utilisez les formes_elsepour les appels. https://doc.rust-lang.org/std/option/enum.Option.html#method.unwrap_or- Formulez les messages
expectcomme ce qui "devrait" être vrai. https://doc.rust-lang.org/std/error/index.html#common-message-styles flatten()sur des élémentsResultignore les erreurs en silence. Collectez enResult<Vec<_>, _>. https://doc.rust-lang.org/std/result/index.html#iterating-over-result- Utilisez
extract_if(Vec 1.87, HashMap/HashSet 1.88, BTreeMap 1.91) pour retirer et conserver les éléments correspondants. Si l'itérateur est libéré ou court-circuite avant d'être épuisé, les éléments non visités restent dans la collection et ne sont jamais extraits. https://doc.rust-lang.org/std/vec/struct.Vec.html#method.extract_if - Triez les flottants avec
sort_unstable_by(|a, b| a.total_cmp(b)), ousort_bylorsque la stabilité est importante.total_cmpordonne -NaN, -inf, négatifs, -0.0, +0.0, positifs, +inf, +NaN, donc NaN va à une extrémité selon son signe et -0.0 se trie avant +0.0. https://doc.rust-lang.org/std/primitive.f64.html#method.total_cmp - L'indexation de chaîne prend des indices d'octets et panique en dehors d'une limite de caractère. Utilisez
get(..)oufloor_char_boundary(1.91). https://doc.rust-lang.org/std/string/struct.String.html CString::new(..).unwrap().as_ptr()en une seule expression devient pendante. Liez d'abord leCString. https://doc.rust-lang.org/std/ffi/struct.CString.html- Mesurez le temps avec
Instant.SystemTime::elapsedrenvoieResultcar l'horloge peut reculer. https://doc.rust-lang.org/std/time/struct.SystemTime.html - Implémentez
From, jamaisInto. UtilisezTryFromau lieu d'unasimprécis. https://doc.rust-lang.org/std/convert/trait.From.html - Choisissez explicitement le comportement de débordement :
checked_*,strict_*(1.91),saturating_*,wrapping_*. https://doc.rust-lang.org/std/primitive.i32.html#method.strict_add - Évitez
transmute. Utilisezfrom_le_bytes,as_bytes,addr(), les conversions. https://doc.rust-lang.org/std/mem/fn.transmute.html#alternatives
Références
| Fichier | Couvre |
|---|---|
| references/collections.md | Vec, slices, tableaux, VecDeque, BinaryHeap, HashMap/HashSet, API entry, BTreeMap, Hash |
| references/option-result-error.md | unwrap/expect, combinateurs empressés vs paresseux, nouvelles méthodes Option/Result, implémentations Error, ExitCode, paniques |
| references/iterators.md | Chaînes, non-terminaison et débordement, Peekable, from_fn, successors, implémentation d'Iterator |
| references/ownership-smart-pointers.md | Box, Rc, Weak, Cell, RefCell, OnceCell, LazyCell, Cow, mem::take, Pin |
| references/concurrency.md | Arc, Mutex, RwLock, empoisonnement, OnceLock, LazyLock, Condvar, mpsc, threads, scope, atomiques |
| references/strings-formatting.md | Indexation String/str, casse, syntaxe de format, implémentations Display/Debug, OsString, CString |
| references/io-fs-path.md | BufReader/BufWriter, OpenOptions, TOCTOU, Read/Write/BufRead, io::Error, Path/PathBuf |
| references/process-env-net-time.md | Command, Child, pipes, particularités Windows, exit, env, TcpListener/TcpStream, Instant, SystemTime, Duration |
| references/traits-conversions.md | From/Into/TryFrom, AsRef/Borrow, Clone/Copy/Default, PartialEq/Ord, Drop, Deref, Fn, Any, PhantomData |
| references/unsafe-ptr-num.md | Validité des pointeurs, provenance, NonNull, from_raw_parts, MaybeUninit, transmute, débordement, flottants, astuces |
Toutes les pages lues sont listées dans SOURCES.md.