The availability of the compiler and compiler subroutines at run-time (a requirement for incremental compilation) gives it the ability to support a far wider range of extensions (including run-time extensions, such as adding new data-types) than would be possible using only a macro facility.