Rust-Standardbibliothek (std 1.99.1)
Übersicht
Dieser Skill enthält, was die offizielle std-Dokumentation sagt und was leicht falsch gemacht werden kann: Panics, überraschende Standardwerte, Plattformhinweise, veraltete APIs und die neueren stabilen APIs, die alte Redewendungen ersetzen. Grundlagen, die jeder Rust-Entwickler kennt, werden weggelassen. Jede Behauptung in references/ endet mit der URL der Dokumentation, aus der sie stammt, sodass du die Seite erneut öffnen kannst. https://doc.rust-lang.org/std/index.html
Abgedeckte Version
Rust std 1.99.1, stabiler Kanal. Die Angabe "Since" stammt von den jeweiligen Seiten. Eine hier als nightly markierte API ist auf stabil 1.99.1 nicht nutzbar – schlage sie daher nicht vor. Überprüfe vor der Verwendung einer API, die nach der minimalen Rust-Version des Projekts stabilisiert wurde, ob diese Version verwendet wird.
Navigation
- Finde den Bereich des Codes, den du schreibst oder überprüfst, in der Tabelle unten.
- Öffne nur diese Referenzdatei. Jede Datei ist in sich abgeschlossen und enthält oben ein Inhaltsverzeichnis.
- Wende die dort genannte Standardregel an. Nutze die Ausnahme nur, wenn die angegebene Bedingung zutrifft.
- Überprüfe bei einer Code-Review auch die Tabelle "Alte Muster" am Ende der Datei und schlage die Ersetzung vor.
Wertvollste Regeln
Command::output()undstatus()gebenOkbei einem Exit-Code ungleich null zurück. Überprüfe immerstatus.success(). https://doc.rust-lang.org/std/process/struct.Command.htmlPath::joinoderPathBuf::pushmit einem absoluten Pfad ersetzt den gesamten Basispfad. https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.pushenv::set_varistunsafeund unsicher, sobald Threads laufen (außerhalb von Windows). Konfiguriere Kindprozesse mitCommand::env. https://doc.rust-lang.org/std/env/fn.set_var.html- Rufe
flush()auf einemBufWritervor dem Drop auf, da Drop Fehler beim Spülen ignoriert. https://doc.rust-lang.org/std/io/struct.BufWriter.html OpenOptions::write(true)ohnetruncate(true)lässt den alten Rest bestehen. VerwendeFile::create_newfür atomare Erstellung. https://doc.rust-lang.org/std/fs/struct.OpenOptions.html#method.write- Bevorzuge
try_exists()gegenüberexists(), das Fehler alsfalseverbirgt. https://doc.rust-lang.org/std/path/struct.Path.html#method.try_exists - Für unfehlbare einmalige Initialisierung verwende
LazyLock(1.80). Eine panicendeLazyLock-Initialisierung vergiftet sie für immer. Fehlbare Initialisierung nutztOnceLock(1.70): zuerst laden, den Fehler außerhalb behandeln, dannget_or_initoderset, niemalsLazyLock<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) leiht lokale Variablen in Threads ohneArcoder'static. https://doc.rust-lang.org/std/thread/fn.scope.html- Eine
recv()-Schleife endet nur, wenn jederSendergedroppt wurde. Droppe den ursprünglichentx. https://doc.rust-lang.org/std/sync/mpsc/index.html - Verwende
Arc::into_inner, nichtArc::try_unwrap(..).ok(), wenn der Fehler-Arc verworfen wird. https://doc.rust-lang.org/std/sync/struct.Arc.html unwrap_or(f()),ok_or(..)undmap_or(..)werten ihr Argument eifrig aus. Verwende die_else-Formen für Funktionsaufrufe. https://doc.rust-lang.org/std/option/enum.Option.html#method.unwrap_or- Formuliere
expect-Nachrichten so, dass sie beschreiben, was "gelten soll". https://doc.rust-lang.org/std/error/index.html#common-message-styles flatten()überResult-Elemente unterdrückt Fehler stillschweigend. Sammle stattdessen inResult<Vec<_>, _>. https://doc.rust-lang.org/std/result/index.html#iterating-over-result- Verwende
extract_if(Vec 1.87, HashMap/HashSet 1.88, BTreeMap 1.91), um passende Elemente zu entfernen und zu behalten. Wird der Iterator gedroppt oder vorzeitig abgebrochen, bleiben die nicht besuchten Elemente in der Sammlung und werden nie extrahiert. https://doc.rust-lang.org/std/vec/struct.Vec.html#method.extract_if - Sortiere Fließkommazahlen mit
sort_unstable_by(|a, b| a.total_cmp(b))odersort_by, wenn Stabilität wichtig ist.total_cmpordnet -NaN, -inf, negative Zahlen, -0.0, +0.0, positive Zahlen, +inf, +NaN, sodass NaN je nach Vorzeichen an ein Ende sortiert wird und -0.0 vor +0.0 steht. https://doc.rust-lang.org/std/primitive.f64.html#method.total_cmp - String-Slicing verwendet Byte-Indizes und panict, wenn die Grenze nicht auf einer Zeichengrenze liegt. Verwende
get(..)oderfloor_char_boundary(1.91). https://doc.rust-lang.org/std/string/struct.String.html CString::new(..).unwrap().as_ptr()in einem Ausdruck erzeugt einen baumelnden Zeiger. Binde dasCStringzuerst an eine Variable. https://doc.rust-lang.org/std/ffi/struct.CString.html- Miss Zeit mit
Instant.SystemTime::elapsedgibtResultzurück, weil die Uhr zurückgehen kann. https://doc.rust-lang.org/std/time/struct.SystemTime.html - Implementiere
From, niemalsInto. VerwendeTryFromanstelle eines verlustbehaftetenas. https://doc.rust-lang.org/std/convert/trait.From.html - Wähle Überlaufverhalten explizit:
checked_*,strict_*(1.91),saturating_*,wrapping_*. https://doc.rust-lang.org/std/primitive.i32.html#method.strict_add - Vermeide
transmute. Verwendefrom_le_bytes,as_bytes,addr(), Casts. https://doc.rust-lang.org/std/mem/fn.transmute.html#alternatives
Referenzen
| Datei | Deckt ab |
|---|---|
| references/collections.md | Vec, Slices, Arrays, VecDeque, BinaryHeap, HashMap/HashSet, Entry-API, BTreeMap, Hash |
| references/option-result-error.md | unwrap/expect, eifrige vs. faule Kombinatoren, neuere Option/Result-Methoden, Error-Implementierungen, ExitCode, Panics |
| references/iterators.md | Ketten, Nicht-Terminierung und Überlauf, Peekable, from_fn, successors, Iterator implementieren |
| references/ownership-smart-pointers.md | Box, Rc, Weak, Cell, RefCell, OnceCell, LazyCell, Cow, mem::take, Pin |
| references/concurrency.md | Arc, Mutex, RwLock, Poisoning, OnceLock, LazyLock, Condvar, mpsc, Threads, Scope, Atomics |
| references/strings-formatting.md | String/str-Indizierung, Groß-/Kleinschreibung, Format-Syntax, Display/Debug-Implementierungen, 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, Windows-Besonderheiten, 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 | Pointer-Gültigkeit, Provenance, NonNull, from_raw_parts, MaybeUninit, transmute, Überlauf, Fließkommazahlen, Hinweise |
Alle gelesenen Seiten sind in SOURCES.md aufgelistet.