Biblioteca estándar de Rust (std 1.99.1)
Resumen
Este skill contiene lo que la documentación oficial de std dice que es fácil de malinterpretar: pánicos, valores predeterminados sorprendentes, notas de plataforma, API desaconsejadas y las API estables más nuevas que reemplazan los patrones antiguos. Se omite lo básico que todo desarrollador de Rust ya conoce. Cada afirmación en references/ termina con la URL del documento del que proviene, para que puedas volver a abrir la página. https://doc.rust-lang.org/std/index.html
Versión cubierta
Rust std 1.99.1, canal estable. Las versiones "desde" provienen de las páginas. Una API marcada como nightly aquí no es utilizable en estable 1.99.1, así que no la sugieras. Antes de usar una API estabilizada después de la versión mínima de Rust del proyecto, verifica esa versión.
Cómo navegar
- Encuentra el dominio del código que estás escribiendo o revisando en la tabla a continuación.
- Abre solo ese archivo de referencia. Cada uno es independiente, con una tabla de contenido al inicio.
- Aplica su valor predeterminado. Toma la salida de emergencia solo cuando se cumpla la condición indicada.
- En una revisión, también revisa la tabla "Patrones antiguos" al final del archivo y sugiere el reemplazo.
Reglas de mayor valor
Command::output()ystatus()devuelvenOken una salida distinta de cero. Siempre verificastatus.success(). https://doc.rust-lang.org/std/process/struct.Command.htmlPath::joinoPathBuf::pushcon una ruta absoluta reemplaza toda la ruta base. https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.pushenv::set_varesunsafee inseguro una vez que los hilos se ejecutan (fuera de Windows). Configura los hijos conCommand::env. https://doc.rust-lang.org/std/env/fn.set_var.html- Llama a
flush()en unBufWriterantes del destructor, que ignora los errores de vaciado. https://doc.rust-lang.org/std/io/struct.BufWriter.html OpenOptions::write(true)sintruncate(true)deja la cola antigua. UsaFile::create_newpara creación atómica. https://doc.rust-lang.org/std/fs/struct.OpenOptions.html#method.write- Prefiere
try_exists()sobreexists(), que oculta errores comofalse. https://doc.rust-lang.org/std/path/struct.Path.html#method.try_exists - La inicialización infalible única usa
LazyLock(1.80). Una inicialización deLazyLockque entra en pánico lo envenena para siempre. La inicialización falible usaOnceLock(1.70): carga primero, maneja el error fuera, luegoget_or_initoset, nuncaLazyLock<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) toma prestados locales en hilos sinArcni'static. https://doc.rust-lang.org/std/thread/fn.scope.html- Un bucle
recv()termina solo cuando se descarta cadaSender. Descarta eltxoriginal. https://doc.rust-lang.org/std/sync/mpsc/index.html - Usa
Arc::into_inner, noArc::try_unwrap(..).ok(), cuando el arc de error se descarta. https://doc.rust-lang.org/std/sync/struct.Arc.html unwrap_or(f()),ok_or(..)ymap_or(..)evalúan su argumento de manera ansiosa. Usa las formas_elsepara llamadas. https://doc.rust-lang.org/std/option/enum.Option.html#method.unwrap_or- Redacta los mensajes de
expectcomo lo que "debería" cumplirse. https://doc.rust-lang.org/std/error/index.html#common-message-styles flatten()sobre elementosResultdescarta errores silenciosamente. Recoge enResult<Vec<_>, _>. https://doc.rust-lang.org/std/result/index.html#iterating-over-result- Usa
extract_if(Vec 1.87, HashMap/HashSet 1.88, BTreeMap 1.91) para eliminar y conservar elementos coincidentes. Si el iterador se descarta o se cortocircuita antes de agotarse, los elementos no visitados permanecen en la colección y nunca se extraen. https://doc.rust-lang.org/std/vec/struct.Vec.html#method.extract_if - Ordena flotantes con
sort_unstable_by(|a, b| a.total_cmp(b)), osort_bycuando la estabilidad importa.total_cmpordena -NaN, -inf, negativos, -0.0, +0.0, positivos, +inf, +NaN, por lo que NaN va a un extremo según su signo y -0.0 se ordena antes que +0.0. https://doc.rust-lang.org/std/primitive.f64.html#method.total_cmp - El corte de strings toma índices de bytes y entra en pánico si no está en un límite de carácter. Usa
get(..)ofloor_char_boundary(1.91). https://doc.rust-lang.org/std/string/struct.String.html CString::new(..).unwrap().as_ptr()en una sola expresión queda colgando. Vincula elCStringprimero. https://doc.rust-lang.org/std/ffi/struct.CString.html- Mide el tiempo con
Instant.SystemTime::elapseddevuelveResultporque el reloj puede retroceder. https://doc.rust-lang.org/std/time/struct.SystemTime.html - Implementa
From, nuncaInto. UsaTryFromen lugar de unascon pérdida. https://doc.rust-lang.org/std/convert/trait.From.html - Elige el comportamiento de desbordamiento explícitamente:
checked_*,strict_*(1.91),saturating_*,wrapping_*. https://doc.rust-lang.org/std/primitive.i32.html#method.strict_add - Evita
transmute. Usafrom_le_bytes,as_bytes,addr(), conversiones. https://doc.rust-lang.org/std/mem/fn.transmute.html#alternatives
Referencias
| Archivo | Cubre |
|---|---|
| references/collections.md | Vec, slices, arrays, VecDeque, BinaryHeap, HashMap/HashSet, API entry, BTreeMap, Hash |
| references/option-result-error.md | unwrap/expect, combinadores ansiosos vs perezosos, nuevos métodos de Option/Result, implementaciones de Error, ExitCode, pánicos |
| references/iterators.md | Cadenas, no terminación y desbordamiento, Peekable, from_fn, successors, implementación de Iterator |
| references/ownership-smart-pointers.md | Box, Rc, Weak, Cell, RefCell, OnceCell, LazyCell, Cow, mem::take, Pin |
| references/concurrency.md | Arc, Mutex, RwLock, envenenamiento, OnceLock, LazyLock, Condvar, mpsc, hilos, scope, atómicos |
| references/strings-formatting.md | Indexación de String/str, mayúsculas/minúsculas, sintaxis de format, implementaciones de 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, peculiaridades de 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 | Validez de punteros, procedencia, NonNull, from_raw_parts, MaybeUninit, transmute, desbordamiento, flotantes, sugerencias |
Todas las páginas leídas están listadas en SOURCES.md.