Re: >ifdef only makes sense if there is a "build" step and with an interpreter that isn't automatic<
If we're being pedantic, there's no such thing as an "interpreted language", there are simply interpreted implementations of languages. Interpreters exist for C and there are compilers for JavaScript buried in the bowels of JS VMs (two of them in the case of V8).