I’m trying to better understand how compilation and the AST works. I’m starting to grasp the whole “compiling elixir is the same thing as running elixir” concept but my brain is starting to warp trying to understand how Kernel.defmacro/2 works i.e
defmacro defmacro(call, expr \\ nil) do
define(:defmacro, call, expr, __CALLER__)
end
i.e defmacro defmacro…
This feels like turtles all the way down. Where’s “bottom” so to speak? Is this some detail of how the language is bootstrapped?
I don’t expect someone to take the time to explain everything I might need to know to grok this, but is there an existing resource that does? Would reading Chris’ Metaprogramming in Elixir book help me grasp this?