comptime en Zig
El mismo lenguaje corre en compilación: un número de Fibonacci horneado en el binario.
const std = @import("std");
// Anything computable from constants can run during compilation.
fn fib(n: u32) u32 {
if (n < 2) return n;
return fib(n - 1) + fib(n - 2);
}
pub fn main() void {
const at_build = comptime fib(12);
std.debug.print("fib(12) baked into the binary: {d}\n", .{at_build});
comptime var total = 0;
inline for (.{ 3, 5, 7 }) |x| total += x;
std.debug.print("summed during compilation: {d}\n", .{total});
}
Cómo funciona
comptime fib(12)corre la recursión durante la compilación; el binario guarda 144.comptime varmuta solo durante la compilación.inline fordesenrolla sobre la tupla, plegando la suma antes de que el programa exista.
Palabras clave y builtins usados aquí
comptimeconstfnforifinlinepubreturnu32varvoid
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 429
- Tokens
- 122
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 113 segundos.
Paso 1 de 3 en comptime; paso 16 de 27 en Fundamentos del lenguaje.