Nozioni di base

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

Testo di origine e nomi

.sd i file sono UTF-8. Strings/comments può contenere Unicode; gli identificatori rimangono ASCII. I nomi dei valori (funzioni, variabili, campi, moduli) utilizzano lettere minuscole; i tipi nominali (strutture, enumerazioni, unioni, tratti, parametri generici) e le varianti utilizzano UpperCamelCase; le costanti sono maiuscole e minuscole.

const MAX_ITEMS: usize = 64

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

Il letterale ha il tipo preso in prestito statico str. UTF-8 valido di proprietà utilizza string. len restituisce la lunghezza in byte; Le operazioni Unicode scalar/grapheme appartengono alle librerie.

Legami

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
}

I collegamenti sono immutabili per impostazione predefinita. La mutazione attraverso un legame richiede mut. linear crea un obbligo di consumo esattamente una volta.

Tipi di nucleo

Aggregati

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 definisce gli ADT che includono enumerazioni senza carico utile. I raccordi grezzi richiedono unsafe construction/access.

Un valore letterale di ripetizione riempie un array fisso da un valore letterale:

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
}

Il tipo di elemento proviene dall'annotazione o dal tipo previsto dell'array, quindi non è necessario alcun cast. Il valore deve essere un valore letterale (o un cast di uno, o un array di questi) - un valore di luogo o chiamata viene rifiutato (B048) anziché valutato silenziosamente una volta per elemento - e il conteggio deve essere un valore letterale intero positivo (B049) al massimo di 65536 (B050), perché gli elementi vengono materializzati individualmente; i riempimenti più grandi appartengono a un buffer heap o a un ciclo esplicito.

Espressioni

Blocchi, if, e match valori di rendimento. Utilizzare l'espressione finale per un risultato implicito e return per il rientro anticipato. L'aritmetica dei numeri interi segue le regole deterministiche in SEMANTIC_RULES.md; l'indicizzazione sicura rimane controllata nelle build di rilascio.

Il compilatore pulito implementa typed phase-1/2 f"..." interpolazione per testo, valori booleani, numeri interi, numeri in virgola mobile, specifiche di formato e statici display/debug tratti. Utilizzare {{/}} per le parentesi graffe letterali e .to_string()? solo quando è richiesta una stringa contigua di proprietà. La stampa rimane un'operazione esplicita della libreria.