Linguaxe de programación Rust versión 1.36

publicado versión da linguaxe de programación do sistema Ferruxe 1.36, 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.

O principal innovacións:

  • Trazo estabilizado Futuro, que representa un valor cuxa avaliación aínda non se completou mentres se usan bloques asincrónicos / .await. Os valores asíncronos definidos mediante Future permiten seguir executando traballos útiles no fío, mentres se agardan ao mesmo tempo a finalización dos cálculos dun determinado valor;
  • Biblioteca estabilizada aloc, que ofrece punteiros e coleccións intelixentes para xestionar os valores asignados pola memoria. A asignación de memoria en std agora usa o tipo Vec, que se reexportan de alloc. O uso separado de alloc ten sentido en aplicacións non vinculadas a std ("#![no_std]"), así como en bibliotecas deseñadas para o seu uso en programas similares sen std;
  • Para evitar verificacións para a correcta inicialización dos valores proposto tipo intermedio Quizais Unidade, que se pode usar en lugar da función mem::non inicializada como unha alternativa máis segura. A función mem::uninitialized é conveniente para crear matrices rapidamente, pero engana ao compilador porque parece que se inicializou, pero en realidade o valor permanece sen inicializar. MaybeUninit permítelle indicar explícitamente ao compilador que o valor non está inicializado, para ter en conta o posible comportamento indefinido asociado a isto e tamén organizar comprobacións nos programas a través de "maybe_t:" e a inicialización paso a paso, marcando a súa finalización. usando a chamada ".assume_init()". Coa chegada de MaybeUninit, a función mem::non inicializada quedou en desuso e non se recomenda para o seu uso;
  • A técnica NLL (Non-Lexical Lifetimes), que ampliou o sistema para rexistrar a vida útil das variables prestadas, estabilizouse para a linguaxe Rust 2015 (inicialmente, NLL só era compatible con Rust 2018). En lugar de comprometer vidas a nivel léxico, NLL faino a nivel do conxunto de punteiros no gráfico de fluxo de execución. Este enfoque permítelle aumentar a calidade da comprobación do endebedamento de variables (comprobador de préstamo) e permitir a execución dalgúns tipos de código correcto, cuxo uso previamente levou a un erro. O novo comportamento tamén facilita moito a depuración;
  • Nova implementación de matrices asociativas incluídas HashMap, baseado na aplicación da estrutura Táboa Suíza (cargado automaticamente hashbrown::HashMap, a non ser que se indique expresamente o contrario, como std::HashMap, que está baseado en SipHash 1-3). A interface do software segue sendo a mesma, e as diferenzas notables para o programador redúcense ao aumento do rendemento e ao reducido consumo de memoria;
  • No xestor de paquetes de carga engadido a opción “--offline”, que permite o funcionamento sen acceder á rede, na que só se utilizan paquetes almacenados na caché no sistema local ao instalar dependencias. Se a dependencia non está na caché local, xerarase un erro. Para precargar as dependencias na caché local antes de ir fóra de liña, pode usar o comando "cargo fech";
  • Implementouse a capacidade de chamar á macro "dbg!" indicando varios argumentos;
  • O atributo "const", que determina a posibilidade de usar en calquera contexto en lugar de constantes, úsase para os métodos
    Layout::from_size_align_unchecked,
    mem::necesita_drop,
    NonNull::colgando e
    NonNull::cast;

  • Unha nova parte das API foi transferida á categoría estable, incluídos os métodos que se estabilizaron
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterador::copiado,
    BorrowMut (para cadeas) e str::as_mut_ptr.

Fonte: opennet.ru

Engadir un comentario