Open Manual

<!-- nytrix-doc: {"audience":"user","featured":true,"group":"learn","order":110,"summary":"Generate checked declarations, tables, and source during compilation."} -->

Comptime

Compile-time code produces ordinary Nytrix declarations. Keep the generated

result small, named, and covered by an executable assertion.

Start with a value

use std.core

def scale = comptime { 2 ^ 5 }
assert(scale == 32, "compile-time value")

A compile-time block containing only declarations evaluates to nil. Return or

end with an expression when the block must produce a value.

Use a table for fixed classification

use std.core

comptime table Opcode {
   0x00 -> "halt"
   0x10..0x1f -> "load"
   0x20..0x2f -> "math"
   _ -> "data"
}

fn opcode_name(i32 raw) str = comptime match Opcode(raw, "data")
assert(opcode_name(0x24) == "math", "opcode class")

Tables keep a static classification beside the code that consumes it. Use

case for ordinary literal and range dispatch.

Emit repeated declarations

emit and comptime for generate source from a static input. Use this only

when repeated declarations are clearer than a runtime loop. Run

ny fmt --metaprog file.ny before reviewing the generated form.

Reflect over known structure

comptime fields(Layout) and comptime exports(Module) iterate static

metadata. Generate checks, adapters, or tables from those loops. Keep a

runtime assertion that proves the generated declaration has the required

behavior.

Generated modules and embedded files

Generated modules follow the same module and export rules as handwritten

files. embed(path) reads a build-time resource into the source contract.

Keep paths repository-relative and ensure the build input owns the file.

Diagnostic rules

comptime diagnostic rule declares a compile-time condition, error, and repair

for a project-specific invalid form. Put a diagnostic rule near the generated

contract it protects. Use one clear error for one repairable condition.

Tooling

ny fmt --metaprog file.ny
ny fmt --specialize file.ny
ny fmt --trim --check file.ny
ny --strict-types file.ny

--metaprog and --specialize are review tools. They report candidates and

do not replace validation of the generated program.

Related