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.