Press "Enter" to skip to content

What’s new in the Rust programming language

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=sparseo 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}::ilogy NonZero*::BITS. Varias otras API ahora son estables en const contextos que incluyen char::from_u32, char::from_digity 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 trata black_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 introducido cargo adduna 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 y Option::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-elsecon un patrón refutable y una divergencia else 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 refy std::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 IntoFutureel .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.

Also Read:  Semantic Kernel: A bridge between large language models and your code

También en Rust 1.64:

  • El lenguaje proporciona todo c_* escriba alias en core::ffiasí como core::ffi::CStr, para trabajar con cadenas C. Rust 1.64 también proporciona alloc::ffi::CString para trabajar con cadenas C propias usando solo el alloc caja en lugar de la llena std 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, SocketAddrV4y SocketAddrV6 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_powy 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 y OwnedFDque están marcados como #[repr(transparent)]significa que extern "C" los enlaces pueden tomar estos tipos para codificar la semántica de propiedad.
  • El Condvar::New, Mutex::Newy RwLock::new Las funciones ahora son invocables en const contextos, para evitar el uso de cajas como lazy_static para crear estadísticas globales con Mutex, RwLocko Condvar. 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_piny Path::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 Resultdó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 un const 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 llamar fn punteros Los desarrolladores ahora también pueden escribir límites de rasgos en parámetros genéricos para const fncomo T: Copydonde antes sólo Sized estaba permitido. También, const fn ahora puede tratar con objetos de rasgos, mientras que los argumentos y los valores devueltos para const fn puede ser opaco impl Trait tipos
  • Las API se han estabilizado, como Pin::static_mut, Pin;;static_refy Vec::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 escribir let out = std::io::stdout().lock(); porque out sobreviviría al valor de retorno de stdout(). 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

Leave a Reply

Your email address will not be published. Required fields are marked *