Central Docs
Catálogo Inicio

02. Seguridad, recursión e `inline`

@unsafe

@unsafe abre una frontera explícita para operaciones cuya procedencia o límites no puede demostrar el compilador:

@unsafe
func write(pointer *: int32, value: int32) void:
    (pointer) = value
    return

Una función segura no puede llamar a una @unsafe. El decorador no valida la dirección, no convierte Null en una dirección válida y no elimina las reglas de tipos, arrays, buffer o datos expansivos.

@recursive

La recursión directa de cola se convierte automáticamente en un bucle cuando la función cumple las condiciones del backend:

func countdown(value: int32) int32:
    if value == 0:
        return 0
    return countdown(value - 1)

Una recursión que no es una llamada de cola, o un ciclo entre varias funciones, requiere marcar con @recursive todas las funciones del ciclo:

@recursive
func factorial(value: int32) int32:
    if value == 0:
        return 1
    return value * factorial(value - 1)

El decorador declara que el ciclo es intencional; no convierte una recursión no acotada en una operación segura ni garantiza que no agote la pila.

inline

inline se escribe en la firma:

inline func twice(value: int32) int32:
    return value + value

En perfiles prod y high solicita alwaysinline; en dev conserva una inlinehint visible en el IR. No se aplica a funciones externas ni a cuerpos de ensamblador.