Central Docs
Catálogo Inicio

Ownership estático y préstamos

Índice

Bagron no tiene un recolector de basura. La validación conserva estados estáticos para buffer y descriptores opaque.

Estados de buffer

func main() int32:
    data: buffer[4] = 0
    data[0] = 7
    Del data
    return 0

Un buffer local empieza como owned. Del lo lleva a dead; cualquier uso posterior es un error de compilación. Un parámetro buffer[] es borrowed: se puede leer y modificar, pero la función receptora no puede liberarlo.

func fill(data: buffer[], length: Len_t) void:
    if length > 0:
        data[0] = 1
    return

El ownership permanece en el llamador. buffer no es byte[N]: el primero usa reserva dinámica; el segundo es un array estático.

Exclusividad con unique

func transform(
    data: unique buffer[],
    length: Len_t,
    region: Region_t
) void:
    return

Region_t es oculto en la llamada y solo se acepta cuando el compilador puede demostrar una procedencia exclusiva. El contrato también se aplica a arrays unique T[]; no cambia las reglas de los punteros crudos.

$value obtiene una dirección, pero el puntero no mantiene vivo el objeto ni puede retornarse desde una función. La implementación principal está en core/frontend/ownership.py.