fr.wikipedia.org

Rust (langage) — Wikipédia

  • ️Sun Jan 01 2006
Rust
Logo.
Image illustrative de l’article Rust (langage)

Date de première version 2006Voir et modifier les données sur Wikidata
Paradigmes Impératif, fonctionnel, concurrent
Auteur Graydon Hoare
Développeurs Rust Project, Rust Foundation (en)
Dernière version 1.84.1 (30 janvier 2025)[1]Voir et modifier les données sur Wikidata
Typage Fort, statique
Influencé par C++, Erlang, Haskell, Scala, OCaml, Scheme, Swift, C#, Alef, Limbo[2]
A influencé Swift[3], V[4], Zig[5]
Système d'exploitation Multiplate-forme
Licence Licence Apache 2.0[6],[7] et licence MIT[6],[7]Voir et modifier les données sur Wikidata
Site web www.rust-lang.orgVoir et modifier les données sur Wikidata
Extensions de fichiers .rs, .rlib
modifier 

Rust est un langage de programmation compilé multi-paradigme qui met l'accent sur la performance, la sûreté des types et la concurrence. Il assure la sécurité mémoire (en), ce qui signifie que toutes les références pointent vers une mémoire valide, sans nécessiter l'utilisation de techniques de gestion de la mémoire automatisée telles que le ramasse-miettes. Afin d'assurer la sécurité de la mémoire et d'empêcher une situation de compétition aux données, son « vérificateur d'emprunts » suit la durée de vie des objets de toutes les références dans un programme à la compilation.

Rust a été influencé par des idées issues de la programmation fonctionnelle, notamment immutabilité, fonction d'ordre supérieur et les types algébriques. Il est populaire pour la programmation système[8],[9],[10].

Graydon Hoare, développeur de logiciels, a créé Rust en tant que projet personnel alors qu'il travaillait à Mozilla Research en 2006. Mozilla a officiellement parrainé le projet en 2009. Dans les années qui ont suivi la première version stable en mai 2015, Rust a été adopté par des entreprises telles que Amazon, Discord, Dropbox, Google (Alphabet), Meta, et Microsoft. En décembre 2022, il est devenu le premier langage autre que le C et l'assembleur à être pris en charge dans le développement du noyau Linux[11].

Rust a été remarqué pour son adoption rapide[12], et a été étudié dans le cadre de la recherche sur la théorie des langages de programmation[13],[14],[15].

Selon le Stack Overflow Survey 2024, c'est le langage le plus apprécié dans ce sondage[16].

Rust est né d'un projet personnel initié en 2006 par Graydon Hoare, employé de Mozilla Research[17]. Mozilla a commencé à parrainer le projet en 2009 dans le cadre du développement continu d'un moteur de navigateur expérimental appelé Servo[18], qui a été officiellement annoncé par Mozilla en 2010 [19],[20]. Au cours de la même année, le travail est passé du compilateur initial écrit en OCaml à un compilateur auto-hébergé basé sur LLVM écrit en Rust. Le nouveau compilateur Rust a réussi à se compiler lui-même en 2011[18].

Le système de types de Rust a subi des changements importants entre les versions 0.2, 0.3 et 0.4. Dans la version 0.2, publiée en mars 2012, les classes ont été introduites pour la première fois[21]. Quatre mois plus tard, la version 0.3 ajoute les destructeurs et le polymorphisme, grâce à l'utilisation d'interfaces[22]. En octobre 2012, la version 0.4 a été publiée, ajoutant traits comme moyen d'héritage. Les interfaces ont été combinées avec les traits et supprimées en tant que fonctionnalité séparée ; et les classes ont été remplacées par une combinaison d'implémentations et de types structurés[23].

Au début des années 2010, la gestion de la mémoire par le système de propriété a été progressivement consolidée pour éviter les bogues de mémoire. En 2013, le ramasse-miettes a été supprimé, avec les règles de propriété en place[17]. En janvier 2014, le rédacteur en chef du Dr. Dobb's Journal (en), Andrew Binstock, a commenté les chances de Rust de devenir un concurrent de C++, au même titre que D, Go, et Nim. Selon Binstock, alors que Rust était "largement considéré comme un langage remarquablement élégant", l'adoption a ralenti parce qu'il changeait radicalement d'une version à l'autre[24]. La première version stable, Rust 1.0, a été annoncée le 15 mai 2015[25],[26].

Le développement du moteur de navigation Servo s'est poursuivi parallèlement à la propre croissance de Rust. En septembre 2017, Firefox 57 a été publié en tant que première version intégrant des composants de Servo, dans un projet nommé "Firefox Quantum"[27].

En août 2020, Mozilla a licencié 250 de ses 1 000 employés dans le monde, dans le cadre d'une restructuration de l'entreprise causée par la pandémie de COVID-19[28],[29]. L'équipe à l'origine de Servo a été dissoute. L'événement a soulevé des inquiétudes quant à l'avenir de Rust, car certains membres de l'équipe étaient des contributeurs actifs à Rust[30]. La semaine suivante, la Rust Core Team a reconnu l'impact sévère des licenciements et a annoncé que des plans pour une fondation Rust étaient en cours. Le premier objectif de la fondation serait de prendre possession de toutes les marques déposées et de tous les noms de domaine, et d'assumer la responsabilité financière de leurs coûts[31].

Le 8 février 2021, la formation de la Rust Foundation a été annoncée par ses cinq entreprises fondatrices (AWS, Huawei, Google, Microsoft, et Mozilla)[32],[33]. Dans un blog publié le 6 avril 2021, Google a annoncé le support de Rust au sein du Android Open Source Project comme alternative à C/C++ [34].

Le 22 novembre 2021, l'équipe de modération, qui était chargée de faire respecter les normes de la communauté et le Code de conduite, a annoncé sa démission "pour protester contre le fait que l'équipe principale ne rende de comptes à personne d'autre qu'à elle-même"[35]. En mai 2022, l'équipe principale de Rust, d'autres programmeurs principaux et certains membres du conseil d'administration de la Fondation Rust ont mis en œuvre des réformes de gouvernance en réponse à l'incident[36].

La Fondation Rust a publié le 6 avril 2023 un projet de nouvelle politique de marque déposée, révisant ses règles sur la façon dont le logo et le nom Rust peuvent être utilisés, ce qui a entraîné des réactions négatives de la part des utilisateurs et des contributeurs de Rust[37].

La syntaxe du langage est similaire à celle du C, étant constituée de blocs de code délimités par des accolades et de structures de contrôle comme if, else, while et for. Cependant, la sémantique de Rust est assez différente. En effet, les blocs et les structures de contrôle sont des expressions, comme on peut le voir dans l'exemple :

let x = if n < 10 { n } else { n - 10 };

En C, une telle opération n'est pas « intelligible » pour le compilateur ; il faudra soit encapsuler le bloc conditionnel dans une autre fonction, soit utiliser un opérateur ternaire int x = (n < 10) ? n : n - 10;. L'utilisation d'expressions rapproche ainsi Rust de langages fonctionnels comme Haskell ou OCaml.

Dans la plupart des langages, une variable est modifiable par défaut. Rust inverse cette logique en privilégiant la constance : le mot-clé let déclare par défaut des variables immuables (immutable variable en anglais) qui ne peuvent être affectées qu'une seule fois, mais dont la valeur peut être définie au moment de l'exécution. Il est nécessaire de rajouter le mot-clé mut pour rendre une variable « mutable » ou « muable » : ainsi, on restreint les variables qui sont effectivement autorisées à changer. Le type des variables est inféré à chaque fois que c'est possible.

Pour les valeurs constantes connues à la compilation, le mot-clé const remplace let. Leur type doit être précisé et elles doivent être initialisées à partir d'une expression constante, excluant les résultats d'appels de fonctions[38].

fn main() {
    // Déclaration de variables
    let mut a = 5; // a est une variable modifiable
    let b = a * 2; // b est non modifiable et du même type que a
    // Constantes
    const c: u32 = 5; // déclaration d'une constante entière non-signée
    const c: u8 = b - 3; // interdit car `b - 3` n'est pas une expression constante (b non défini à la compilation)
    const c = 5; // interdit car le type de c n'est pas précisé
    // Altération
    c = 3; // illégal car c est une constante
    b = 3; // illégal car b est une variable immuable
    a = 2; // autorisé car a est déclaré comme "mut"
    let a = a + 5; // autorisé une nouvelle variable a est créée valant 7,
                   // l'ancienne variable a est "couverte" par la nouvelle (shadowing)
    // Vérification des valeurs
    assert_eq!(a, 5); // faux
    assert_eq!(b, 10); // vrai
}

Rust permet la définition de types sommes (ou énumérations) à l'aide du mot-clé enum. On peut utiliser ces types sommes avec du filtrage par motif, en utilisant par exemple le mot-clé match.

Exemple :

// On crée un type « Forme » pour décrire des formes géométriques.
enum Forme {
    Point,               // une forme peut être un point, sans données attachées.
    Cercle(f64),         // une forme peut être un cercle, caractérisé par son rayon.
    Rectangle(f64, f64), // une forme peut être un rectangle, caractérisé par les longueurs de deux de ses côtés adjacents.
}
// Calcule l'aire d'une forme géométrique.
fn aire(f: Forme) -> f64 {
    match f {
        // Filtrage par motif avec « match »
        Forme::Point => 0.0,
        Forme::Cercle(rayon) => rayon * rayon * 3.1415926535897932384626433832795,
        Forme::Rectangle(cote_a, cote_b) => cote_a * cote_b,
    }
}

Certaines énumérations font partie de la bibliothèque standard, comme Option, permettant d'éviter l'utilisation du pointeur NULL[39].

Afin de garantir la programmation générique, le langage Rust implémente son propre système de métaprogrammation basé sur les traits. Ainsi, un développeur souhaitant mettre en place une fonction générique sera dans l’obligation d’expliciter les différents traits utilisés dans sa fonction, son objet ou sa méthode.

Exemple de l’implémentation du tri-bulle de manière générique :

fn tri_bulle<T: std::cmp::PartialOrd>(liste: &mut Vec<T>) {
    // Ici, on a besoin de l’opérateur de comparaison < implémenté par le trait
    // PartialOrd
    let mut i = 0;
    while i < (liste.len() - 1) {
        if liste[i] < liste[i + 1] {
            liste.swap(i, i + 1);
            i = 0;
        } else {
            i += 1;
        }
    }
}

Ainsi, toute liste de valeurs prenant en charge l’opérateur de comparaison « < » pourra être passée comme argument pour cette fonction.

Les traits sont assimilables aux interfaces en Java ou aux classes abstraites en C++ : Ils définissent les méthodes qui seront proposées par les structures les implémentant. Ils sont des composants centraux du langage, étant donné que les opérations comme les additions sont définies via l’implémentation de traits. Ces derniers peuvent également proposer une implémentation générique de certaines de leurs fonctions à condition que ces dernières ne requièrent pas l’utilisation de données stockées dans les objets.

Exemple de définition d‘un trait :

trait Polygone {
    fn nombre_cotes(&self) -> usize;
    fn points(&self) -> Vec<(f32, f32)>;
    // Il n’existe pas de méthode simple et générique pour calculer l’aire d’un
    // polygone
    fn aire(&self) -> f32;
    fn perimetre(&self) -> f32 {
        let mut ret = 0.0;
        let points = self.points();
        for i in 1..points.len() {
            ret += f32::sqrt(
                f32::pow(points[i].0 - points[i - 1].0, 2)
                    + f32::pow(points[i].1 - points[i - 1].1, 2),
            );
        }
        return ret;
    }
}

Pour obtenir des garanties de sûreté, Rust utilise les concepts d'ownership (propriété ou possession) et de borrowing (emprunt). Ainsi, une valeur a toujours un seul propriétaire. Si la valeur change de propriétaire, l'ancien propriétaire ne peut plus l'utiliser. Par exemple :

fn prend_possession(v: Vec<i32>) {
    // Cette fonction prend possession de son paramètre v et ne la rend pas.
    println!("{:?}", v);
}

fn main() {
    let mut a = vec![1, 2, 3]; // a est le propriétaire du vecteur.
    let mut b = a; // b est maintenant le propriétaire du vecteur.

    // pas clair,
    a.push(4); // erreur de compilation : a n'a plus le droit d'utiliser ce vecteur

    prend_possession(b);
    b.push(5); // erreur de compilation : b n'a plus le droit d'utiliser ce vecteur
}

Pour utiliser une valeur à plusieurs endroits à la fois, il est possible de prêter cette valeur en créant des références. Il est possible de créer :

  • Soit des références immuables, avec l'opérateur &.
  • Soit une référence muable, avec l'opérateur & mut.

En particulier, il n'est pas possible de mélanger les références muables et immuables. Exemple :

fn take_reference(v: &Vec<i32>) {
    // Cette fonction prend une référence vers un vecteur
    println!("{:?}", v);
}

fn correct() {
    let a = vec![1, 2, 3];
    let ref_1 = &a;
    let ref_2 = &a;
    // On crée plusieurs références immuables vers a que l'on peut passer à des fonctions.
    // Faire ceci ne serait pas possible si l'on travaillait avec une fonction qui prend
    // l'ownership de a.
    take_reference(ref_1);
    take_reference(ref_2);
}

fn incorrect() {
    let mut a = vec![1, 2, 3];
    // Ce code ne compile pas.
    // En effet, on travaille à la fois avec une référence muable vers a (ref_1),
    // et à la fois avec une référence immuable vers a (ref_2).
    let ref_1 = &mut a[0];
    let ref_2 = &a;
    println!("{}", *ref_1);
    take_reference(ref_2);
}

Rust repose sur des concepts connus et éprouvés (d'où le nom Rust, « la rouille » en anglais) et n'intègre pas de concepts nouveaux et non-testés[40][réf. obsolète][41]. Ces concepts ont été empruntés à des langages de programmation existants et assemblés dans un seul langage[42] :

Rust est souvent décrit comme l'un des successeurs potentiels de C et C++[43] (avec D et, dans une moindre mesure, Go) notamment de par sa sûreté et sa rapidité — c'est un objectif clairement affiché par les développeurs.

Compilation d'un programme Rust avec Cargo

L'écosystème Rust comprend son compilateur, sa bibliothèque standard, et des composants supplémentaires pour le développement de logiciels. L'installation des composants est généralement gérée par rustup, un installateur de chaîne de compilation Rust développé par le projet Rust[44].

Le compilateur Rust est nommé rustc. En interne, rustc est un frontal pour divers moteurs qui sont utilisés pour obtenir des fichiers de code binaire spécifiques aux appareils et aux plates-formes (par exemple, ELF ou WASM binaire). Le moteur le plus mature et le plus utilisé dans rustc est le compilateur de représentation intermédiaire (bytecode) LLVM.

Outre LLVM, le compilateur supporte également l'utilisation de backends alternatifs tels que GCC et Cranelift (en) pour la génération de code[45]. L'intention de ces backends alternatifs est d'augmenter la couverture de plateforme de Rust ou d'améliorer les temps de compilation[46],[47].

La bibliothèque standard de Rust définit et implémente les types de données personnalisés les plus utilisés, y compris les structures de données de base telles que Vec, Option, et HashMap, ainsi que les types pointeurs intelligents. Rust fournit également un moyen d'exclure la plupart de la bibliothèque standard en utilisant l'attribut #![no_std] ; cela permet aux applications, telles que les dispositifs embarqués, qui veulent supprimer le code de dépendance ou fournir leurs propres structures de données de base. En interne, la bibliothèque standard est divisée en trois parties, core, alloc et std, où std et alloc sont exclus par #![no_std].[48]

Capture d'écran de crates.io en juin 2022.

Cargo est le moteur de production et le gestionnaire de paquets de Rust. Il télécharge, compile, distribue et met en ligne des paquets - appelés "crates" - qui sont maintenus dans un registre officiel. Il agit également comme une interface pour Clippy et d'autres composants Rust[12].

Par défaut, Cargo puise ses dépendances dans le registre crates.io alimenté par les utilisateurs, mais les dépôts Git et les crates dans le système de fichiers local, ainsi que d'autres sources externes, peuvent également être spécifiés comme dépendances[49].

Rustfmt est un formateur de code pour Rust. Il formate les espaces blancs et indentation pour produire du code en accord avec un style commun, sauf indication contraire. Il peut être invoqué en tant que programme autonome, ou à partir d'un projet Rust via Cargo.[50]

Exemple de sortie de Clippy sur un programme Rust hello world.

Clippy est l'outil de lint intégré à la chaîne de compilation Rust pour améliorer la correction, les performances et la lisibilité du code Rust. Il a été créé en 2014[51] et nommé d'après l'Assistant de Microsoft Office, un trombone anthropomorphisé du même nom[52]. Fin 2023, il compte plus de 650 règles[53],[54], qui peuvent être parcourues en ligne et filtrées par catégorie[55].

Le serveur de langage (en) le plus populaire pour Rust est Rust Analyzer, qui a officiellement remplacé le serveur de langue original, RLS, en juillet 2022[56]. Rust Analyzer fournit aux environnements de développement intégrés et aux éditeurs de textes des informations sur un projet Rust ; des fonctionnalités de base incluant autocomplétion, et l'affichage des erreurs de compilation pendant l'édition. [57]

En général, les garanties de sécurité mémoire de Rust n'imposent pas de surcharge à l'exécution[58]. Une exception notable est indexation de tableau qui est vérifiée à l'exécution, bien que cela n'ait souvent pas d'impact sur les performances[59]. Dans la mesure où il ne dispose pas de ramasse-miettes, Rust est souvent plus rapide que d'autres langages à sécurité mémoire[60],[61],[62].

Rust dispose deux "modes" coexistant : safe et unsafe. Le mode safe est le mode "normal", dans lequel la plupart des codes Rust sont écrits. En mode unsafe, le développeur est responsable de la sécurité mémoire du code, ce qui est utile dans les cas où le compilateur est trop restrictif[63].

De nombreuses fonctionnalités de Rust sont des abstractions dites "à coût zéro", ce qui signifie qu'elles sont optimisées à la compilation et n'entraînent aucune pénalité à l'exécution[64]. Le système de propriété et d'emprunt permet des implémentations zéro coût (en) pour certaines tâches sensibles aux performances, telles que parsing[65]. Le dispatch statique est utilisé par défaut pour éliminer les appels de méthode, à l'exception des méthodes appelées sur des objets traits dynamiques[66]. Le compilateur utilise également l'extension inline pour éliminer les appels de fonctions et les invocations de méthodes distribuées statiquement[67].

Puisque Rust utilise LLVM, toutes les améliorations de performance dans LLVM sont également transférées au compilateur Rust[68]. Contrairement aux C et C++, Rust permet de réordonner les éléments struct et enum[69] pour réduire la taille des structures en mémoire, pour un meilleur alignement de la mémoire et pour améliorer l'efficacité de l'accès au cache[70].

Première page d'accueil du moteur de navigation Servo de Mozilla.

Rust a été utilisé dans des logiciels de différents domaines. Rust a été initialement financé par Mozilla dans le cadre du développement de Servo, un moteur de navigateur expérimental parallèle, en collaboration avec Samsung[71]. Des composants du moteur Servo ont ensuite été incorporés dans le moteur de navigateur Gecko qui sous-tend Firefox[72]. En janvier 2023, Google (Alphabet) a annoncé la prise en charge de l'utilisation de bibliothèques Rust tierces dans Chromium[73],[74].

Rust est utilisé dans plusieurs projets logiciels de grands fournisseur de services web. OpenDNS, un service de résolution de DNS appartenant à Cisco, utilise Rust en interne[75],[76]. Amazon Web Services utilise Rust dans les « composants sensibles aux performances » de ses différents services. En 2019, AWS a open-sourcé Firecracker (en), une solution de virtualisation principalement écrite en Rust[77]. Microsoft Azure IoT Edge, une plateforme utilisée pour exécuter des services Azure sur des appareils IoT, a des composants implémentés en Rust[78]. Microsoft utilise également Rust pour exécuter des modules conteneurisés avec WebAssembly et Kubernetes[79]. Cloudflare, une entreprise fournissant des services de réseau de diffusion de contenu, a utilisé Rust pour construire un nouveau proxy web nommé Pingora pour une performance et une efficacité accrues[80].

Dans les systèmes d'exploitation, le support de Rust a été ajouté à Linux[81],[82] et Android[83],[84]. Microsoft réécrit des parties de son système d'exploitation Windows en Rust[85]. Le projet r9 vise à réimplémenter Plan 9 from Bell Labs en Rust[86]. Rust a été utilisé dans le développement de nouveaux systèmes d'exploitation tels que Redox, un système d'exploitation « Unix-like » et microkernel,[87] Theseus, un système d'exploitation expérimental avec une gestion modulaire des états[88],[89], et la plupart de Fuchsia[90]. Rust est également utilisé pour des outils en ligne de commande et des composants de systèmes d'exploitation, notamment stratisd (en), un gestionnaire de système de fichiers[91],[92] et COSMIC, un environnement de bureau de System76[93].

Ruffle, un émulateur web pour Adobe Flash SWF.

Dans le domaine du développement web, le npm a commencé à utiliser Rust en production en 2019[94],[95],[96]. Deno, un runtime sécurisé pour JavaScript et TypeScript, est construit au-dessus de V8 en utilisant Rust et Tokio[97]. D'autres adoptions notables dans cet espace incluent Ruffle, un émulateur SWF open-source[98], et Polkadot, une plateforme open source de blockchain et de cryptomonnaie[99].

Discord, un éditeur de logiciels de messagerie instantanée, a réécrit certaines parties de son système dans Rust pour augmenter les performances en 2020. La même année, Dropbox a annoncé que sa synchronisation de fichiers avait été réécrite en Rust. Facebook (Meta) a également utilisé Rust pour repenser son système de gestion du code source des projets internes[17].

Dans l'enquête Stack Overflow de 2023 auprès des développeurs, 13 % des personnes interrogées avaient récemment effectué un développement approfondi en Rust[100]. L'enquête a également désigné Rust comme le « langage de programmation le plus aimé » chaque année de 2016 à 2023 (inclus), en se basant sur le nombre de développeurs souhaitant continuer à travailler dans le même langage[101]. En 2023, Rust était la 6e « technologie la plus recherchée », avec 31% des développeurs ne travaillant pas actuellement en Rust exprimant un intérêt pour le faire[100].

Hello world :

// This is the main function
fn main() {
    // The statements here will be executed when the compiled binary is called

    // Print text to the console
    println!("Hello World!");
}

Arrays and Slices :

use std::mem;

// This function borrows a slice
fn analyze_slice(slice: &[i32]) {
    println!("first element of the slice: {}", slice[0]);
    println!("the slice has {} elements", slice.len());
}

fn main() {
    // Fixed-size array (type signature is superfluous)
    let xs: [i32; 5] = [1, 2, 3, 4, 5];

    // All elements can be initialized to the same value
    let ys: [i32; 500] = [0; 500];

    // Indexing starts at 0
    println!("first element of the array: {}", xs[0]);
    println!("second element of the array: {}", xs[1]);

    // `len` returns the size of the array
    println!("array size: {}", xs.len());

    // Arrays are stack allocated
    println!("array occupies {} bytes", mem::size_of_val(&xs));

    // Arrays can be automatically borrowed as slices
    println!("borrow the whole array as a slice");
    analyze_slice(&xs);

    // Slices can point to a section of an array
    println!("borrow a section of the array as a slice");
    analyze_slice(&ys[1..4]);

    // Out of bound indexing yields a panic
    println!("{}", xs[5]);
}
  • Jim Blandy et Jason Orendorff, Programmer avec Rust - pour une programmation système rapide et sûre, First Interactive, 5 septembre 2019, (ISBN 9782412046593)
  • Benoît Prieur, Rust - Développez des programmes robustes et sécurisés, Éditions ENI, 11 mai 2022, 362 p. (ISBN 2-409-03528-0).Voir et modifier les données sur Wikidata
  • (en) Jon Gjengset, Rust for Rustaceans, No Starch Press, 2021, 1st éd. (ISBN 9781718501850, OCLC 1277511986, lire en ligne)
  • (en) Steve Klabnik et Carol Nichols, The Rust Programming Language (Covers Rust 2018), No Starch Press, 12 août 2019 (ISBN 978-1-7185-0044-0, lire en ligne)
  1. a et b (en) « Announcing Rust 1.84.1 | Rust Blog », 30 janvier 2025 (consulté le 3 février 2025)
  2. (en) « The Rust Reference », sur rust-lang.org (consulté le 29 avril 2023).
  3. « Chris Lattner's Homepage », sur nondot.org (consulté le 29 avril 2023).
  4. (en) « V documentation (Introduction) », sur GitHub (consulté le 4 novembre 2023).
  5. (en) Serdar Yegulalp, « New challenger joins Rust to topple C language », sur InfoWorld, 29 août 2016 (consulté le 19 octobre 2022).
  6. a et b GitHub (service Internet).Voir et modifier les données sur Wikidata
  7. a et b « https://github.com/rust-lang/rust/blob/master/COPYRIGHT »
  8. (en) Prabhu Eshwarla, Practical System Programming for Rust Developers: Build fast and secure software for Linux/Unix systems with the help of practical examples, Packt Publishing, 24 décembre 2020 (ISBN 978-1-80056-201-1, lire en ligne)
  9. (en) Jim Blandy et Jason Orendorff, Programming Rust: Fast, Safe Systems Development, O'Reilly Media, Inc., 21 novembre 2017 (ISBN 978-1-4919-2725-0, lire en ligne)
  10. (en) Sergi Blanco-Cuaresma et Emeline Bolmont, « What can the programming language Rust do for astrophysics? », Proceedings of the International Astronomical Union, vol. 12, no S325,‎ 30 mai 2017, p. 341–344 (ISSN 1743-9213, DOI 10.1017/S1743921316013168, Bibcode 2017IAUS..325..341B, arXiv 1702.02951, S2CID 7857871, lire en ligne)
  11. (en) Michael Larabel, « The Initial Rust Infrastructure Has Been Merged Into Linux 6.1 », sur phoronix.com, 2022.
  12. a et b (en) Jeffrey M. Perkel, « Why scientists are turning to Rust », Nature, vol. 588, no 7836,‎ 1er décembre 2020, p. 185–186 (PMID 33262490, DOI 10.1038/d41586-020-03382-2, Bibcode 2020Natur.588..185P, S2CID 227251258, lire en ligne [archive du 6 mai 2022], consulté le 15 mai 2022)
  13. (en) « Computer Scientist proves safety claims of the programming language Rust » [archive du 24 février 2022], sur EurekAlert! (consulté le 15 mai 2022).
  14. Ralf Jung, Jacques-Henri Jourdan, Robbert Krebbers et Derek Dreyer, « RustBelt: securing the foundations of the Rust programming language », Proceedings of the ACM on Programming Languages, vol. 2, no POPL,‎ 27 décembre 2017, p. 66:1–66:34 (DOI 10.1145/3158154, S2CID 215791659, lire en ligne [archive du 11 juin 2022], consulté le 15 mai 2022)
  15. (en) Ralf Jung, Understanding and evolving the Rust programming language (thèse), Université de la Sarre, 2020 (DOI 10.22028/D291-31946, lire en ligne [archive du 8 mars 2022])
  16. (en) « Stack Overflow Developer Survey 2024 », sur Stack Overflow (consulté le 9 avril 2024)
  17. a b et c (en) Clive Thompson, « How Rust went from a side project to the world's most-loved programming language », sur MIT Technology Review, 14 février 2023 (consulté le 23 février 2023).
  18. a et b (en) Abel Avram, « Interview on Rust, a Systems Programming Language Developed by Mozilla » [archive du 24 juillet 2013], InfoQ, 3 août 2012 (consulté le 17 août 2013).
  19. (en-US) Matt Asay, « Rust, not Firefox, is Mozilla's greatest industry contribution », sur TechRepublic, 12 avril 2021 (consulté le 7 juillet 2022).
  20. (en) Graydon Hoare « Project Servo » (7 juillet 2010) (lire en ligne, consulté le 22 février 2017) [archive du 11 juillet 2017]
    Mozilla Annual Summit 2010
  21. (en) Graydon Hoare, « [rust-dev] Rust 0.2 released », sur mail.mozilla. org, 29 mars 2012 (consulté le 12 juin 2022).
  22. (en) Graydon Hoare, « [rust-dev] Rust 0.3 released » [org/web/20220824145952/https://mail.mozilla.org/pipermail/rust-dev/2012-July/002087.html archive du 24 août 2022], sur mail.mozilla.org, 12 juillet 2012 (consulté le 12 juin 2022).
  23. (en) Graydon Hoare, « [rust-dev] Rust 0.4 released » [archive du 31 octobre 2021], sur mail.mozilla.org, 15 octobre 2012 (consulté le 31 octobre 2021).
  24. (en) Andrew Binstock, « The Rise And Fall of Languages in 2013 », Dr. Dobb's Journal,‎ 7 janvier 2014 (lire en ligne [archive du 7 août 2016], consulté le 20 novembre 2022)
  25. (en) « Version History » [archive du 15 mai 2015], sur GitHub] (consulté le 1er janvier 2017).
  26. (en) The Rust Core Team, « Announcing Rust 1.0 » [archive du 15 mai 2015], sur Rust Blog, 15 mai 2015 (consulté le 11 décembre 2015).
  27. (en-US) Frederic Lardinois, « It's time to give Firefox another chance », sur TechCrunch, 29 septembre 2017 (consulté le 15 août 2023).
  28. (en) Catalin Cimpanu, « Mozilla licencie 250 employés tout en se recentrant sur les produits commerciaux » [archive du 18 mars 2022], ZDNet, 11 août 2020 (consulté le 2 décembre 2020).
  29. (en) Daniel Cooper, « Mozilla licencie 250 employés en raison de la pandémie » [archive du 20 décembre 13], sur Engadget), 11 août 2020 (consulté le 20 décembre 2).
  30. (en) Liam Tung, « Langage de programmation Rust : Mozilla job cuts have hit badly but here's how we'll survive » [archive du 21 avril 2022], ZDNet (consulté le 21 avril 2022).
  31. (en) « Laying the foundation for Rust's future » [archive du 20 décembre 2], sur Rust Blog, 20 août 18 (consulté le 20 décembre 2).
  32. (en) « Hello World ! » [archive du 19 avril 2022], sur Rust Foundation, 8 février 2020 (consulté le 4 juin 2022).
  33. (en) « Mozilla Welcomes the Rust Foundation » [org/blog/2021/02/08/mozilla-welcomes-the-rust-foundation/ archive du 8 février 2021], sur Mozilla Blog, 9 février 2021 (consulté le 9 février 2021).
  34. (en) Ron Amadeo, « Google is now writing low-level Android code in Rust » [archive du 8 avril 2021], sur Ars Technica, 7 avril 2021 (consulté le 8 avril 2021).
  35. (en) Tim Anderson, « Entire Rust moderation team resigns », sur The Register], 23 novembre 2021 (consulté le 4 août 2022).
  36. (en) « Governance Update », sur Inside Rust Blog (consulté le 27 octobre 2022).
  37. (en) Thomas Claburn, « Rust Foundation apologizes for trademark policy confusion », sur The Register, 17 avril 2023 (consulté le 7 mai 2023).
  38. « Variables and Mutability - The Rust Programming Language », sur doc.rust-lang.org (consulté le 5 juillet 2019).
  39. (en) « The Rust Programming Language », sur rust-lang.org (consulté le 29 avril 2023).
  40. « Présentation de Rust sur Léa-Linux » (consulté le 11 décembre 2013).
  41. (en) Nicholas Matsakis et Aaron Turon, « Préambule » (consulté le 12 juin 2019).
  42. « Sortie de Rust 0.8 » (consulté le 15 octobre 2013).
  43. Vincent Hermann, « Microsoft se penche sur le langage Rust pour sa programmation système » (consulté le 26 juillet 2019).
  44. (ja) 秀人 樽井, « 「Rust」言語のインストーラー「Rustup」が「Visual Studio 2022」の自動導入に対応/Windows/Mac/Linux、どのプラットフォームでも共通の手順でお手軽セットアップ », sur 窓の杜,‎ 13 juillet 2022 (consulté le 14 juillet 2022).
  45. « Code Generation - Rust Compiler Development Guide », sur rustc-dev-guide.rust-lang.org (consulté le 3 mars 2024)
  46. « rust-lang/rustc_codegen_gcc », sur GitHub, The Rust Programming Language, 2 mars 2024 (consulté le 3 mars 2024)
  47. « rust-lang/rustc_codegen_cranelift », sur GitHub, Le langage de programmation Rust, 2 mars 2024 (consulté le 3 mars 2024)
  48. Gjengset 2021, p. 213-215.
  49. (en) Sergio De Simone, « Rust 1.34 Introduits Alternative Registries for Non-Public Crates », sur InfoQ, 18 avril 2019 (consulté le 14 juillet 2022).
  50. Klabnik et Nichols 2019, p. 511-512.
  51. (en) « Créer README.md - rust-lang/rust-clippy@507dc2b » [com/rust-lang/rust-clippy/commit/507dc2b7ec30cf94554b441d4fcb1ce113f98a16 archive du 22 novembre 2021], sur GitHub (consulté le 22 novembre 2021).
  52. (en) « 24 days of Rust : Day 1 : Cargo subcommands » [archive du 7 avril 2022], sur zsiciarz.github.io (consulté le 22 novembre 2021).
  53. (en) « Clippy », The Rust Programming Language, 30 novembre 2023 (consulté le 30 novembre 2023).
  54. (en) « Clippy Lints », sur rust-lang.github.io (consulté le 30 novembre 2023).
  55. (en) « ALL the Clippy Lints » [archive du 22 mai 2021] (consulté le 22 mai 2021).
  56. (en-GB) Tim Anderson, « Rust team releases 1.62, sets end date for deprecated language server », sur DEVCLASS, 5 juillet 2022 (consulté le 14 juillet 2022).
  57. Klabnik et Nichols 2023, p. 623.
  58. McNamara 2021, p. 11.
  59. (en) Natalie Popescu, Ziyang Xu, Sotiris Apostolakis, David I. August et Amit Levy, « Safer at any speed : automatic context-aware safety enhancement for Rust », Proceedings of the ACM on Programming Languages, vol. 5, no OOPSLA,‎ 15 octobre 2021, Section 2 (DOI 10.1145/3485480, S2CID 238212612, lire en ligne) :

    « "Nous observons une grande variance dans les frais généraux de l'indexation vérifiée : 23. 6% des benchmarks rapportent des performances significatives dues à l'indexation vérifiée, mais 64,5% rapportent peu ou pas d'impact et, de manière surprenante, 11,8% rapportent des performances améliorées... En fin de compte, si l'indexation non vérifiée peut améliorer les performances, la plupart du temps, elle ne le fait pas." »

  60. (en) Tim Anderson, « Can Rust save the planet? Why, and why not », sur The Register (consulté le 11 juillet 2022).
  61. (en) Abhiram Balasubramanian, Marek S. Baranowski, Anton Burtsev, Aurojit Panda, Zvonimir Rakamarić et Leonid Ryzhyk, Proceedings of the 16th Workshop on Hot Topics in Operating Systems, Whistler BC Canada, ACM, 7 mai 2017, 156–161 p. (ISBN 978-1-4503-5068-6, DOI 10.1145/3102980.3103006, S2CID 24100599), « System Programming in Rust »
  62. (en) Serdar Yegulalp, « What is the Rust language? Safe, fast, and easy software development », sur InfoWorld, 6 octobre 2021 (consulté le 25 juin 2022).
  63. (en) Krzysztof Wróbel, « Rust projects - why large IT companies use Rust ? » [archive du 27 décembre 2022], 11 avril 2022.
  64. McNamara 2021, p. 19, 27.
  65. (en) Geoffroy Couprie, 2015 IEEE Security and Privacy Workshops, 2015, 142-148 p. (ISBN 978-1-4799-9933-0, DOI 10.1109/SPW.2015 .31, S2CID 16608844), « Nom, A Byte oriented, streaming, Zero copy, Parser Combinators Library in Rust »
  66. McNamara 2021, p. 20.
  67. (en) « Code generation - The Rust Reference », sur doc.rust-lang.org (consulté le 9 octobre 2022).
  68. (en) « How Fast Is Rust ? » [? archive du 28 octobre 2020], sur La FAQ du langage de programmation Rust (consulté le 11 avril 2019).
  69. (en) Alireza Farshin, Tom Barbette, Amir Roozbeh, Gerald Q. Maguire Jr et Dejan Kostić, Proceedings of the 26th ACM International Conference on Architectural Support for Programming Languages and Operating Systems, 2021, 1-17 p. (ISBN 9781450383172, DOI 10.1145/3445814.3446724, S2CID 231949599, lire en ligne), « PacketMill : Toward per-Core 100-GBPS networking » :

    « .... Alors que certains compilateurs (par exemple, Rust) prennent en charge la réorganisation des structures [82], les compilateurs C et C++ n'ont pas le droit de réorganiser les structures de données (par exemple, struct ou class) [74] ... »

  70. (en) « Type layout », sur The Rust Reference (consulté le 14 juillet 2022).
  71. (en) Frederic Lardinois, « Mozilla And Samsung Team Up To Develop Servo, Mozilla's Next-Gen Browser Engine For Multicore Processors », TechCrunch,‎ 3 avril 2015 (lire en ligne [archive du 10 septembre 2016], consulté le 25 juin 2017)
  72. (en) Gregg Keizer, « Mozilla prévoit de rajeunir Firefox en 2017 », sur Computerworld, 31 octobre 2016 (consulté le 13 mai 2023)
  73. (en) Thomas Claburn, « Google polishes Chromium code with a layer of Rust », sur The Register, 12 janvier 2023 (consulté le 17 juillet 2024)
  74. (en) « Supporting the Use of Rust in the Chromium Project », sur Google Online Security Blog (consulté le 12 novembre 2023)
  75. (en) Stephen Shankland, « Firefox will get overhaul in bid to get you interested again », CNET, 12 juillet 2016 (consulté le 14 juillet 2022)
  76. (en-US) Security Research Team, « ZeroMQ : Helping us Block Malicious Domains in Real Time » [archive du 13 mai 2023], sur Cisco Umbrella, 4 octobre 2013 (consulté le 13 mai 2023)
  77. (en) Catalin Cimpanu, « AWS to sponsor Rust project », sur ZDNet, 15 octobre 2019 (consulté le 17 juillet 2024)
  78. (en) Shaun Nichols, « Microsoft's next trick ? Kicking things out of the cloud to Azure IoT Edge » [uk/2018/06/27/microsofts_next_cloud_trick_kicking_things_out_of_the_cloud_to_azure_iot_edge/ archive du 27 septembre 2019], sur The Register, 27 juin 2018 (consulté le 27 septembre 2019)
  79. (en) Liam Tung, « Microsoft : Pourquoi nous avons utilisé le langage de programmation Rust plutôt que Go pour WebAssembly sur l'app Kubernetes » [archive du 21 avril 2022], ZDNet (consulté le 21 avril 2022)
  80. (en) Thomas Claburn, « In Rust We Trust : Microsoft Azure CTO shuns C and C++ », sur The Register, 20 septembre 2022 (consulté le 7 juillet 2024)
  81. (en) Tim Anderson, « Rusty Linux kernel draws closer with new patch », sur The Register, 7 décembre 2021 (consulté le 14 juillet 2022)
  82. (en) « A first look at Rust in the 6.1 kernel [LWN. net] », sur lwn.net (consulté le 11 novembre 2023)
  83. (en) « Rust in the Android platform » [archive du 3 avril 2022], sur Google Online Security Blog (consulté le 21 avril 2022)
  84. (en-US) Ron Amadeo, « Google écrit maintenant du code Android de bas niveau en Rust » [archive du 8 avril 2021], sur Ars Technica, 7 avril 2021 (consulté le 21 avril 2022)
  85. (en) Thomas Claburn, « Microsoft is rewriting core Windows libraries in Rust », sur The Register], 27 avril 2023 (consulté le 13 mai 2023)
  86. (en) Liam Proven, « Petit mais puissant, 9Front's 'Humanbiologics' is here for the truly curious », sur The Register (consulté le 7 mars 2024)
  87. (en) Serdar Yegulalp, « Rust's Redox OS could show Linux a few new tricks » [archive du 21 mars 2016], sur InfoWorld (consulté le 21 mars 2016)
  88. (en) Tim Anderson, « Another Rust-y OS : Theseus rejoint Redox dans sa quête de systèmes plus sûrs et plus résilients », sur The Register, 14 janvier 2021 (consulté le 14 juillet 2022)
  89. (en) Kevin Boos, Namitha Liyanage, Ramla Ijaz et Lin Zhong, Theseus : une expérience de structure de système d'exploitation et de gestion d'état, 2020, 1-19 p. (ISBN 978-1-939133-19-9, lire en ligne)
  90. (en) HanDong (Alex) Zhang, « 2022 Review | L'adoption de Rust en entreprise », sur Rust Magazine, 31 janvier 2023 (consulté le 7 février 2023)
  91. (en) Mark Sei, « Fedora 29 new features : Startis maintenant officiellement dans Fedora » [com/fedora-29-new-features-startis/ archive du 13 avril 2019], sur Marksei, Weekly sysadmin pills, 10 octobre 2018 (consulté le 13 mai 2019)
  92. (en) Liam Proven, « Oracle Linux 9 released, with some interesting additions », sur The Register], 12 juillet 2022 (consulté le 14 juillet 2022)
  93. (en) Liam Proven, « System76 teases features coming in homegrown Rust-based desktop COSMIC », sur The Register, 2 février 2023 (consulté le 17 juillet 2024)
  94. (en) Sergio De Simone, « NPM Adopted Rust to Remove Performance Bottlenecks », sur InfoQ (consulté le 20 novembre 2023)
  95. (en) Shing Lyu, Welcome to the World of Rust, Berkeley, CA, Apress, 2020, 1-8 p. (ISBN 978-1-4842-5599-5, DOI 10. 1007/978-1-4842-5599-5_1, lire en ligne)
  96. (en) Shing Lyu, Rust in the Web World, Berkeley, CA, Apress, 2021, 1-7 p. (ISBN 978-1-4842-6589-5, DOI 10.1007/978-1-4842-6589-5_1, lire en ligne)
  97. (en) Vivian Hu, « Deno est prêt pour la production », sur InfoQ, 12 juin 2020 (consulté le 14 juillet 2022)
  98. (en-US) Lawrence Abrams, « Cet émulateur Flash Player vous permet de jouer en toute sécurité à vos anciens jeux », sur BleepingComputer, 6 février 2021 (consulté le 25 décembre 2021)
  99. (en) Olga Kharif, « Ethereum Blockchain Killer Goes By Unassuming Name of Polkadot » Accès payant, Bloomberg L.P., 17 octobre 2020 (consulté le 14 juillet 2021)
  100. a et b (en) « Stack Overflow Developer Survey 2023 », sur Stack Overflow (consulté le 25 juin 2023)
  101. (en) Thomas Claburn, « Linus Torvalds says Rust is coming to the Linux kernel », sur The Register, 23 juin 2022 (consulté le 15 juillet 2022)
  102. « Shipping Rust in Firefox ★ Mozilla Hacks – the Web developer blog », sur hacks.mozilla.org (consulté le 19 octobre 2016).
  103. (en) « Why Discord is switching from Go to Rust », sur blog.discordapp.com (consulté le 6 février 2020).
  104. (en) Boyd Johnson, « Safety, Performance and Innovation: Rust in Hyperledger Sawtooth », 18 janvier 2019 (consulté le 26 août 2019).
  105. (en-US) Cade Metz, « The Epic Story of Dropbox’s Exodus From the Amazon Cloud Empire », WIRED,‎ 14 mars 2016 (lire en ligne, consulté le 19 octobre 2016)
  106. (en) « Rust support moves into Android underpinnings », sur ZDNet (consulté le 14 août 2022).