> Problem with two namespaces is, well, need to maintain two namespaces, in all your DSLs. Which in many cases may double the effort.
How so? And why only two namespaces? Common Lisp probably has a dozen: package name, lexical variable, dynamic variable, function (stores either function or macro function), documentation string, property list, type name, class name, slot name, etc.
As long as you have first-class identifiers, you can define arbitrary namespaces without having to worry about conflicts between the namespaces.
Having an identifier denote a function and a macro at the same time like that enables adding partial evaluation and other compile-time optimizations to DSLs without having to dig into the compiler.
> but that's an obvious thing, you cannot mix compile-time and run-time namespaces anyway.
? You have to mix them if you want a compiler in your runtime.
Problem with two namespaces is, well, need to maintain two namespaces, in all your DSLs. Which in many cases may double the effort.
Of course, macros must have their own namespace, but that's an obvious thing, you cannot mix compile-time and run-time namespaces anyway.