El enfoque único del lenguaje de programación Rust da como resultado un mejor código con menos compromisos que C, C++, Go y los otros lenguajes que probablemente use. También se actualiza regularmente, a menudo todos los meses.
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 funciones de Rust 1.68
Rust 1.68.0, anunciado el 9 de marzo, estabiliza el protocolo de registro “disperso” para el administrador de paquetes Cargo para leer el índice de cajas, junto con la infraestructura en http//index.crates.io/ para aquellos publicados en las cajas primarias.io registro. 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 escalado, con retrasos al actualizar el repositorio. Se espera que el nuevo protocolo mejore el rendimiento al acceder a crates.io.
Para usar el protocolo disperso con crates.io, configure la variable de entorno CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse
o editar su .cargo/config/toml
archivo a agregar:
[registries.crates-io]protocol = "sparse"
El protocolo disperso está configurado para convertirse en el predeterminado para crates.io en Rust 1.70.0, que vence dentro de 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 un async fn
o bloque. Esta macro es similar a algunas cajas, pero la biblioteca estándar puede aprovechar Pin
Internos y extensión temporal de la vida útil 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.
Las nuevas funciones de Rust 1.67
Rust 1.67, presentado el 26 de enero, agrega una advertencia del compilador relacionada con #[must_use]
y async fn
. en óxido, async
funciones anotadas con #[must_use]
ahora aplique ese atributo a la salida del devuelto impl Future
. El Future
el rasgo ya está anotado con #[must_use]
por lo que los tipos implementan [Future]
son automáticamente #[must_use]
. Previamente no había forma de indicar que la salida del Future
es significativo en sí mismo y debe usarse de alguna manera. En Rust 1.67, el compilador ahora advertirá si la salida no se usa.
También en Rust 1.67, se ha actualizado la implementación del canal multiproductor y de un solo consumidor de la biblioteca estándar. La biblioteca estándar de Rust ha tenido un canal de múltiples productores y un solo consumidor desde antes de la versión 1.0. Con Rust 1.67, la implementación se ha cambiado para basarse en crossbeam-channel
. El lanzamiento no contiene cambios en la API, pero la nueva implementación corrige errores y mejora el rendimiento y la capacidad de mantenimiento de la implementación.
Rust 1.67 estabiliza varias API como {integer}::checked_ilog
, {integer}::ilog
y NonZero*::BITS
. Varias otras API ahora son estables en const
contextos que incluyen char::from_u32
, char::from_digit
y char::to_digit
. Y los literales inválidos ya no son un error bajo cfg(FALSE)
.
Nota: Rust 1.66.1 estable, lanzado el 10 de enero, solucionó una situación en la que el administrador de paquetes de Cargo no verificaba las claves de host SSH al clonar dependencias o índices de registro con SSH. Esta vulnerabilidad fue rastreada en cve.org, con más información en el aviso.
Las nuevas funciones de Rust 1.66
Presentado el 15 de diciembre de 2022, Rust 1.66 permite que las enumeraciones con representaciones de enteros ahora usen discriminantes explícitos, incluso cuando tienen campos. Anteriormente, los desarrolladores podían usar discriminantes explícitos en enumeraciones con representaciones, pero solo si ninguna de sus variantes tenía campos. Los discriminantes explícitos son útiles cuando se pasan valores a través de los límites del idioma donde la representación de la enumeración debe coincidir en ambos idiomas.
También en Rust 1.66:
- Una recién estabilizada
black_box
La función toma un valor pasado y lo devuelve de inmediato. El compilador tratablack_box
como una función que podría hacer cualquier cosa con su entrada y devolver cualquier valor. Esto es útil para deshabilitar las optimizaciones cuando no desea que ocurran, como durante la evaluación comparativa o al examinar el código de máquina que produce el compilador. - Los desarrolladores pueden usar
cargo remove
para eliminar dependencias. Rust 1.62 introducidocargo add
una utilidad de línea de comandos para agregar dependencias a un proyecto. - Los desarrolladores ahora pueden usar
..=x
rangos en los patrones. - Las compilaciones de Linux ahora optimizan el front-end de rustc y el back-end de LLVM con LTO y BOLT, respectivamente, mejorando el rendimiento del tiempo de ejecución y el uso de la memoria.
- Las API se han estabilizado, como
proc_macro::Span::source_text
yOption::unzip
.
Las nuevas funciones de Rust 1.65
Rust 1.65 se presentó el 3 de noviembre de 2022. Con esta versión, finalmente se presentan los tipos genéricos asociados (GAT), una característica muy esperada que ha estado en proceso durante varios años. Los GAT permiten a los desarrolladores definir genéricos de duración, tipo y const en tipos asociados. Los GAT habilitan patrones que antes no eran posibles en Rust.
También en Rust 1.65:
- Un nuevo tipo de
let
se introduce la declaración,let-else
con un patrón refutable y una divergenciaelse
bloque que se ejecuta cuando ese patrón no coincide. - Las expresiones de bloque simple ahora se pueden etiquetar como
break
objetivo, terminando ese bloque antes de tiempo. - Para mejorar la compilación, el soporte para dividir la información de depuración ahora es estable para su uso en Linux, luego de ser compatible con macOS desde Rust 1.51. Con esta capacidad,
-Csplit-debuginfo=unpacked
dividirá la información de depuración en varios archivos de objetos .dwo DWARF, mientras que-Csplit-debuginfo=packed
producirá un solo paquete .dwp DWARF junto con un binario de salida con toda la información de depuración empaquetada. - Las API se han estabilizado, como
std::backtrace::Backtrace
,Bound::as ref
ystd::io::read_to_string
. - La inserción de MIR (representación intermedia de nivel medio) ahora está habilitada para compilaciones optimizadas, lo que mejora los tiempos de compilación para cajas del mundo real.
- Al programar compilaciones, Cargo ahora ordena la cola de trabajos pendientes, lo que mejora el rendimiento.
Las nuevas funciones de Rust 1.64
Rust 1.64.0, presentado el 22 de septiembre de 2022, estabiliza el IntoFuture
rasgo, para mejorar .await
y mejorar las API. IntoFuture
es similar a la IntoIterator
rasgo, pero en lugar de apoyar for … in …
bucles, IntoFuture
cambia cómo .await
obras.
Con IntoFuture
el .await
la palabra clave puede esperar más que solo características; puede esperar cualquier cosa que pueda convertirse en un Future
a través de IntoFuture
, para ayudar a que las API sean más fáciles de usar. Para el futuro, los desarrolladores de Rust esperan simplificar el desarrollo de nuevos futuros con nombre al admitir impl Trait
en type
alias. Esto debería hacer que la implementación IntoFuture
más fácil simplificando el type
firma de alias y mejorar su rendimiento eliminando el Box
desde el type
alias.
También en Rust 1.64:
- El lenguaje proporciona todo
c_*
escriba alias encore::ffi
así comocore::ffi::CStr
, para trabajar con cadenas C. Rust 1.64 también proporcionaalloc::ffi::CString
para trabajar con cadenas C propias usando solo elalloc
caja en lugar de la llenastd
biblioteca. - rust-analyzer, una implementación del protocolo Language Server para Rust, ahora se incluye como parte de la colección de herramientas incluidas con Rust. Esto facilita la descarga y el acceso a rust-analyzer y lo hace disponible en más plataformas. La herramienta está disponible como componente de rustup y se puede instalar con el comando
rustup component add rust_analyzer
. - Al trabajar con colecciones de bibliotecas relacionadas o cajas binarias en un espacio de trabajo de Cargo, los desarrolladores ahora pueden evitar la duplicación de valores de campo comunes entre cajas, como números de versión comunes o URL de repositorio.
- Los diseños de memoria de
Ipv6Addr
,Ipv4Addr
,SocketAddrV4
ySocketAddrV6
han sido cambiados para ser más eficientes en memoria y compactos. - Las compilaciones de Windows del compilador Rust ahora usan optimización guiada por perfil, lo que mejora el rendimiento.
- Se han estabilizado una serie de métodos e implementaciones de rasgos, que incluyen
num::NonZero*::checked_mul
,num::NonZero*::checked_pow
y muchos otros.
Las nuevas funciones de Rust 1.63
Publicado el 11 de agosto de 2022, Rust 1.63 agrega subprocesos con alcance a la biblioteca estándar. Los subprocesos con ámbito le permiten generar un subproceso tomando prestado del marco de pila local. El std::thread::scope
La API proporciona una garantía de que todos los subprocesos generados habrán salido antes de su devolución, lo que permite tomar prestados datos de forma segura. Rust 1.63 también habilita la vida útil no léxica (NLL) de forma predeterminada; la característica ahora es completamente estable. NLL es la segunda iteración del verificador de préstamos de Rust.
También en Rust 1.63:
- Para la seguridad de E/S, se proporcionan tipos de envoltorios como
BorrowedFD
yOwnedFD
que están marcados como#[repr(transparent)]
significa queextern "C"
los enlaces pueden tomar estos tipos para codificar la semántica de propiedad. - El
Condvar::New
,Mutex::New
yRwLock::new
Las funciones ahora son invocables enconst
contextos, para evitar el uso de cajas como lazy_static para crear estadísticas globales conMutex
,RwLock
oCondvar
. Esto se basa en el trabajo de Rust 1.62 para habilitar mutexes más rápidos y delgados. - Se estabilizaron varias API, incluidas
array::from_fn
,Box::into_pin
yPath::try_exists
.
Las nuevas funciones de Rust 1.62
Rust 1.62, que llegó el 30 de junio de 2022, permite a los desarrolladores agregar dependencias directamente desde la línea de comandos usando cargo add
. Este comando admite la especificación de versiones y características y también puede modificar las dependencias existentes. Rust 1.62 también permite el uso de #[derive(Default)] en las enumeraciones si se especifica una variante predeterminada.
Otras capacidades nuevas en Rust 1.62:
- La biblioteca estándar de Rust ahora se entrega con una implementación de bloqueos en Linux sin procesar basada en futex, que es liviana y no tiene ninguna asignación adicional. Esta adición es parte de un esfuerzo por mejorar la eficiencia de los tipos de bloqueo Rust.
- Ahora es más fácil crear binarios sin sistema operativo para x86_64, por ejemplo, al escribir un kernel. El objetivo x86_64-unknown-none ha sido ascendido al nivel 2 y se puede instalar con rustup.
- Se han estabilizado varias API, incluidas bool::then_some, f32::total_cmp, f64::total_cmp y Stdin::lines.
Las nuevas funciones de Rust 1.61
Publicado el 19 de mayo de 2022, Rust 1.61 destaca los códigos de salida personalizados de main
. Los defensores de Rust dijeron que, al principio, Rust main
las funciones solo pueden devolver el tipo de unidad ()
ya sea implícita o explícitamente, lo que indica el éxito en el estado de salida, y si los desarrolladores querían lo contrario, tenían que llamar process::exit
. Desde Rust 1.26, main
se le ha permitido devolver un Result
dónde Ok
traducido a una C EXIT_SUCCESS
y Err
a EXIT_Failure
. Estos tipos de devolución alternativos fueron unificados por un rasgo de Terminación inestable. En este lanzamiento, Termination
rasgo es estable, junto con un más general ExitCode
tipo que envuelve tipos de devolución específicos de la plataforma. El Termination
El rasgo también se puede implementar para los tipos propios de un desarrollador, lo que permite la personalización de los informes antes de convertirlos en un ExitCode
.
También en la versión 1.61:
- Se han estabilizado varias características incrementales para permitir una mayor funcionalidad en
const
. Los desarrolladores ahora pueden crear, pasar y emitir punteros de función en unconst fn
, que podría ser útil para crear tablas de funciones en tiempo de compilación para un intérprete. Pero todavía no está permitido llamarfn
punteros Los desarrolladores ahora también pueden escribir límites de rasgos en parámetros genéricos paraconst fn
comoT: Copy
donde antes sóloSized
estaba permitido. También,const fn
ahora puede tratar con objetos de rasgos, mientras que los argumentos y los valores devueltos paraconst fn
puede ser opacoimpl Trait
tipos - Las API se han estabilizado, como
Pin::static_mut
,Pin;;static_ref
yVec::retain_mut
. - Anteriormente, la creación de identificadores bloqueados para
stdin/stdlout/stderr
tomaría prestadas las manijas que estaban bloqueadas, lo que impedía escribirlet out = std::io::stdout().lock();
porqueout
sobreviviría al valor de retorno destdout()
. Este código ahora funciona, eliminando una trampa común que afecta a muchos usuarios de Rust.
Las nuevas funciones de Rust 1.60.0
Rust 1.60, presentado el 7 de abril de 2022, estabiliza la compatibilidad con la instrumentación de cobertura basada en LLVM en rustc
. Esto proporciona una cobertura de código basada en fuente. Los desarrolladores pueden probar esto reconstruyendo su código con -Cinstrument-coverage
. Luego, ejecutar el binario resultante producirá un archivo default.profraw en el directorio actual.
El llvm-tools-preview
el componente incluye llvm-profdata
para procesar y fusionar la salida del perfil sin procesar, llvm-profdata
para procesar la salida del archivo sin procesar, y llvm-cov
para la generación de informes. La funcionalidad básica es estable y existirá en todas las versiones futuras de Rust, pero el formato de salida específico y las herramientas LLVM que lo producen están sujetos a cambios. Los desarrolladores deben usar la misma versión para ambos llvm-tools-preview
y el rustc
binario utilizado para compilar código.
Rust 1.60 también vuelve a habilitar la compilación incremental. El equipo de Rust continúa trabajando en la corrección de errores de forma incremental, pero en este momento no se conocen problemas que causen roturas generalizadas.
También en Rust 1.60:
Be First to Comment