title: Is the preprocessor, assembler and linker a part of the compiler?
body: <p>So I've been taught, as many of us have, that the compiler is a program that translates your human readable code into machine readable code. The more you look into it however, you learn that the "compilation process" is actually broken up into 4 different parts: the preprocessor, compiler, assembler and linker. I think not understanding where all these parts fit into place have confused me a bit.  </p>
  
  <ol>
  <li>Are all the steps described in a typical compilation process part of
  the compiler program?</li>
  <li>Or are things like the assembler and linker separate programs built
  into IDE's along with compilers to generate code?  </li>
  <li>Does it depend on the compiler or programming language?</li>
  <li>If separate, is the compiler responsible for just the assembly code
  creation as well as optimizing the assembly code?</li>
  </ol>