Sortie de Rust 1.94. Expérimentations avec Rust dans le noyau FreeBSD. SGBD Turso et CAO vcad sur Rust

La version 1.94 du langage de programmation Rust a été publiée, initialement développée par Mozilla, mais désormais maintenue par la Rust Foundation, une organisation indépendante à but non lucratif. Ce langage est axé sur la gestion sécurisée de la mémoire et propose des outils pour atteindre un haut niveau de parallélisme dans l'exécution des tùches, tout en évitant l'utilisation d'un ramasse-miettes et d'un runtime (le runtime se limite à l'initialisation de base et à l'accompagnement de la bibliothÚque standard).

Les méthodes de gestion de la mémoire dans Rust visent à éliminer les erreurs lors de la manipulation des pointeurs et à protéger contre les problÚmes liés à une gestion de la mémoire à bas niveau, tels que l'accÚs à une zone mémoire aprÚs sa libération, la déréférence de pointeurs nuls, les débordements de tampon, etc. Pour la distribution de bibliothÚques, la construction et la gestion des dépendances, un gestionnaire de paquets nommé Cargo est développé. Un dépÎt crates.io est maintenu pour l'hébergement des bibliothÚques.

La sécurité de la mémoire dans Rust est assurée au moment de la compilation grùce à la vérification des références, au suivi de la propriété des objets, à la prise en compte de la durée de vie des objets (portée) et à l'évaluation de l'accÚs mémoire pendant l'exécution du code. Rust offre également des outils pour se protéger contre les débordements d'entiers, exige l'initialisation obligatoire des valeurs des variables avant leur utilisation, gÚre mieux les erreurs dans la bibliothÚque standard, applique le concept d'immuabilité (immutable) pour les références et les variables par défaut, et propose une forte typage statique pour minimiser les erreurs logiques.

Les principales nouveautés :

  • La mĂ©thode array_windows a Ă©tĂ© ajoutĂ©e au type slice, crĂ©ant un itĂ©rateur pour parcourir des « fenĂȘtres » de taille fixe sur les tranches (slice), se dĂ©plaçant d'un Ă©lĂ©ment Ă  la fois. Contrairement Ă  la mĂ©thode windows prĂ©cĂ©demment disponible, la mĂ©thode array_windows opĂšre avec une taille de fenĂȘtre constante et renvoie Ă  chaque itĂ©ration une rĂ©fĂ©rence Ă  un tableau de taille fixe (&[T; N]) plutĂŽt qu'Ă  une tranche de taille indĂ©terminĂ©e (&[T]). Comme la taille du tableau est initialement connue du compilateur, il est possible d'Ă©viter la vĂ©rification des limites du tableau Ă  chaque Ă©tape de l'itĂ©ration. let slice = [0, 1, 2, 3]; let mut iter = slice.array_windows(); assert_eq!(iter.next().unwrap(), &[0, 1]); assert_eq!(iter.next().unwrap(), &[1, 2]); assert_eq!(iter.next().unwrap(), &[2, 3]); assert!(iter.next().is_none());
  • Le fichier de configuration du gestionnaire de paquets Cargo (.cargo/config.toml) a implĂ©mentĂ© la directive « include », permettant d'inclure le contenu d'autres fichiers directement. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
  • Les fichiers de manifeste et de configuration ont Ă©tĂ© mis Ă  jour pour supporter la nouvelle version du langage de balisage TOML 1.1, qui intĂšgre notamment les tableaux intĂ©grĂ©s multiligne, les sĂ©quences d'Ă©chappement « \xHH » pour insĂ©rer la reprĂ©sentation hexadĂ©cimale des octets et « \e » pour remplacer « \u001B », la possibilitĂ© de laisser une virgule Ă  la fin du dernier Ă©lĂ©ment, et d'omettre l'indication des secondes dans les valeurs temporelles. serde = { version = "1.0", features = ["derive"] } peut maintenant ĂȘtre remplacĂ© par serde = { version = "1.0", features = ["derive"], }
  • Une nouvelle sĂ©rie d'API a Ă©tĂ© stabilisĂ©e dans la catĂ©gorie des API stables, notamment des mĂ©thodes et des implĂ©mentations de traits stabilisĂ©es :
    • ::array_windows
    • ::element_offset
    • LazyCell::get
    • LazyCell::get_mut
    • LazyCell::force_mut
    • LazyLock::get
    • LazyLock::get_mut
    • LazyLock::force_mut
    • impl TryFrom for usize
    • std::iter::Peekable::next_if_map
    • std::iter::Peekable::next_if_map_mut
    • Fonctions intĂ©grĂ©es pour les instructions x86 avx512fp16
    • Fonctions intĂ©grĂ©es pour les instructions NEON fp16 AArch64
    • f32::consts::EULER_GAMMA
    • f64::consts::EULER_GAMMA
    • f32::consts::GOLDEN_RATIO
    • f64::consts::GOLDEN_RATIO
  • L'attribut «const» est appliquĂ© dans les fonctions :
    • f32::mul_add
    • f64::mul_add
  • La plateforme riscv64im-unknown-none-elf a Ă©tĂ© portĂ©e au troisiĂšme niveau de support. Ce niveau couvre la prise en charge de base, mais sans tests automatisĂ©s, publication de builds officiels et vĂ©rification de la possibilitĂ© de construire du code.

De plus, on peut noter les projets et événements récemment annoncés liés à Rust :

  • Ayrton Muñoz, qui a prĂ©cĂ©demment implĂ©mentĂ© le support de la plateforme Sony PlayStation 1 dans le compilateur Rust et a portĂ© FreeBSD sur des ordinateurs avec des puces Apple Silicon, a mis en place pour FreeBSD la possibilitĂ© de crĂ©er des composants du noyau et des pilotes de pĂ©riphĂ©riques en langage Rust. Un ensemble d'interfaces KPI (Kernel Programming Interface) a Ă©tĂ© proposĂ© pour tester, permettant d'utiliser le code Rust dans le noyau FreeBSD, ainsi qu’un driver audio virtio (virtio_snd) et un driver HID DockChannel pour le clavier sur MacBook M2, ainsi que plusieurs pilotes de bas niveau pour les sous-systĂšmes des ordinateurs Mac basĂ©s sur des puces Apple Silicon.

    Il est Ă  noter que le travail sur les interfaces Rust a commencĂ© fin 2024. Les interfaces ne rĂ©alisent pour l'instant qu'une partie des C-KPI et sont positionnĂ©es comme instables, mais avec le temps, le niveau de stabilitĂ© devrait ĂȘtre portĂ© Ă  celui de l'interface Ă©quivalente en langage C. Le driver virtio_snd proposĂ© en exemple est capable de reproduire de la musique dans QEMU. Il est prĂ©vu qu'en 2026, les interfaces Rust soient suffisamment stabilisĂ©es pour que des dĂ©veloppeurs intĂ©ressĂ©s puissent commencer Ă  les utiliser pour Ă©crire du code.

  • Benny Siegert, qui participe au dĂ©veloppement de NetBSD, a tentĂ© de justifier pourquoi le support du langage Rust ne sera pas intĂ©grĂ© dans le noyau de NetBSD : NetBSD prend en charge des architectures pour lesquelles Rust n'est pas disponible ; maintenir les outils Rust existants dans pkgsrc nĂ©cessite des efforts importants et est soutenu par seulement quelques dĂ©veloppeurs ; la prise en charge de Rust dans le noyau nĂ©cessite l'inclusion du compilateur Rust dans le systĂšme de base ; lors du bootstrap de Rust dans NetBSD, une ancienne version du paquet binaire est utilisĂ©e, ce qui est inacceptable pour les distributions autonomes diffusĂ©es en source ; les cycles de publication de Rust sont incompatibles avec le cycle de dĂ©veloppement de NetBSD et le support des anciennes branches (par exemple, la branche NetBSD 9, sortie en 2020, continue d'ĂȘtre supportĂ©e, dans ces conditions, la livraison et le support d'un compilateur Rust vieux de six ans seraient nĂ©cessaires).
  • La publication de la version intĂ©grĂ©e de la base de donnĂ©es Turso 0.5, Ă©crite en Rust et compatible avec SQLite au niveau du dialecte SQL, du format de fichier de base de donnĂ©es et de l'API C. Parmi les fonctionnalitĂ©s avancĂ©es, on note le mĂ©canisme CDC (Change Data Capture) pour suivre les modifications de la base de donnĂ©es en temps rĂ©el, l'utilisation de io_uring pour l'entrĂ©e/sortie asynchrone sous Linux, le support de la recherche vectorielle, la prĂ©sence de l'instruction ALTER pour modifier le schĂ©ma de la base de donnĂ©es, la possibilitĂ© de chiffrer des donnĂ©es dans la base de donnĂ©es, un mode de calcul incrĂ©mental et la construction « BEGIN CONCURRENT ».
  • Un projet visant Ă  permettre l'utilisation de la bibliothĂšque standard de Rust dans des programmes exĂ©cutĂ©s cĂŽtĂ© GPU.
  • Emuko — un Ă©mulateur RISC-V, Ă©crit en Rust, capable de charger Linux, prenant en charge la compilation JIT, capable de sauvegarder et de restaurer des instantanĂ©s d'Ă©tat.
  • RustConn (flatpak) — une interface graphique pour gĂ©rer des connexions rĂ©seau externes vers d'autres hĂŽtes, prenant en charge SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust et SFTP. Le code est Ă©crit en Rust en utilisant GTK4 et Wayland.
  • Une nouvelle branche du projet zlib-rs 0.6 a Ă©tĂ© publiĂ©e, marquĂ©e comme la premiĂšre version stable, entiĂšrement compatible avec l'API C de zlib et adaptĂ©e pour un remplacement transparent de zlib. Le projet vise Ă  crĂ©er un Ă©quivalent sĂ©curisĂ© de la bibliothĂšque de compression de donnĂ©es zlib. Le dĂ©veloppement se fait en tenant compte du projet zlib-ng, qui dĂ©veloppe une variante haute performance de zlib.
  • Le projet vcad a Ă©tĂ© prĂ©sentĂ©, dĂ©veloppant un systĂšme de conception assistĂ©e par ordinateur (CAO) paramĂ©trique, Ă©crit en Rust et intĂ©grable avec des agents AI via le protocole MCP. Il prend en charge la modĂ©lisation 3D, la simulation, le travail avec des croquis 2D, l'assemblage de composants, l'importation au format STEP et l'exportation aux formats STL/GLB/STEP/DXF.
  • Un systĂšme de reconnaissance vocale a Ă©tĂ© publiĂ©, Ă©crit en Rust et utilisant le modĂšle AI Mistral Voxtral Mini 4B Realtime et le cadre d'apprentissage machine Burn. Le projet est axĂ© sur la reconnaissance vocale en temps rĂ©el pour gĂ©nĂ©rer des transcriptions lors de diffusions en direct.
  • La version 0.22 de l'outil c2rust a Ă©tĂ© publiĂ©e, destinĂ© Ă  traduire du code C (C99) en une reprĂ©sentation unsafe en Rust, proche de la structure du code C d'origine. Le cadre de travail obtenu peut ensuite ĂȘtre utilisĂ© pour une conversion progressive vers du Rust idiomatique et pour se dĂ©barrasser des blocs unsafe.

Source : opennet.ru

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster