Lanzamiento del lenguaje de programación Rust 1.47

publicado versión 1.47 del lenguaje de programación del sistema Herrumbre, fundado por el proyecto Mozilla. El lenguaje se centra en la seguridad de la memoria, proporciona gestión automática de la memoria y proporciona un medio para lograr un alto paralelismo de tareas sin utilizar recolector de basura и 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. Se está desarrollando un administrador de paquetes para distribuir bibliotecas, garantizar el ensamblaje y gestionar las dependencias del proyecto. . Se admite un repositorio para alojar bibliotecas. cajas.io.

El principal innovaciones:

  • Soporte implementado para tipos. matrices cualquier tamaño. 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 de genéricos constantes (“const generics”), fue posible definir funciones genéricas para cualquier tamaño de matriz, pero aún no están incluidas en las funciones del lenguaje estable, aunque están implementadas en el compilador y ahora involucrado en la biblioteca estándar para rasgos de matriz 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 pasos que te permiten 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 ha actualizado para compilar usando LLVM 11 (Óxido usos LLVM como backend para codigo de GENERACION). Al mismo tiempo, se conserva la capacidad de compilar con LLVM más antiguos, hasta la versión 8, pero de forma predeterminada (en Rust-lang/llvm-proyecto) ahora usa LLVM 11. Se espera que LLVM 11 se lance en los próximos 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.
  • Una nueva porción de API se ha transferido a la categoría estable, incluida la estabilizada
    Ident::new_raw,
    Rango::está_vacío,
    RangoInclusivo::is_empty,
    Resultado::as_deref,
    Resultado::as_deref_mut,
    Vec::fuga,
    puntero::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.
  • GratisBSD involucrado kit de herramientas de FreeBSD 11.4 (FreeBSD 10 no es compatible con LLVM 11).

Fuente: opennet.ru

Añadir un comentario