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.