Why CL includes two non-orthogonal concepts for code organization? Why to define an IMAGE package I have to separately declare (defstruct image-state ...)?
Can we replace defstructs with packages in future Lisps?
Important: Although define-macro is non-hygienic, it is still restricted by Racket’s phase separation rules. This means that a macro cannot access run-time bindings, because it is executed in the syntax-expansion phase. Translating code that involves define-macro or defmacro from an implementation without this restriction usually implies separating macro related functionality into a begin-for-syntax or a module (that will be imported with require-for-syntax) and properly distinguishing syntactic information from run-time information.