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

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.