El enfoque único de la lenguaje de programación óxido da como resultado un mejor código con menos compromisos que C, C++, Go y otros lenguajes que probablemente utilice. También se actualiza periódicamente, a menudo cada mes.
Dónde descargar la última versión de Rust
Si ya tiene una versión anterior de Rust instalada a través de Rustup, puede acceder a la última versión mediante el siguiente comando:
$ rustup update stable
Las nuevas características de Rust 1.75.0
Introducido el 28 de diciembreCompatible con Rust 1.75.0 el uso de asyn fn
y -> impl Trait
en rasgos. Sin embargo, la versión inicial viene con algunas limitaciones, que se espera que se eliminen en versiones futuras.
También en Rust 1.75.0, el compilador continúa volviéndose más rápido, y la versión incluye la aplicación de Optimizador de pernos a lanzamientos binarios, lo que aporta una mejora del tiempo transcurrido del 2% en los puntos de referencia. BOLT optimiza el diseño del librustc_driver.so
Biblioteca que contiene la mayor parte del código Rustc, para una mejor utilización de la caché.
Además, el equipo de desarrollo de Rust ahora está construyendo Rustc con -Ccodegen-units=1
, ofreciendo más oportunidades para optimizaciones en LLVM. Esta optimización ha supuesto una mejora independiente del 1,5% en los puntos de referencia.
Rust 1.75.0 también presenta API estabilizadas que incluyen Atomic*::from_ptr
, FileTimes
, FileTimesExt
, File::set_modified
, File::set_times
y IpAddr::to_canonical
.
Las nuevas características de Rust 1.74.0
Presentado el 16 de noviembre de Óxido 1.74.0 Se centra en el administrador de paquetes Cargo con varias características. Rust 1.74.0 ofrece configuración de pelusa a través de Cargo. El manifiesto Cargo.toml ahora admite un [lints] tabla para configurar el nivel de informes (prohibir, denegar, advertir, permitir) para pelusas del compilador y otras herramientas. Con esta capacidad, no es necesario configurar RUSTFLAGS
(-F
, -D
, -W
, -A
), lo que afectaría una compilación completa, o usaría atributos de nivel de creación como:
#![forbid(unsafe_code)]#![deny(clippy::enum_glob_use)]
Los desarrolladores ahora pueden escribir esos atributos en un manifiesto de paquete para que Cargo los maneje:
[lints.rust]unsafe_code = "forbid" [lints.clippy]enum_glob_use = "deny"
Estos también se pueden configurar en un [workspace.lints]
tabla, luego heredada por [lints] workspace = true
como otras configuraciones del espacio de trabajo. Cargo rastrea los cambios en estas configuraciones al decidir qué cajas reconstruir.
Otras capacidades relacionadas con Cargo destacadas en Rust 1.74.0 incluyen proveedores de credenciales y registros privados autenticados. Los proveedores de credenciales permiten la configuración de cómo Cargo obtiene las credenciales para un registro. Se incluyen proveedores integrados para el almacenamiento secreto seguro relacionado con el sistema operativo en Linux, Windows y macOS. Se pueden desarrollar proveedores personalizados para admitir métodos arbitrarios de almacenamiento o generación de tokens.
Los registros ahora pueden requerir opcionalmente autenticación para todas las operaciones, no solo para la publicación. Esto permite que los registros de carga privados proporcionen un alojamiento más seguro de las cajas. El uso de registros privados requiere la configuración de un proveedor de credenciales.
Rust 1.74.0 soluciona una situación en la que se recibían errores de que «un tipo de devolución no puede contener una proyección o Self
que hace referencia a vidas desde un ámbito principal”. El compilador ahora permite mencionar Self
y tipos asociados en tipos de retorno opacos, como async fn
y -> impl Trait
. Esta característica acerca a Rust a cómo se podría esperar que funcione el lenguaje, dijo el equipo de lanzamiento de Rust. Esta funcionalidad tenía una puerta de características inestable porque su implementación originalmente no manejaba adecuadamente las vidas útiles capturadas. Una vez que se solucionó, se le dio tiempo para asegurarse de que estuviera en buen estado.
Rust 1.74.0 estabiliza una serie de API como core::num::Saturating
, std::io::Error::other
y impl_TryFrom<char> for u16
. El lanzamiento también aumenta los requisitos mínimos para las plataformas Apple a macOS 10.12 Sierra, iOS 10 y tvOS 10.
Las nuevas características de Rust 1.73.0
Rust 1.73.0, publicado el 5 de octubre, trae mensajes de pánico más limpios. La salida producida por el controlador de pánico predeterminado se ha modificado para colocar los mensajes de pánico en su propia línea en lugar de entre comillas. Esto puede hacer que los mensajes de pánico sean más fáciles de leer, dijo el equipo de lanzamiento de Rust. Además, los mensajes de pánico producidos por assert-eg
y assert-ne
Se han modificado, moviendo el mensaje personalizado y eliminando algunos signos de puntuación innecesarios.
Rust 1.73.0 también incluye inicialización local de subprocesos. LocalKey<Cell<T>>
y LocalKey<RefCell<T>>
ahora se puede manipular directamente con get()
, set()
y replace()
métodos en lugar de saltar a través de un with(|inner| …)
cierre según sea necesario para uso general LocalKey
trabajar. LocalKey<T>
es el tipo de thread_local!
estática. Los nuevos métodos hacen que el código común sea más conciso y evitan ejecutar código de inicialización adicional para el valor predeterminado especificado en thread_local!
para hilos nuevos. Óxido 1.73 también estabiliza una serie de API.
Las nuevas características de Rust 1.72.0
Anunciado el 24 de agostoRust 1.72.0 permite a los desarrolladores habilitar código condicionalmente usando el cfg
operador, para verificaciones condicionales de configuración, para proporcionar ciertas funciones solo con ciertas características de la caja o solo en plataformas particulares. Anteriormente, los elementos deshabilitados de esta manera eran efectivamente invisibles para el compilador. Con Rust 1.72.0, el compilador recordará el nombre y cfg
condiciones de dichos artículos. Podría informar, por ejemplo, si una función que un desarrollador intentó llamar no está disponible porque se debe habilitar una función de caja.
También en Rust 1.72.0, const
El tiempo de evaluación ahora es ilimitado. Rust limitaba anteriormente el número máximo de declaraciones ejecutadas como parte de cualquier evaluación constante dada, para evitar que las proporcionadas por el usuario const
la evaluación entre en un bucle infinito en tiempo de compilación o tome un tiempo ilimitado en la compilación. Los desarrolladores ahora pueden hacer una cantidad ilimitada de const
evaluación en tiempo de compilación.
En otras partes de Rust 1.72.0, se han incorporado varias pelusas de Clippy a Rustc. Y se han estabilizado varias API, incluidas CStr::from_bytes_with_nul
y CStr::to_Bytes
.
En una versión futura, el equipo de desarrollo de Rust planea aumentar la versión mínima admitida de Windows a Windows 10. Está previsto que Rust 1.75 sea la última versión de Rust compatible oficialmente con Windows 7, Windows 8 y Windows 8.1.
Rust 1.72.0 sigue Rust 1.71.1 del 3 de agosto, que solucionó una situación en la que el administrador de paquetes Cargo no respetaba el desenmascaramiento al extraer dependencias, lo que podría haber permitido a un atacante local editar el caché del código fuente extraído de otro usuario. Rust 1.71.1 también solucionó varias regresiones introducidas en Rust 1.71.0, incluida la interrupción de la finalización de Bash para los usuarios del instalador de la cadena de herramientas Rustup.
Las nuevas características de Rust 1.71.0
Rust 1.71.0 se introdujo el 13 de julio. Con esta versión, Rust en plataformas Windows admite el uso de funciones de bibliotecas dinámicas sin necesidad de que esas bibliotecas estén disponibles en el momento de la compilación, utilizando un nuevo kind="raw-dylib”"
opción para #https://www.infoworld.com/article/3267624/whats-new-in-the-rust-language.html#tk.rss_all
. Esto evita que los usuarios tengan que instalar esas bibliotecas, lo cual es particularmente un problema para la compilación cruzada, y evita tener que enviar versiones auxiliares de las bibliotecas en cajas para vincularlas. Rust 1.71.0 también admite símbolos de enlace proporcionados por DLL mediante símbolos ordinales en lugar de símbolos con nombre, a través de un nuevo #link_ordinal
atributo.
También nuevo y mejorado en Rust 1.71.0:
- Para la visualización de depuración, se estabiliza el soporte para un nuevo atributo,
#[debug_visualizer(natvis_file = "...")]
y#[debug_visualizer(gdb_script_file = "...")]
, que permite incrustar descripciones del marco XML de Natvis y scripts GDB en las bibliotecas de Rust para mejorar la salida del depurador al inspeccionar las estructuras de datos creadas por esas bibliotecas. Rust ha empaquetado scripts similares durante algún tiempo para la biblioteca estándar. Esta característica hace posible que los escritores de bibliotecas brinden una experiencia similar a los usuarios. - Rust 1.71.0 se estabiliza
c-unwind
y otra-unwind
variantes ABI con sufijo. Cada ABI es el equivalente del mismo ABI sin-unwind
excepto que con-unwind
el comportamiento se define como seguro cuando una operación de desenredado (una excepción de pánico o de estilo C++) cruza el límite de ABI. Parapanic-unwind
, esta es una forma válida de permitir que las excepciones de un idioma se desenrollen en otro idioma sin finalizar el proceso, siempre y cuando la excepción se detecte en el mismo idioma en el que se originó. Parapanic=abort
, esto normalmente cancelará el proceso inmediatamente. Para esta estabilización inicial, no se realizan cambios en las ABI existentes; relajarse a través de ellos sigue siendo un comportamiento indefinido. Una versión futura de Rust modificará estas ABI para que coincidan con el comportamiento especificado en un RFC relacionado como parte final de la estabilización de esta característica, generalmente abortando en el límite. Se anima a los desarrolladores a comenzar a utilizar nuevas variantes de ABI de desenredado en su código para permanecer preparados para el futuro si deben desenredar más allá de los límites de ABI. - Varios
*-linux-musl
Los objetivos se enviarán con musl 1.2.3, una implementación de la biblioteca estándar C construida sobre la API de llamadas del sistema Linux. No se espera que esto afecte a la mayoría de los usuarios. - Se han estabilizado varias API, como
CStr::is_empty
yBuildHasher::hash_one
.
Las nuevas características de Rust 1.70
Debutando el 1 de junio de 2023, Rust 1.70 habilita de forma predeterminada el protocolo «escaso» para Cargo para leer el índice de crates.io. Esta característica se estabilizó en Rust 1.68, pero usarla con crates.io aún requería configuración. Los usuarios deberían ver un rendimiento sustancialmente mejorado al obtener información del índice crates.io.
También en Rust 1.70, se han estabilizado dos tipos para la inicialización única de datos compartidos: OnceCell
y su contraparte segura para subprocesos, OnceLock
. Estos se pueden usar en cualquier lugar donde no se desee una construcción inmediata y tal vez ni siquiera sea posible, como en áreas no residenciales.const
datos en variables globales.
Un rasgo IsTerminal recientemente estabilizado tiene un método único para determinar si un descriptor o identificador de archivo determinado representa una terminal o TTY. Este es otro caso de estandarización de funcionalidad que existía en rasgos externos, como atty
y is-terminal
usando la biblioteca C isatty
funcionar en objetivos Unix y funcionalidades similares en otros lugares. La versión 1.70 también admite niveles con nombre de información de depuración. Las versiones estable y beta de Rust ya no permitirán versiones inestables. test
opciones, haciéndolos verdaderamente solo nocturnos, como está documentado. Rust 1.70 también estabiliza varias API, como NonZero*::MIN/MAX
y BinaryHeap::retain
.
Las nuevas características de Rust 1.69
Anunciado el 20 de abril de 2023Rust 1.69 no ofrece nuevas características importantes, pero contiene muchas mejoras pequeñas, incluidas más de 3000 confirmaciones de más de 500 contribuyentes, dijo el equipo de lanzamiento de Rust.
Rust 1.29 introdujo el cargo fix
subcomando para corregir automáticamente algunas advertencias simples del compilador. Desde entonces, la cantidad de advertencias que se pueden solucionar automáticamente ha seguido aumentando. Además, se ha agregado soporte para corregir automáticamente algunas advertencias simples de Clippy. Para llamar la atención sobre estas capacidades, Cargo ahora sugerirá ejecutar cargo fix
o cargo clippy --fix
cuando detecta advertencias que se pueden corregir automáticamente:
warning: unused import: `std::hash::Hash` --> src/main.rs:1:5 | 1| use std::hash::Hash; | ^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default warning: `foo` (bin "foo") generated 1 warning (run `cargo fix --bin "foo"` to apply 1 suggestion)
La invocación de Cargo completa que se muestra aquí solo es necesaria para aplicar correcciones con precisión a una sola caja. Para aplicar correcciones a todos los miembros predeterminados de un espacio de trabajo, ejecute cargo fix
sin argumentos adicionales es todo lo que se necesita.
Además, en Rust 1.69, la información de depuración ya no se incluye en los scripts de compilación de forma predeterminada. Para aumentar la velocidad de compilación, Cargo ahora evita emitir información de depuración en los scripts de compilación de forma predeterminada. No habrá ningún efecto visible cuando los scripts de compilación se ejecuten correctamente. Finalmente, se han estabilizado una serie de API, como cstr::from_bytes_until_nul
y core::ffi::FromBytesUntilNulError
.
Las nuevas características de Rust 1.68
Óxido 1.68.0, anunciado el 9 de marzo, estabiliza el protocolo de registro «escaso» para el administrador de paquetes Cargo para leer el índice de cajas, junto con la infraestructura en http//index.crates.io/ para aquellas publicadas en el registro primario de crates.io. El protocolo Git anterior, que sigue siendo el predeterminado, clona un repositorio que indexa todas las cajas disponibles en el registro. Sin embargo, el protocolo Git ha comenzado a tener limitaciones de escala, con retrasos en la actualización del repositorio. Se espera que el nuevo protocolo mejore el rendimiento al acceder a crates.io.
Para utilizar el protocolo disperso con crates.io, configure la variable de entorno CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse
o edita tu .cargo/config/toml
archivo para agregar:
[registries.crates-io]protocol = "sparse"
El protocolo disperso se convertirá en el predeterminado para crates.io en Rust 1.70.0, que vence en unos meses.
En otra parte de Rust 1.68.0, un nuevo pin!
macro construye un Pin<&mut T>
a partir de una T
expresión, capturada de forma anónima en el estado local. Esto a menudo se denomina fijación de pila, pero esa «pila» también podría ser el estado capturado de una async fn
o bloquear. Esta macro es similar a algunas cajas, pero la biblioteca estándar puede aprovechar Pin
internos y extensión temporal de la vida para una macro más parecida a una expresión.
Finalmente, Rust 1.68.0 estabiliza algunas API, incluidas {core, std}::pin::pin!
y impl DerefMut for PathBuf
. Y la compatibilidad con la plataforma Android en Rust ahora apunta al conjunto de herramientas NDK r25.