This effectively isolates the project by the same degree as having been written in an entirely-novel language.
Not any more than the special vocabulary of a project consisting of functions. Or of classes in an object framework.
If I see (foo x y z), and do not know what foo is, I have no idea what happens, regardless of whether foo is a macro or a function. If I know it's a function, then I know that x, y and z are expressions reduced to values; they are not analyzed as syntax. However, that is far from a complete understanding; I still don't know what foo does.
If foo must be a function (I may not use macros), then I have to figure out a way to package everything into the values that x, y and z denote so that foo can do whatever it does. That will likely be harder to understand than a macro.
Anyway, Lisp macros can be expanded. If you think some macro is hard to understand, then invoke macroexpand on the quoted form; see if you like that better. That's what you would have to write if you didn't have the macro.
Just because macros are not allowed doesn't mean that everything is magically understandable and that you don't have to spend weeks, months or even years learning the structure of the code and its vocabulary.
Code without macros still extends the language.
When we define a function, we are extending a language; just like we extend a natural language when we invent a new noun or verb.
Not any more than the special vocabulary of a project consisting of functions. Or of classes in an object framework.
If I see (foo x y z), and do not know what foo is, I have no idea what happens, regardless of whether foo is a macro or a function. If I know it's a function, then I know that x, y and z are expressions reduced to values; they are not analyzed as syntax. However, that is far from a complete understanding; I still don't know what foo does.
If foo must be a function (I may not use macros), then I have to figure out a way to package everything into the values that x, y and z denote so that foo can do whatever it does. That will likely be harder to understand than a macro.
Anyway, Lisp macros can be expanded. If you think some macro is hard to understand, then invoke macroexpand on the quoted form; see if you like that better. That's what you would have to write if you didn't have the macro.
Just because macros are not allowed doesn't mean that everything is magically understandable and that you don't have to spend weeks, months or even years learning the structure of the code and its vocabulary.
Code without macros still extends the language.
When we define a function, we are extending a language; just like we extend a natural language when we invent a new noun or verb.