Version du langage de programmation Rust 1.47

Publié version 1.47 du langage de programmation système Calme, 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 Éboueur и d'exécution (le temps d'exécution se résume à l'initialisation et à la maintenance de base de la bibliothèque standard).

La gestion automatique de la mémoire de Rust élimine les erreurs lors de la manipulation des pointeurs et protège contre les problèmes résultant de la manipulation de la mémoire de bas niveau, tels que l'accès à une région mémoire après sa libération, les déréférences de pointeurs nuls, 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. Un référentiel est pris en charge pour héberger des bibliothèques caisses.io.

principal les innovations:

  • Prise en charge implémentée des types tableaux n'importe quelle taille. Auparavant, en raison de l'incapacité de définir des fonctions génériques pour toutes les valeurs entières, la bibliothèque standard fournissait une prise en charge intégrée des traits uniquement pour les tableaux d'une taille maximale de 32 éléments (les traits pour chaque taille étaient définis de manière statique). Grâce à la création de la fonctionnalité des génériques constants (« const generics »), il est devenu possible de définir des fonctions génériques pour n'importe quelle taille de tableau, mais elles ne sont pas encore incluses dans les fonctionnalités stables du langage, bien qu'elles soient implémentées dans le compilateur et maintenant impliqué dans la bibliothèque standard pour les traits de tableau de toute taille.

    Par exemple, la construction suivante dans Rust 1.47 imprimera le contenu d'un tableau, même si auparavant cela aurait entraîné une erreur :

    fn principal() {
    soit xs = [0; 34];

    println!("{:?}", xs);
    }

  • Sortie fournie de traces plus courtes (backtrace), sortie dans les situations d'urgence. Les éléments qui ne présentent pas d'intérêt dans la plupart des situations, mais qui encombrent le résultat et détournent l'attention des causes principales du problème, sont exclus du suivi. Pour renvoyer une trace complète, vous pouvez utiliser la variable d'environnement "RUST_BACKTRACE=full". Par exemple, pour le code

    fn principal() {
    panique!();
    }

    Auparavant, la trace était générée en 23 étapes, mais elle sera désormais réduite à
    3 étapes qui permettent d’en saisir immédiatement l’essence :

    le fil 'main' a paniqué à cause de 'panique explicite', src/main.rs:2:5
    trace de la pile :
    0 : std ::panicking ::begin_panic
    à /rustc/d…d75a/library/std/src/panicking.rs:497
    1 : aire de jeux ::main
    à ./src/main.rs:2
    2 : core :: ops :: function :: FnOnce :: call_once
    à /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Le compilateur rustc a été mis à jour pour être construit en utilisant LLVM 11 (Rouiller utilise LLVM comme backend pour génération de code). Dans le même temps, la possibilité de construire avec des LLVM plus anciens, jusqu'à la version 8, est conservée, mais par défaut (dans rust-lang/projet llvm) utilise désormais LLVM 11. LLVM 11 devrait être publié dans les prochains jours.
  • Sur la plate-forme Windows, le compilateur rustc prend en charge l'activation des contrôles d'intégrité du flux de contrôle (Control Flow Guard), activés à l'aide de l'indicateur « -C control-flow-guard ». Sur les autres plateformes, ce drapeau est ignoré pour l'instant.
  • Une nouvelle partie des API a été transférée dans la catégorie stable, notamment les API stabilisées
    Ident::new_raw,
    Range::is_empty,
    RangeInclusive ::is_empty,
    Résultat ::as_deref,
    Résultat ::as_deref_mut,
    Vec :: fuite,
    pointeur :: offset_from,
    f32 :: TAU et
    f64 :: TAU.

  • L'attribut « const », qui détermine la possibilité de l'utiliser dans n'importe quel contexte à la place de constantes, est utilisé dans les méthodes :
    • nouveau pour tous les entiers autres que zéro ;
    • check_add, Check_sub, Check_mul, Check_neg, Check_shl, Check_shr, Saturating_add, Saturating_sub et Saturating_mul pour tous les entiers ;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_uccion, is_ascii_graphic, is_ascii_whitespace et is_ascii_control pour les types char et u8.
  • Pour FreeBSD impliqué boîte à outils de FreeBSD 11.4 (FreeBSD 10 ne prend pas en charge LLVM 11).

Source: opennet.ru

Ajouter un commentaire