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
- numeri interi:
i8…i64,u8…u64,isize,usize;bytealiasu8 - galleggianti:
f32,f64 - controllo:
bool,void,never - text/buffers:
str,string,bytes,shared_bytes - composto: array
[n]t, sezioni[]t/mut []t, tuple, strutture, ADT, unioni, opzioni, risultati, valori di funzioni, puntatori, generici,linear t
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.