Version du langage de programmation Rust 1.39

Publié version du langage de programmation système Rouille 1.39, 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:

  • Stabilisé une nouvelle syntaxe de programmation asynchrone basée sur la fonction "async", le bloc async move { ... } et l'opérateur ".await", qui facilite l'écriture de gestionnaires qui ne bloquent pas le flux de commandes principal. Par rapport à l'API précédemment proposée pour les E/S asynchrones, les constructions async/.await sont simples à comprendre, très lisibles et vous permettent d'implémenter des interactions asynchrones complexes à l'aide de techniques de contrôle de flux familières basées sur des boucles, des instructions conditionnelles et des exceptions.

    La syntaxe Async-await vous permet de créer des fonctions qui peuvent suspendre leur exécution, rendre le contrôle au thread principal, puis reprendre l'exécution là où elle s'était arrêtée. Par exemple, une telle pause est requise lors du traitement des E/S, au cours de laquelle d'autres travaux peuvent être effectués en attendant l'arrivée de la prochaine donnée. Les fonctions et blocs définis avec "async fn" et "async move" renvoient un trait A venir, qui définit une représentation de calcul asynchrone différé. Vous pouvez directement lancer un calcul différé et obtenir le résultat grâce à l'opérateur « .await ». Aucune action n'est effectuée ou planifiée jusqu'à ce que .await soit appelé, ce qui permet de créer des constructions imbriquées complexes sans surcharge supplémentaire.

    async fn first_function() -> u32 { .. }
    ...
    laissez futur = first_function();
    ...
    soit le résultat : u32 = future.await ;

  • Stabilisé "#![feature(bind_by_move_pattern_guards)]", permettant l'utilisation de variables avec le type de liaison "par déplacement" dans les modèles et utilisez des références à ces variables dans la section "if" de l'expression "rencontre". Par exemple, les constructions suivantes sont désormais autorisées :

    fn principal() {
    let tableau : Boîte<[u8; 4]> = Boîte :: nouveau ([1, 2, 3, 4]);

    tableau de correspondance {
    nums
    si nums.iter().sum::() == 10

    => {
    drop(numéros);
    }
    _ => inaccessible !(),
    }
    }

  • Indication autorisée les attributs lors de la définition des paramètres de fonction, des fermetures et des pointeurs de fonction. Les attributs de compilation conditionnelle (cfg, cfg_attr) qui contrôlent les diagnostics via lint (autoriser, avertir, refuser et interdire) et les attributs d'appel de macro auxiliaires sont pris en charge.

    fn len(
    #[cfg(windows)] slice : &[u16], // utiliser le paramètre sous Windows
    #[cfg(not(windows))] slice : &[u8], // utilisation dans un autre système d'exploitation
    ) -> utiliser {
    tranche.len()
    }

  • Avertissements sur les problèmes identifiés lors de la vérification de l'emprunt de variables (borrow checker) à l'aide de la technique NLL (Non-Lexical Lifetimes), traduit dans la catégorie des erreurs fatales. Rappelons que le système de vérification basé sur un nouveau mécanisme de prise en compte de la durée de vie des variables empruntées a permis d'identifier certains problèmes qui passaient inaperçus par l'ancien code de vérification. Étant donné que les erreurs générées par de telles vérifications pouvaient affecter la compatibilité avec le code qui fonctionnait auparavant, des avertissements ont été initialement émis à la place des erreurs. Les avertissements ont désormais été remplacés par des erreurs lors de l'exécution en mode Rust 2018. Dans la prochaine version, la sortie d'erreur sera également implémentée en mode Rust 2015, ce qui éliminera enfin l'ancien vérificateur d'emprunt ;
  • L'attribut « const », qui détermine la possibilité d'utiliser dans n'importe quel contexte à la place des constantes, est utilisé pour les fonctions Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, wrap_abs et overflowing_abs ;

  • Une nouvelle partie des API a été transférée dans la catégorie stable, y compris les méthodes stabilisées
    Pin :: into_inner, Instant :: checked_duration_since et Instant :: saturating_duration_since ;

  • Le gestionnaire de packages cargo a désormais la possibilité d'utiliser l'extension « .toml » pour les fichiers de configuration. Ajout d'un support préliminaire pour la création de la bibliothèque standard directement à partir de Cargo. Ajout du drapeau "--workspace", remplaçant le drapeau controversé "--all". Un nouveau champ a été ajouté aux métadonnées "publier», qui permet de publier des dépendances en spécifiant une balise git et un numéro de version. Ajout de l'option de test "-Ztimings" pour générer un rapport HTML des temps d'exécution des différentes étapes de compilation.
  • Dans le compilateur rustc, les messages de diagnostic incluent la suppression des queues de code qui ne rentrent pas dans le terminal. Fourni un troisième niveau de support pour les plates-formes cibles
    i686-inconnu-uefi et sparc64-inconnu-openbsd. Le troisième niveau implique un support de base, mais sans tests automatisés ni publication de versions officielles.

Source: opennet.ru

Ajouter un commentaire