3 ms·
`when myCondition():` instead of `if myCondition:` is done at compile-time. Alternatively you can use a `static:` code block to force compile time evaluation.
by mratsim 3y ago
`when myCondition():` instead of `if myCondition:` is done at compile-time.
Alternatively you can use a `static:` code block to force compile time evaluation. Or tag a function {.compileTime.} or tag function inputs with `static` modifier.
It is possible to create a compiler or an assembler running fully in Nim macros as well:
- https://github.com/mratsim/constantine/blob/master/constantine/platforms/isa/macro_assembler_x86_intel.nim https://github.com/mratsim/constantine/blob/master/constanti... (all that file runs at compile-time)
You can also implement Continuation-Passing-Style transformation at compile-time:
- https://github.com/nim-works/cps https://github.com/nim-works/cps
Or a neural network DSL or for a self-contained example, einsum:
- https://github.com/mratsim/Arraymancer/blob/master/src/arraymancer/tensor/einsum.nim https://github.com/mratsim/Arraymancer/blob/master/src/array...
It's worth noting that nim async/await transformation is fully implemented as a library in macros.