Lanzamiento del lenguaje de programación Rust 1.47

Se ha publicado la versión 1.47 del lenguaje de programación del sistema Rust, fundado por el proyecto Mozilla. El lenguaje se centra en la seguridad de la memoria, proporciona administración automática de la memoria y proporciona los medios para lograr un alto paralelismo de tareas sin utilizar un recolector de basura o tiempo de ejecución (el tiempo de ejecución se reduce a la inicialización y el mantenimiento básicos de la biblioteca estándar).

La gestión automática de la memoria de Rust elimina errores al manipular punteros y protege contra problemas derivados de la manipulación de la memoria de bajo nivel, como el acceso a una región de memoria después de haber sido liberada, desreferencias de punteros nulos, desbordamientos de búfer, etc. Para distribuir bibliotecas, garantizar el ensamblaje y gestionar dependencias, el proyecto está desarrollando el administrador de paquetes Cargo. El repositorio crates.io es compatible con bibliotecas de alojamiento.

Principales novedades:

  • Se implementó soporte para rasgos para matrices de tamaño arbitrario. Anteriormente, debido a la incapacidad de definir funciones genéricas para todos los valores enteros, la biblioteca estándar proporcionaba soporte de rasgos integrado solo para matrices de hasta 32 elementos de tamaño (los rasgos para cada tamaño se definían estáticamente). Gracias a la creación de la funcionalidad const generics, fue posible definir funciones genéricas para cualquier tamaño de matriz, pero aún no están incluidas en las características estables del lenguaje, aunque están implementadas en el compilador y ahora se usan en la biblioteca estándar. para tipos de matrices de cualquier tamaño.
    Por ejemplo, la siguiente construcción en Rust 1.47 imprimirá el contenido de una matriz, aunque anteriormente habría dado como resultado un error:

fn principal() {
sea ​​xs = [0; 34];
println!("{:?}", xs);
}

  • Proporcionó salida de rastros más cortos (backtrace), salida en situaciones de emergencia. Los elementos que no son de interés en la mayoría de las situaciones, pero que desordenan el resultado y distraen la atención de las causas principales del problema, se excluyen del seguimiento. Para devolver un seguimiento completo, puede utilizar la variable de entorno "RUST_BACKTRACE=full". Por ejemplo, para el código

fn principal() {
¡pánico!();
}

Anteriormente, la traza se generaba en 23 etapas, pero ahora se reducirá a 3 etapas, lo que le permitirá captar inmediatamente la esencia:

El hilo 'principal' entró en pánico ante el 'pánico explícito', src/main.rs:2:5
seguimiento de la pila:
0: std::panicking::begin_panic
en /rustc/d…d75a/library/std/src/panicking.rs:497
1: patio de recreo::principal
en ./src/main.rs:2
2: núcleo::ops::función::FnOnce::call_once
en /rustc/d…d75a/library/core/src/ops/function.rs:227

  • El compilador Rustc se actualizó para compilar usando LLVM 11 (Rust usa LLVM como backend para la generación de código). Al mismo tiempo, se conserva la capacidad de compilar con LLVM antiguo, hasta la versión 8, pero de forma predeterminada (en Rust-lang/llvm-project) ahora se usa LLVM 11. Se espera el lanzamiento de LLVM 11 en los próximos años. días.
  • En la plataforma Windows, el compilador Rustc proporciona soporte para habilitar las comprobaciones de integridad del flujo de control (Control Flow Guard), activadas mediante el indicador "-C control-flow-guard". En otras plataformas, esta bandera se ignora por ahora.
  • Se ha transferido una nueva parte de la API a la categoría estable, que incluye Ident estabilizado::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32::TAU y f64::TAU.
  • El atributo “const”, que determina la posibilidad de utilizarlo en cualquier contexto en lugar de constantes, se utiliza en los métodos:
    • nuevo para todos los números enteros distintos de cero;
    • check_add, check_sub, check_mul, check_neg, check_shl, check_shr, saturating_add, saturating_sub y saturating_mul para todos los números enteros;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace e is_ascii_control para los tipos char y u8.
  • Para FreeBSD, se utiliza el kit de herramientas de FreeBSD 11.4 (FreeBSD 10 no es compatible con LLVM 11).

Tomado de opennet.ru

Fuente: linux.org.ru

Añadir un comentario