Les bases

<!-- verified-against: seed-llvm; examples: docs-examples-test -->

Texte source et noms

.sd les fichiers sont UTF-8. Strings/comments peut contenir du Unicode ; les identifiants restent ASCII. Les noms de valeurs (fonctions, variables, champs, modules) utilisent la casse serpent inférieure ; les types nominaux (structures, énumérations, unions, traits, paramètres génériques) et les variantes utilisent UpperCamelCase ; les constantes sont le cas supérieur du serpent.

const MAX_ITEMS: usize = 64

fn main() -> i64 {
    // ação and 日本語 are valid comment text
    let greeting = "olá"
    (MAX_ITEMS + len(greeting)) as i64
}

Le littéral a un type emprunté statique str. UTF-8 valide possédé utilise string. len renvoie la longueur en octets ; Les opérations Unicode scalar/grapheme appartiennent aux bibliothèques.

Reliures

fn release(ticket: i64) {}

fn main() -> i64 {
    let answer = 42
    let mut count: usize = 0
    count += 1
    let linear ticket = 7
    release(ticket)
    answer + count as i64
}

Les liaisons sont immuables par défaut. La mutation via une liaison nécessite mut. linear crée une obligation de consommation unique.

Types de base

Agrégats

struct Point { x: i64, y: i64 }

enum Color { Red Green Blue }

fn main() -> i64 {
    let origin = Point { x: 0, y: 0 }
    let selected = Color.Green
    match selected {
        Color.Green => origin.x
        Color.Red => origin.y
        Color.Blue => 0
    }
}

enum définit les ADT, y compris les énumérations sans charge utile. Les unions brutes nécessitent unsafe construction/access.

Un littéral de répétition remplit un tableau fixe à partir d'un littéral :

fn layout() -> i64 {
    let slots: [4]usize = [0; 4]
    let bytes: [3]u8 = [255; 3]
    let grid: [2][3]i64 = [[0; 3]; 2]
    (slots[3] + bytes[2] as usize + grid[1][2] as usize) as i64
}

Le type d'élément provient de l'annotation ou du type attendu du tableau, donc aucun cast n'est nécessaire. La valeur doit être un littéral (ou une conversion de celui-ci, ou un tableau de ceux-ci) — une valeur de lieu ou d'appel est rejetée (B048) plutôt que évaluée silencieusement une fois par élément — et le décompte doit être un littéral entier positif (B049) d'au plus 65536 (B050), car les éléments sont matérialisés individuellement ; les remplissages plus grands appartiennent à un tampon de tas ou à une boucle explicite.

Expressions

Blocs, if, et match valeurs de rendement. Utilisez l'expression finale pour un résultat implicite et return pour un retour anticipé. L'arithmétique entière suit les règles déterministes de SEMANTIC_RULES.md; l'indexation sécurisée reste vérifiée dans les versions de version.

Le compilateur propre implémente typé phase-1/2 f"..." interpolation pour le texte, les booléens, les entiers, les flottants, les spécifications de format et les valeurs statiques display/debug traits. Utiliser {{/}} pour les accolades littérales et .to_string()? uniquement lorsqu'une chaîne contiguë possédée est requise. L'impression reste une opération explicite de la bibliothèque.