Why? It is just as good as procedure inlining. In R6RS the compiler can know an imported bindings won't be altered at runtime; in R7RS we need to interact with some implementation-specific convention. In either way, the compiler can keep information about the bound value; only the "constantness" of the binding is needed to look it up.
In general, the final binding of an identifier in an R[67]RS library is not known until a library is "invoked" (in the sense of "Implicit Phasing for R6RS Libraries by Dybvig/Ghuloum). The invocation happens when the main program is run, which is after the program has been compiled. I'm not saying that the compiler cannot deduce the binding for the most common cases, but, in general, it can't.
Hmm... here's my understanding:
When the compiler compiles a library or a program, it needs to look at the imported libraries, otherwise it can't know
which is macro keywords. Whether the compiler looks at the entire source, or looks at some information stored in the
precompiled file, is up to the implementation, but I don't see anything that prevents the compiler from knowing
the nature of the binding. If the mutation of binding of exported identifiers is prohibited, I'd rather see that generally
it is possible for the compiler to know the bindings, and it is an implementation's choice to ignore it (in favor of
flexibility, ease of compile, etc.) It is possible that the imported library is updated after the importing library is
compiled, but I don't think that's what you mean, since allowing it precludes expansion of macros during compilation.
Is there a definite reason that makes the implementation delay to know the final binding until
invocation time?