Clojure core language is small. More advanced syntax tends to be implemented using macros expanding to a handful of core special forms. One of the special symbols is def
, used for interning Vars
in the current namespace. Yet, there's also intern
that does virtually the same thing (bar the choice of ns) and is implemented with a mere function and some interop.
Why does def
deserve a special form? Are there use-cases def
makes possible that couldn't be achieved with intern
and some more interop or macros?