Rust est un langage de programmation développé par Mozilla Research. Rust combine le contrôle de bas niveau sur la performance avec la commodité et la sécurité garanties de haut niveau.
Il atteint ces objectifs sans avoir besoin d'un ramasse-miettes ou environnement d'exécution, ce qui rend possible l'utilisation de bibliothèques Rust comme une substitution directe pour C.
La première version de Rust, 0.1, est sortie en janvier 2012 et a tellement évolué rapidement que jusqu'à récemment, l'utilisation de versions stables était déconseillée - à la place ce était conseillé d'utiliser les nightly builds.
Le 15 mai 2015, Rust 1.0 a été libéré avec une garantie complète de compatibilité ascendante. Améliorations aux temps de compilation et d'autres aspects du compilateur sont actuellement disponibles dans la nightly builds. Rust a adopté un modèle de libération à bord du train avec les versions régulières toutes les six semaines. Rust 1.1 beta a été mis à la disposition dans le même temps de la libération de Rust 1.0.
Bien que Rust soit un langage relativement bas niveau, Rust a quelques concepts fonctionnels qui se trouvent généralement dans les langues de niveau supérieur. Cela rend Rust non seulement rapide, mais aussi efficace et facile à coder.
```rust
// Ceci est un commentaire. commentaires de ligne ressemblent à ceci ...
// Et prolonger plusieurs lignes comme celle-ci.
/// Les commentaires de documentation ressemblent à ceci et à soutenir
/// la notation de démarques.
/// # Exemples
///
/// ```
/// let cinq = 5
/// ```
///////////////
// 1. Basics //
///////////////
// Les fonctions
// `I32` est le type 32 bits entiers signés
fn add2(x: i32, y: i32) -> i32 {
// Retour implicite (pas virgule)
x + y
}
// Fonction principale
fn main() {
// Nombres //
// Reliures immutable
let x: i32 = 1;
// Entier suffixes/float
let y: I32 = 13i32;
let f: f64 = 1.3f64;
// Type Inférence
// La plupart du temps, le compilateur Rust peut déduire le type de variable
// est, donc vous ne devez pas écrire une annotation de type explicite.
// Tout au long de ce tutoriel, les types sont explicitement annotées dans
// de nombreux endroits, mais seulement à des fins de démonstration.
// L'inférence de type peut gérer cela pour vous la plupart du temps.
let implicit_x = 1;
let implicit_f = 1,3;
// Arithmétique
let somme = x + y + 13;
// Variable Mutable
let mut mutable = 1;
let mutable = 4;
let mutable += 2;
// Chaînes //
// Littéraux chaîne
let x: &str = "Bonjour tout le monde!";
// Impression
println!("{} {}", f, x); // 1.3 Bonjour tout le monde
// A `Chaîne` - une chaîne de tas alloué
let s: String = "Bonjour tout le monde".to_string();
// Une tranche de chaîne - une vue immutable dans une else chaîne.
// Ceci est essentiellement un pointeur immutable à une chaîne - il n'a pas
// contient effectivement le contenu d'une chaîne, juste un pointeur vers
// quelque chose qui fait(dans ce cas, `s`).
let s_slice: &str = &s;
println!("{} {}", s, s_slice); // Bonjour monde Bonjour tout le monde
// Vecteurs/tableau //
// Un tableau de taille fixe
let four_ints: [i32; 4] = [1, 2, 3, 4];
// Un tableau dynamique(vecteur)
let mut vecteur: Vec<i32> = vec![1, 2, 3, 4];
vecteur.push(5);
// Une tranche - une vue immutable dans un vecteur ou un tableau.
// Ceci est un peu comme une tranche de chaîne, mais pour les vecteurs.
let tranche: &[i32] = &vecteur;
// Utiliser `{:?}` pour imprimer quelque chose de débogage de style