The front half is here and the back half is not, and the reason is that running a macro means compiling it and dlopening it into the compiler — which is Emit.redefinition plus Build.shared, already measured at ~19ms, pointed at our own process instead of the program's. The part worth recording is what blocks it: a macro is [Form] -> Form, so Form has to be a Flan union with a layout the compiler and the loaded macro agree on exactly. That is milestone 6 work landing before milestone 5's, and it is bigger than the expander. Nothing is stored on purpose. No macro table and no Ast.Defmacro: a table nothing reads is where a design rots, and the storage shape is the expander author's first decision rather than one to inherit from a lane that could not test it.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%