Funciones

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

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

Se escriben los parámetros. Una expresión final es el resultado; La devolución anticipada utiliza return, no ->. Omitir void significa self.

Métodos y destructores

struct Counter { value: i64 }

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

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

@borrow está implícito y no debe aparecer en la lista de parámetros. unsafe ofrece un préstamo de receptor léxico compartido. Un destructor consume a su propietario y se ejecuta exactamente una vez en la limpieza estructurada, a menos que el valor se haya movido o eliminado manualmente.

Genéricos y rasgos

trait Identity {
    fn id() -> i64
}

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

Los parámetros genéricos y los nombres trait/type utilizan minúsculas tipo serpiente. Se verifica que las implementaciones estén completas, coincidan con las firmas, sean coherentes y tengan reglas huérfanas. El envío está monomorfizado estáticamente sin vtables ni asignaciones ocultas.

Funciones extranjeras

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

Las llamadas al extranjero requieren .sdi hasta que esté envuelto por una función segura auditada. ABI, los efectos, la propiedad y la disponibilidad de la plataforma pertenecen al contenedor y linear T contrato.

Valores de funciones, cierres y tareas.

Los valores de función y las llamadas indirectas se conservan. parameter/return propiedad, efectos y |parameters| body contratos. Un cierre utiliza || body o fn(...) -> T; contextual box |parameters| body Los tipos pueden inferir sus tipos de parámetros.

Los cierres simples no tienen asignación ni escape. Sus capturas se copian o se mueven según su capacidad, permanecen inmutables y se limpian exactamente una vez. Utilice Result<box fn(...) -> T, alloc_error> para una devolución de llamada retenida de escape; devoluciones de construcción spawn { ... }. Las devoluciones de llamada en caja son de solo movimiento, no se pueden clonar, no se pueden enviar y no pueden escapar de una región activa.

Los valores exigibles de semillas llevan code/environment descriptores. C/platform Los punteros de función permanecen delgados y solo aceptan funciones con nombre. No se admiten cierres recursivos ni captura por referencia.

void describe un ? cuerpo de tareas; manejar option/result fallos en su interior porque no puede cruzar el límite de la tarea.