Fair criticisms, John. I just want to address macros.
Yao has something like Rust's macros. They are called "keywords," because even the built-in keywords are implemented that way. (That is why Yao can just not have a `while` keyword.)
My Yao-based build system, Rig, uses keywords to implement a build DSL. [1]
And keywords are fast to compile.