Macros run very early in the compilers process when there is no information about how the program might execute. The inputs to a macro are, therefore, simply symbols and expressions—the textual tokens that make up a program. Given that a lot of Julia's powers come from its type system, it may be useful to have something such as macros—code that generates code—at a point where the compiler has inferred the types of the variables and function arguments in the program. Generated functions (also sometimes called staged functions) fulfill this need.
Declaring a generated function is simple. Instead of the usual
function keyword, generated functions are declared with the appropriately named
@generated function ...