Version du langage de programmation Rust 1.47

La version 1.47 du langage de programmation système Rust, fondé par le projet Mozilla, a été publiée. Le langage se concentre sur la sécurité de la mémoire, assure une gestion automatique de la mémoire et fournit les moyens d'atteindre un parallélisme élevé des tâches sans utiliser de garbage collector ou d'exécution (le temps d'exécution est réduit à 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. Pour distribuer les bibliothèques, assurer l'assemblage et gérer les dépendances, le projet développe le gestionnaire de packages Cargo. Le référentiel crates.io est pris en charge pour l'hébergement de bibliothèques.

Principales nouveautés :

  • Implémentation de la prise en charge des traits pour les tableaux de taille arbitraire. 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é 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 soient désormais utilisées dans la bibliothèque standard. pour les types de tableaux 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 réalisée en 23 étapes, mais désormais elle sera réduite à 3 étapes, permettant 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 à l'aide de LLVM 11 (Rust utilise LLVM comme backend pour la génération de code). Dans le même temps, la possibilité de construire avec l'ancien LLVM, jusqu'à la version 8, est conservée, mais par défaut (dans rust-lang/llvm-project) LLVM 11 est désormais utilisé. La sortie de LLVM 11 est attendue dans les prochains jours. 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 de l'API a été transférée vers la catégorie stable, comprenant les stabilisés Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::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, la boîte à outils de FreeBSD 11.4 est utilisée (FreeBSD 10 ne prend pas en charge LLVM 11).

Pris de opennet.ru

Source: linux.org.ru

Ajouter un commentaire