Communicating with the compiler

I apologize in advance if this post seems a little scattered, it's more a plea for help in getting my own thinking clearer.

I've been having thoughts regarding the compiler and how we interact/communicate with it, trying first to enumerate all the methods we use, and second, trying to come up with something 'better'.

For the first part, I've figured out we use the following methods of communication/interaction with the compiler:

  1. The rust language itself
  2. The metalanguage of the macro system
    1. The derive macro system
    2. Attribute macros
    3. proc macros
  3. Constant functions
  4. Out of band, using compiler switches
  5. build.rs, sort of???

Are there any other ways that we regularly communicate with the compiler to tell it what we want it to do?

As for the second part, I don't have a clear idea in my head about what I'm trying to do with this information. The best I can do at this moment is come up with a complete list of how we communicate our intent to the compiler.

Thanks in advance for any help anyone can give on this one.