# Code as Data

Record: `arch:code-as-data`
Kind: principle
Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)
Severity: contextual
Scope: language, compiler, runtime
Canonical: https://banes-lab.com/ontology#arch-code-as-data

## Repair

- Refactored by: Use AST Builder, Typed DSL
- Detected by: dynamic eval/string code construction
- Violated by: unsafe string eval/generation
- Measured by: unsafe eval count
- Enforced by: banned API rules

## requires

- [AST or Data Representation](https://banes-lab.com/records/lex/ast-or-data-representation.md)

## reinforces

- [Homoiconicity](https://banes-lab.com/records/arch/homoiconicity.md)
- [Code Generation](https://banes-lab.com/records/lex/code-generation.md)

## enables

- [Program Transformation](https://banes-lab.com/records/lex/program-transformation.md)

## conflicts-with

- [String-Based Code Generation](https://banes-lab.com/records/lex/string-based-code-generation.md)

## tensions-with

- [Safety/Debuggability](https://banes-lab.com/records/lex/safety-debuggability.md)

## tensions

- [Code as Data Safety/Debuggability](https://banes-lab.com/records/tension/code-as-data-safety-debuggability.md)
