Version du langage de programmation Rust 1.36

Publié version du langage de programmation système Rouille 1.36, fondé par le projet Mozilla. Le langage se concentre sur la sécurité de la mémoire, fournit une gestion automatique de la mémoire et fournit un moyen d'atteindre un parallélisme élevé des tâches sans utiliser de garbage collector ou d'exécution.

La gestion automatique de la mémoire de Rust libère le développeur de la manipulation du pointeur et le protège contre les problèmes résultant de la manipulation de la mémoire de bas niveau, tels que les accès mémoire après libération, les déréférences de pointeur nul, les dépassements de tampon, etc. Un gestionnaire de packages est en cours de développement pour distribuer les bibliothèques, assurer l'assemblage et gérer les dépendances par le projet. Cargaison, vous permettant d'obtenir les bibliothèques nécessaires au programme en un clic. Un référentiel est pris en charge pour héberger des bibliothèques caisses.io.

principal les innovations:

  • Caractère stabilisé A venir, qui représente une valeur dont l'évaluation n'est peut-être pas encore terminée lors de l'utilisation de blocs async / .await. Les valeurs asynchrones définies à l'aide de Future permettent de continuer à exécuter un travail utile dans le thread, tout en attendant simultanément la fin des calculs d'une certaine valeur ;
  • Bibliothèque stabilisée allouer, qui fournit des pointeurs intelligents et des collections pour gérer les valeurs allouées à la mémoire. L'allocation de mémoire dans std utilise désormais le type Une chose, qui sont réexportés depuis alloc. L'utilisation séparée de alloc a du sens dans les applications non liées à std (« #![no_std] »), ainsi que dans les bibliothèques conçues pour être utilisées dans des programmes similaires sans std ;
  • Pour contourner les contrôles d'initialisation correcte des valeurs suggéré type intermédiaire Peut-êtreUnité, qui peut être utilisée à la place de la fonction mem::uninitialized comme alternative plus sûre. La fonction mem::uninitialized est pratique pour créer rapidement des tableaux, mais elle induit le compilateur en erreur car elle semble avoir été initialisée, alors qu'en réalité la valeur reste non initialisée. MaybeUninit vous permet d'indiquer explicitement au compilateur que la valeur n'est pas initialisée, de prendre en compte l'éventuel comportement indéfini associé à cela, et également d'organiser des contrôles dans les programmes via "maybe_t:" et une initialisation étape par étape, marquant son achèvement en utilisant l'appel « .assume_init() ». Avec l'avènement de MaybeUninit, la fonction mem::uninitialized est obsolète et son utilisation n'est pas recommandée ;
  • La technique NLL (Non-Lexical Lifetimes), qui a étendu le système d'enregistrement de la durée de vie des variables empruntées, a été stabilisée pour le langage Rust 2015 (initialement, NLL n'était pris en charge que par Rust 2018). Au lieu de valider des durées de vie au niveau lexical, NLL le fait au niveau de l'ensemble des pointeurs dans le graphe de flux d'exécution. Cette approche permet d'augmenter la qualité du contrôle d'emprunt de variables (borrow checker) et de permettre l'exécution de certains types de code correct, dont l'utilisation conduisait auparavant à une erreur. Le nouveau comportement rend également le débogage beaucoup plus facile ;
  • Nouvelle implémentation de tableaux associatifs incluse Carte de hachage, basé sur l'application de la structure Tableau Suisse (chargé automatiquement hashbrown ::HashMap, sauf indication contraire explicite, comme std::HashMap, qui est basé sur SipHash 1-3). L'interface du logiciel reste la même et les différences notables pour le développeur se résument à des performances accrues et à une consommation de mémoire réduite ;
  • Dans le gestionnaire de colis cargo ajoutée l'option « --offline », qui permet un fonctionnement sans accès au réseau, dans laquelle seuls les packages mis en cache dans le système local sont utilisés lors de l'installation des dépendances. Si la dépendance ne se trouve pas dans le cache local, une erreur sera générée. Pour précharger les dépendances dans le cache local avant de vous déconnecter, vous pouvez utiliser la commande « cargo fetch » ;
  • Implémentation de la possibilité d'appeler la macro « dbg ! » indiquant plusieurs arguments;
  • L'attribut « const », qui détermine la possibilité d'utiliser dans n'importe quel contexte à la place des constantes, est utilisé pour les méthodes
    Mise en page ::from_size_align_unchecked,
    mem::needs_drop,
    NonNull ::pendant et
    NonNull::cast;

  • Une nouvelle partie des API a été transférée dans la catégorie stable, y compris les méthodes stabilisées
    tâche :: Waker, tâche :: Sondage,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Lire ::read_vectored, Write ::write_vectored,
    Itérateur : copié,
    BorrowMut (pour les chaînes) et str::as_mut_ptr.

Source: opennet.ru

Ajouter un commentaire