Lanzamiento del lenguaje de programación Rust 1.36

publicado lanzamiento del lenguaje de programación del sistema Moho 1.36, 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 un medio para lograr un alto paralelismo de tareas sin utilizar un recolector de basura o tiempo de ejecución.

La gestión automática de la memoria de Rust libera al desarrollador de la manipulación del puntero y protege contra problemas que surgen de la manipulación de la memoria de bajo nivel, como accesos posteriores a la memoria, desreferencias de punteros nulos, desbordamientos del búfer y similares. Se está desarrollando un administrador de paquetes para distribuir bibliotecas, garantizar el ensamblaje y gestionar las dependencias del proyecto. , permitiéndole obtener las bibliotecas necesarias para el programa con un solo clic. Se admite un repositorio para alojar bibliotecas. cajas.io.

El principal innovaciones:

  • Rasgo estabilizado Futuro, que representa un valor cuya evaluación aún no se puede completar mientras se usan bloques async/.await. Los valores asincrónicos definidos usando Future permiten continuar ejecutando trabajos útiles en el hilo, mientras se espera simultáneamente que se completen los cálculos de un determinado valor;
  • Biblioteca estabilizada asignar, que proporciona punteros inteligentes y colecciones para administrar valores asignados en memoria. La asignación de memoria en std ahora usa el tipo Una cosa, que se reexportan desde alloc. El uso separado de alloc tiene sentido en aplicaciones no vinculadas a std (“#![no_std]”), así como en bibliotecas diseñadas para su uso en programas similares sin std;
  • Para omitir comprobaciones de inicialización correcta de valores sugirió tipo intermedio QuizásUnidad, que se puede utilizar en lugar de la función mem::uninitialized como alternativa más segura. La función mem::uninitialized es conveniente para crear matrices rápidamente, pero confunde al compilador porque parece haberse inicializado, pero en realidad el valor permanece sin inicializar. MaybeUninit le permite indicar explícitamente al compilador que el valor no está inicializado, tener en cuenta el posible comportamiento indefinido asociado con esto, y también organizar comprobaciones en los programas a través de “maybe_t:” y la inicialización paso a paso, marcando su finalización. usando la llamada “.assume_init()”. Con la llegada de MaybeUninit, la función mem::uninitialized ha quedado obsoleta y no se recomienda su uso;
  • La técnica NLL (Non-Lexical Lifetimes), que amplió el sistema para registrar la vida útil de las variables prestadas, se ha estabilizado para el lenguaje Rust 2015 (inicialmente, NLL solo era compatible con Rust 2018). En lugar de comprometer vidas a nivel léxico, NLL lo hace a nivel del conjunto de punteros en el gráfico de flujo de ejecución. Este enfoque le permite aumentar la calidad de la verificación del préstamo de variables (comprobador de préstamo) y permitir la ejecución de algunos tipos de código correcto, cuyo uso anteriormente conducía a un error. El nuevo comportamiento también facilita mucho la depuración;
  • Nueva implementación de arrays asociativos incluida. mapa hash, basado en la aplicación de la estructura Mesa Suiza (cargado automáticamente hashbrown::HashMap, a menos que se indique explícitamente lo contrario, como std::HashMap, que se basa en SipHash 1-3). La interfaz del software sigue siendo la misma y las diferencias que notan los desarrolladores se reducen a un mayor rendimiento y un menor consumo de memoria;
  • En el administrador de paquetes de carga. agregado la opción “--offline”, que permite la operación sin acceder a la red, en la que solo se utilizan los paquetes almacenados en caché en el sistema local al instalar dependencias. Si la dependencia no está en la caché local, se generará un error. Para precargar dependencias en el caché local antes de desconectarse, puede usar el comando "carga de carga";
  • Implementada la capacidad de llamar a la macro "dbg!" indicando varios argumentos;
  • El atributo "const", que determina la posibilidad de utilizar en cualquier contexto en lugar de constantes, se utiliza para los métodos.
    Diseño::from_size_align_unchecked,
    mem::necesita_caída,
    NonNull::colgante y
    No nulo::reparto;

  • Una nueva parte de las API se ha transferido a la categoría estable, incluidos los métodos que se han estabilizado.
    tarea::Waker, tarea::Encuesta,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Leer::read_vectored, Escribir::write_vectored,
    Iterador::copiado,
    BorrowMut (para cadenas) y str::as_mut_ptr.

Fuente: opennet.ru

Añadir un comentario