Noções básicas
<!-- verified-against: seed-llvm; examples: docs-examples-test -->
Texto fonte e nomes
.sd os arquivos são UTF-8. Strings/comments pode conter Unicode; os identificadores permanecem ASCII. Nomes de valores (funções, variáveis, campos, módulos) usam letras minúsculas; tipos nominais (estruturas, enums, uniões, características, parâmetros genéricos) e variantes usam UpperCamelCase; constantes são maiúsculas.
const MAX_ITEMS: usize = 64
fn main() -> i64 {
// ação and 日本語 are valid comment text
let greeting = "olá"
(MAX_ITEMS + len(greeting)) as i64
}
O literal possui tipo emprestado estático str. UTF-8 válido de propriedade usa string. len retorna comprimento em bytes; As operações Unicode scalar/grapheme pertencem a bibliotecas.
Ligações
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
}
As ligações são imutáveis por padrão. A mutação por meio de uma ligação requer mut. linear cria uma obrigação de consumo exatamente uma vez.
Tipos principais
- inteiros:
i8…i64,u8…u64,isize,usize; Aliasesbyteu8 - flutuadores:
f32,f64 - controle:
bool,void,never - text/buffers:
str,string,bytes,shared_bytes - composto: matrizes
[n]t, fatias[]t/mut []t, tuplas, estruturas, ADTs, uniões, opções, resultados, valores de função, ponteiros, genéricos,linear t
Agregados
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 define ADTs incluindo enumerações livres de carga útil. As uniões brutas requerem unsafe construction/access.
Um literal repetido preenche um array fixo a partir de um literal:
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
}
O tipo de elemento vem da anotação ou do tipo esperado do array, portanto, nenhuma conversão é necessária. O valor deve ser um literal (ou uma conversão de um, ou uma matriz deles) - um valor de local ou chamada é rejeitado (B048) em vez de avaliado silenciosamente uma vez por elemento - e a contagem deve ser um literal inteiro positivo (B049) de no máximo 65536 (B050), porque os elementos são materializados individualmente; preenchimentos maiores pertencem a um buffer de heap ou a um loop explícito.
Expressões
Blocos, ife match valores de rendimento. Use a expressão final para um resultado implícito e return para retorno antecipado. A aritmética inteira segue as regras determinísticas em SEMANTIC_RULES.md; a indexação segura permanece verificada nas compilações de lançamento.
O compilador limpo implementa digitado phase-1/2 f"..." interpolação para texto, bool, inteiros, flutuantes, especificações de formato e estática display/debug características. Usar {{/}} para colchetes literais e .to_string()? somente quando uma string contígua de propriedade é necessária. A impressão continua sendo uma operação explícita da biblioteca.