# Metaprogramming

Record: `arch:metaprogramming`
Kind: technique
Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)
Severity: contextual
Scope: compile-time, runtime, framework
Canonical: https://banes-lab.com/ontology#arch-metaprogramming

## Repair

- Refactored by: Add Generator Tests, Make Metadata Explicit
- Detected by: dynamic generation without tests/schema
- Violated by: unsafe/opaque generated behavior
- Measured by: generated code coverage, [complexity](https://banes-lab.com/records/reason/lens-complexity.md)
- Enforced by: generator validation

## requires

- [Reflection/AST/Code Generation](https://banes-lab.com/records/lex/reflection-ast-code-generation.md)

## reinforces

- [Do Not Repeat Yourself (DRY)](https://banes-lab.com/records/arch/duplicate-code.md)
- [DSLs](https://banes-lab.com/records/lex/dsls.md)

## enables

- [Boilerplate Elimination](https://banes-lab.com/records/lex/boilerplate-elimination.md)

## tensions-with

- [Debuggability](https://banes-lab.com/records/lex/debuggability.md)
- [Static Analysis](https://banes-lab.com/records/arch/static-analysis.md)
- [Explicit Handwritten Code](https://banes-lab.com/records/lex/explicit-handwritten-code.md)

## tensions

- [Metaprogramming Debuggability](https://banes-lab.com/records/tension/debuggability-metaprogramming.md)
- [Metaprogramming Static Analysis](https://banes-lab.com/records/tension/metaprogramming-static-analysis.md)
- [Metaprogramming Explicit Handwritten Code](https://banes-lab.com/records/tension/explicit-handwritten-code-metaprogramming.md)

## referenced-by

- [Homoiconicity](https://banes-lab.com/records/arch/homoiconicity.md)
