publicado versión da linguaxe de programación do sistema Ferruxe 1.39, fundada polo proxecto Mozilla. A linguaxe céntrase na seguridade da memoria, ofrece xestión automática da memoria e proporciona un medio para lograr un alto paralelismo de tarefas sen utilizar un colector de lixo ou tempo de execución.
A xestión automática da memoria de Rust libera ao programador da manipulación do punteiro e protexe contra os problemas derivados da manipulación de memoria de baixo nivel, como accesos á memoria despois libres, desreferencias de punteiros nulos, desbordamentos do búfer e similares. Estase a desenvolver un xestor de paquetes para distribuír bibliotecas, garantir a montaxe e xestionar as dependencias do proxecto. Carga, o que lle permite obter as bibliotecas necesarias para o programa cun só clic. Admítese un repositorio para aloxar bibliotecas caixóns.io.
Estabilizado unha nova sintaxe de programación asíncrona baseada na función "async", o bloque de movemento asíncrono { ... } e o operador ".await", que facilita a escritura de controladores que non bloquean o fluxo de comandos principal. En comparación coa API ofrecida anteriormente para E/S asíncronas, as construcións async/.await son sinxelas de entender, moi lexibles e permítenche implementar interaccións asíncronas complexas mediante técnicas de control de fluxo coñecidas baseadas en bucles, declaracións condicionais e excepcións.
A sintaxe Async-await permítelle crear funcións que poden pausar a súa execución, devolver o control ao fío principal e, a continuación, retomar a execución desde onde o deixaron. Por exemplo, esta pausa é necesaria ao procesar E/S, na que se pode facer outro traballo mentres se espera a que chegue o seguinte dato. As funcións e bloques definidos con "async fn" e "async move" devolven un trazo Futuro, que define unha representación de cálculo asíncrona diferida. Pode iniciar directamente un cálculo aprazado e obter o resultado mediante o operador ".await". Non se realiza nin se planifica ningunha acción ata que se chame .await, o que permite crear construcións aniñadas complexas sen sobrecarga adicional.
Estabilizado "#![feature(bind_by_move_pattern_guards)]", permitindo o uso de variables co tipo de vinculación "por movemento" en modelos e use referencias a estas variables na sección "se" da expresión "combinar". Por exemplo, agora están permitidas as seguintes construcións:
Indicación permitida atributos ao definir parámetros de función, peches e punteiros de función. Admítense os atributos de compilación condicional (cfg, cfg_attr) que controlan os diagnósticos mediante lint (permitir, advertir, denegar e prohibir) e os atributos de chamada de macros auxiliares.
fn len(
#[cfg(windows)] slice: &[u16], // use o parámetro en Windows
#[cfg(not(windows))] slice: &[u8], // usa noutro sistema operativo
) -> use {
slice.len()
}
Avisos sobre problemas identificados ao comprobar o préstamo de variables (comprobador de préstamos) mediante a técnica NLL (Non-Lexical Lifetimes), traducido na categoría de erros mortais. Lembremos que o sistema de verificación baseado nun novo mecanismo para ter en conta a vida útil das variables prestadas permitiu identificar algúns problemas que pasaron desapercibidos polo antigo código de verificación. Dado que a saída de erros para tales comprobacións podería afectar a compatibilidade co código que funcionaba anteriormente, inicialmente emitíronse avisos en lugar de erros. Agora substituíronse os avisos por erros ao executarse no modo Rust 2018. Na próxima versión, a saída de erros tamén se implementará no modo Rust 2015, que finalmente eliminará o antigo comprobador de préstamos;
O atributo "const", que determina a posibilidade de usar en calquera contexto en lugar de constantes, úsase para as funcións Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
abdominais, abdominais envoltorios e abdominais desbordados;
Unha nova parte das API foi transferida á categoría estable, incluídos os métodos que se estabilizaron
Pin::into_inner, Instant::checked_duration_since e Instant::saturating_duration_since;
O xestor de paquetes de carga agora ten a capacidade de usar a extensión ".toml" para os ficheiros de configuración. Engadido soporte preliminar para construír a biblioteca estándar directamente desde Cargo. Engadiuse a marca "--workspace", substituíndo a controvertida marca "--all". Engadiuse un novo campo aos metadatos "Publish", que permite publicar dependencias especificando unha etiqueta git e un número de versión. Engadida a opción de proba "-Ztimings" para xerar un informe HTML dos tempos de execución de varias etapas de compilación.
No compilador rustc, as mensaxes de diagnóstico inclúen recortar as colas de código que non caben no terminal. Forneceu terceiro nivel de soporte para plataformas de destino
i686-unknown-uefi e sparc64-unknown-openbsd. O terceiro nivel implica soporte básico, pero sen probas automatizadas e publicación de compilacións oficiais.