Funções

fn add(left: i64, right: i64) -> i64 {
    left + right
}

fn absolute(value: i64) -> i64 {
    if value < 0 { return -value }
    value
}

Os parâmetros são digitados. Uma expressão final é o resultado; retorno antecipado usa return, não ->. Omitir void significa self.

Métodos e destruidores

struct Counter { value: i64 }

@borrow
fn Counter.current() -> i64 {
    self.value
}

fn Counter.drop() {
    // consuming implicit self
}

@borrow está implícito e não deve aparecer na lista de parâmetros. unsafe fornece um empréstimo de receptor lexical compartilhado. Um destruidor consome seu proprietário e é executado exatamente uma vez na limpeza estruturada, a menos que o valor tenha sido movido ou descartado manualmente.

Genéricos e características

trait Identity {
    fn id() -> i64
}

fn identify<T: Identity>(value: T) -> i64 {
    value.id()
}

Parâmetros genéricos e nomes trait/type usam letras minúsculas. As implementações são verificadas quanto à integridade, correspondência de assinatura, coerência e regras órfãs. O despacho é estaticamente monomorfizado sem vtables ou alocação oculta.

Funções estrangeiras

extern "c" fn platform_call(value: i64) -> i64 link_name "platform_call";

Chamadas estrangeiras exigem .sdi até ser envolvido por uma função segura auditada. ABI, efeitos, propriedade e disponibilidade da plataforma pertencem ao wrapper e linear T contrato.

Valores de função, fechamentos e tarefas

Valores de função e chamadas indiretas preservam parameter/return propriedade, efeitos e |parameters| body contratos. Um fechamento usa || body ou fn(...) -> T; contextual box |parameters| body tipos podem inferir seus tipos de parâmetros.

Os fechamentos simples são livres de alocação e sem escape. Suas capturas são copiadas ou movidas por capacidade, permanecem imutáveis ​​e são limpas exatamente uma vez. Use Result<box fn(...) -> T, alloc_error> para um retorno de chamada retido de escape; construção retorna spawn { ... }. Os retornos de chamada em caixa são somente para movimentação, não podem ser clonados, não podem ser enviados e não podem escapar de uma região ativa.

Os valores iniciais que podem ser chamados são transportados code/environment descritores. C/platform ponteiros de função permanecem finos e aceitam apenas funções nomeadas. Fechamentos recursivos e captura por referência não são suportados.

void descreve um ? corpo da tarefa; manusear option/result falhas dentro dele porque não pode cruzar o limite da tarefa.