{
  "code": null,
  "collection": "architecture",
  "href": "https://banes-lab.com/ontology#architecture-code-as-data",
  "id": "code-as-data",
  "kind": "principle",
  "layer": {
    "href": "https://banes-lab.com/ontology/schema#layer-declarative-core",
    "json": "https://banes-lab.com/json/records/layer/declarative-core",
    "label": "Declarative Core",
    "markdown": "https://banes-lab.com/records/layer/declarative-core.md",
    "ref": "layer:declarative-core"
  },
  "name": "Code as Data",
  "ref": "architecture:code-as-data",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-ast-or-data-representation",
          "json": "https://banes-lab.com/json/records/lexicon/ast-or-data-representation",
          "label": "AST or Data Representation",
          "markdown": "https://banes-lab.com/records/lexicon/ast-or-data-representation.md",
          "ref": "lexicon:ast-or-data-representation"
        }
      ],
      "relation": "requires"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-homoiconicity",
          "json": "https://banes-lab.com/json/records/architecture/homoiconicity",
          "label": "Homoiconicity",
          "markdown": "https://banes-lab.com/records/architecture/homoiconicity.md",
          "ref": "architecture:homoiconicity"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-code-generation",
          "json": "https://banes-lab.com/json/records/lexicon/code-generation",
          "label": "Code Generation",
          "markdown": "https://banes-lab.com/records/lexicon/code-generation.md",
          "ref": "lexicon:code-generation"
        }
      ],
      "relation": "reinforces"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-program-transformation",
          "json": "https://banes-lab.com/json/records/lexicon/program-transformation",
          "label": "Program Transformation",
          "markdown": "https://banes-lab.com/records/lexicon/program-transformation.md",
          "ref": "lexicon:program-transformation"
        }
      ],
      "relation": "enables"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-string-based-code-generation",
          "json": "https://banes-lab.com/json/records/lexicon/string-based-code-generation",
          "label": "String-Based Code Generation",
          "markdown": "https://banes-lab.com/records/lexicon/string-based-code-generation.md",
          "ref": "lexicon:string-based-code-generation"
        }
      ],
      "relation": "conflicts-with"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-safety-debuggability",
          "json": "https://banes-lab.com/json/records/lexicon/safety-debuggability",
          "label": "Safety/Debuggability",
          "markdown": "https://banes-lab.com/records/lexicon/safety-debuggability.md",
          "ref": "lexicon:safety-debuggability"
        }
      ],
      "relation": "tensions-with"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/schema#tension-code-as-data-safety-debuggability",
          "json": "https://banes-lab.com/json/records/tension/code-as-data-safety-debuggability",
          "label": "Code as Data / Safety/Debuggability",
          "markdown": "https://banes-lab.com/records/tension/code-as-data-safety-debuggability.md",
          "ref": "tension:code-as-data-safety-debuggability"
        }
      ],
      "relation": "tensions"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-unchecked-dynamic-code",
          "json": "https://banes-lab.com/json/records/lexicon/unchecked-dynamic-code",
          "label": "Unchecked Dynamic Code",
          "markdown": "https://banes-lab.com/records/lexicon/unchecked-dynamic-code.md",
          "ref": "lexicon:unchecked-dynamic-code"
        }
      ],
      "relation": "violated-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-syntax-tree-generation",
          "json": "https://banes-lab.com/json/records/lexicon/syntax-tree-generation",
          "label": "Syntax Tree Generation",
          "markdown": "https://banes-lab.com/records/lexicon/syntax-tree-generation.md",
          "ref": "lexicon:syntax-tree-generation"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-domain-specific-language",
          "json": "https://banes-lab.com/json/records/architecture/domain-specific-language",
          "label": "Domain-Specific Language (DSL)",
          "markdown": "https://banes-lab.com/records/architecture/domain-specific-language.md",
          "ref": "architecture:domain-specific-language"
        }
      ],
      "relation": "refactored-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/schema#vocabulary-severity-contextual",
          "json": "https://banes-lab.com/json/records/vocabulary/severity-contextual",
          "label": "contextual",
          "markdown": "https://banes-lab.com/records/vocabulary/severity-contextual.md",
          "ref": "vocabulary:severity-contextual"
        }
      ],
      "relation": "severity"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-category-metaprogramming-language-oriented-architecture",
          "json": "https://banes-lab.com/json/records/architecture-category/metaprogramming-language-oriented-architecture",
          "label": "Metaprogramming / Language-Oriented Architecture",
          "markdown": "https://banes-lab.com/records/architecture-category/metaprogramming-language-oriented-architecture.md",
          "ref": "architecture-category:metaprogramming-language-oriented-architecture"
        }
      ],
      "relation": "category"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/software-architecture#definitions-own-what",
          "json": "https://banes-lab.com/json/software-architecture/model/definitions-own-what",
          "label": "Definitions own what, code owns how",
          "markdown": "https://banes-lab.com/software-architecture/model/definitions-own-what.md",
          "ref": "chapter:/software-architecture#definitions-own-what"
        },
        {
          "href": "https://banes-lab.com/software-architecture/principles#the-structural-domain",
          "json": "https://banes-lab.com/json/software-architecture/principles/the-structural-domain",
          "label": "The structural domain",
          "markdown": "https://banes-lab.com/software-architecture/principles/the-structural-domain.md",
          "ref": "chapter:/software-architecture/principles#the-structural-domain"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-metaprogramming-language-oriented-architecture",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-metaprogramming-language-oriented-architecture",
          "label": "Metaprogramming / Language-Oriented Architecture",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-metaprogramming-language-oriented-architecture.md",
          "ref": "chapter:/ontology#architecture-category-metaprogramming-language-oriented-architecture"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-core-vocabulary",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-core-vocabulary",
          "label": "Core Vocabulary",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-core-vocabulary"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-correctness-determinism-verification",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-correctness-determinism-verification",
          "label": "Correctness / Determinism / Verification",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-correctness-determinism-verification.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-correctness-determinism-verification"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-metaprogramming-language-oriented-architecture",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-metaprogramming-language-oriented-architecture",
          "label": "Metaprogramming / Language-Oriented Architecture",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-metaprogramming-language-oriented-architecture.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-metaprogramming-language-oriented-architecture"
        },
        {
          "href": "https://banes-lab.com/ontology/schema#the-vocabulary-severity",
          "json": "https://banes-lab.com/json/ontology/schema/the-vocabulary-severity",
          "label": "Severity levels",
          "markdown": "https://banes-lab.com/ontology/schema/the-vocabulary-severity.md",
          "ref": "chapter:/ontology/schema#the-vocabulary-severity"
        },
        {
          "href": "https://banes-lab.com/ontology/schema#the-resolutions",
          "json": "https://banes-lab.com/json/ontology/schema/the-resolutions",
          "label": "The resolutions",
          "markdown": "https://banes-lab.com/ontology/schema/the-resolutions.md",
          "ref": "chapter:/ontology/schema#the-resolutions"
        }
      ],
      "relation": "linked-from"
    }
  ],
  "summary": "A design rule that logic to be generated or transformed is held as a typed data structure, such as a syntax tree, that tools can inspect and rewrite.",
  "siblings": {
    "next": {
      "href": "https://banes-lab.com/ontology#architecture-metaprogramming",
      "json": "https://banes-lab.com/json/records/architecture/metaprogramming",
      "label": "Metaprogramming",
      "markdown": "https://banes-lab.com/records/architecture/metaprogramming.md",
      "ref": "architecture:metaprogramming"
    },
    "previous": {
      "href": "https://banes-lab.com/ontology#architecture-homoiconicity",
      "json": "https://banes-lab.com/json/records/architecture/homoiconicity",
      "label": "Homoiconicity",
      "markdown": "https://banes-lab.com/records/architecture/homoiconicity.md",
      "ref": "architecture:homoiconicity"
    }
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/records/architecture",
    "label": "Architecture principles",
    "markdown": "https://banes-lab.com/api/records/architecture.md",
    "ref": "api:records/architecture"
  },
  "aliases": [],
  "exemplar": {
    "after": "const fooRule = {\n  op: \"and\",\n  args: [\n    { op: \"gt\", field: \"count\", value: 3 },\n    { op: \"eq\", field: \"active\", value: true },\n  ],\n} as const;\nexecuteRule(fooRule, foo);",
    "before": "function fooRule(foo: Foo) { return foo.count > 3 && foo.active; }",
    "lang": "ts",
    "medium": "code"
  },
  "formedBy": null,
  "scope": [
    "language",
    "compiler",
    "runtime"
  ],
  "severity": "contextual"
}
