15 · Evaluación en Tiempo de Compilación
Funciones comptime
Declara helpers reutilizables con @comptime fn e invócalos con comptime f(x) — el call-site se convierte en un literal.
En esta página
Cuando la misma lógica de precálculo necesita llamarse en múltiples lugares,
un bloque en línea se vuelve repetitivo. La solución es declarar una función
comptime: anota la función con @comptime y podrá invocarse con
comptime f(args) en cualquier expresión. Cada llamada es resuelta por el
compilador y reemplazada por el literal correspondiente.
A diferencia de un bloque suelto, la función tiene nombre, recibe parámetros
tipados y puede componerse — puedes sumar comptime double(10) con comptime triple(4) en la misma expresión y el compilador resuelve ambas antes de
generar código.
Dos funciones @comptime combinadas en la misma expresión — el resultado es un único literal.
// Feature: comptime <expr> — call a `@comptime fn` and bake the result
// Syntax: declare with `@comptime fn`; invoke with `comptime f(x)`.
// The function runs in the compiler and the call site is replaced
// with the literal result.
// When to use: short, pure helpers — math, string formatting, table
// lookups — that you want resolved before runtime.
@comptime
fn double(n: int) -> int {
return n * 2
}
let x = comptime double(21)
print(x)
// expected: 42
// Multiple comptime calls in one expression.
@comptime
fn triple(n: int) -> int {
return n * 3
}
let y = comptime double(10) + comptime triple(4)
print(y)
// expected: 32
Una observación práctica: el lint de funciones no utilizadas puede señalar una
@comptime fn como "nunca llamada", ya que las invocaciones comptime no
aparecen como llamadas en tiempo de ejecución. Es seguro ignorar ese aviso.
Consulta también