Publicouse o lanzamento da linguaxe de programación de propósito xeral Rust 1.63, fundada polo proxecto Mozilla, pero agora desenvolvida baixo os auspicios da organización independente sen ánimo de lucro Rust Foundation. A linguaxe céntrase na seguridade da memoria e proporciona os medios para conseguir un alto paralelismo de traballos evitando o uso dun colector de lixo e o tempo de execución (o tempo de execución redúcese á inicialización básica e ao mantemento da biblioteca estándar).
Os métodos de manexo da memoria de Rust salvan ao desenvolvedor de erros ao manipular os punteiros e protexen contra os problemas que xurdan debido ao manexo de memoria de baixo nivel, como acceder a unha área de memoria despois de liberarse, desreferenciar punteiros nulos, exceder o búfer, etc. Para distribuír bibliotecas, proporcionar compilacións e xestionar dependencias, o proxecto desenvolve o xestor de paquetes Cargo. O repositorio crates.io é compatible para hospedar bibliotecas.
A seguridade da memoria ofrécese en Rust no momento da compilación mediante a comprobación de referencias, o seguimento da propiedade do obxecto, o seguimento da vida útil dos obxectos (ámbitos) e a avaliación da corrección do acceso á memoria durante a execución do código. Rust tamén ofrece protección contra desbordamentos de enteiros, require a inicialización obrigatoria dos valores variables antes do seu uso, manexa mellor os erros na biblioteca estándar, aplica o concepto de referencias e variables inmutables por defecto, ofrece unha forte escritura estática para minimizar os erros lóxicos.
Principais novidades:
- Engadiuse a API std::thread::scope, que permite a creación de fíos con ámbito. A diferenza dos fíos dispoñibles anteriormente, a nova API std::thread::scope permite tomar prestados datos non estáticos, mentres que os fíos creados coa API clásica std::thread::spawn tiñan que posuír todos os argumentos pasados e non podían obter variables prestadas. A API std::thread::scope garante que calquera fío xerado terminará antes de devolver datos, proporcionando o nivel de seguridade necesario para o mecanismo de préstamo.
- Propóñense novos tipos de enlace para descritores de ficheiros, BorrowedFd e OwnedFd, que proporcionan préstamo e propiedade. Os tipos están marcados con "#[repr(transparent)]", o que permite usalos directamente en enlaces C externos con propiedade.
- Proporcionouse a capacidade de chamar a Condvar::new, Mutex::new e RwLock::new en contextos constantes para crear valores estáticos globais de Mutex, RwLock e Condvar sen usar paquetes lazy_static.
- Para funcións de tipo fn foo Permítese unha sintaxe (valor: T, f: impl Copy) como "foo::". (3, 3)», indicando claramente o tipo de xenérico.
- Completouse a transición á técnica NLL (Non-Lexical Lifetimes) para detectar problemas de préstamos de variables. NLL realiza a contabilidade ao nivel dun conxunto de punteiros no gráfico de fluxo de execución, o que mellora a calidade do verificador de préstamos e permite a execución de certos tipos de código correcto que antes provocaban erros. A compatibilidade co antigo mecanismo, que utilizaba a vinculación léxica de por vida, eliminouse por completo de rustc e o uso da nova NLL implementouse universalmente.
- Unha nova parte da API trasladouse á categoría de estable, incluíndo os métodos e implementacións de trazos estabilizados:
- matriz::from_fn
- Caixa::into_pin
- BinaryHeap::try_reserve
- BinaryHeap::try_reserve_exact
- OsString::try_reserve
- OsString::try_reserve_exact
- PathBuf::try_reserve
- PathBuf::try_reserve_exact
- Ruta::try_exists
- Ref::filter_map
- RefMut::mapa_de_filtros
- NonNull::<[T]>::len
- Propiedade de::clone_into
- Ipv6Addr::to_ipv4_mapped
- unix::io::AsFd
- unix::io::BorrowedFd<'fd>
- unix::io::OwnedFd
- windows::io::AsHandle
- windows::io::BorrowedHandle
Fonte: opennet.ru
