<meta charset="utf-8"><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12.5px; border-collapse: collapse; ">I&#39;m looking over compiler collection that implements a Racket-&gt;C compiler.  It looks like it uses a set of racket structs labeled vm:* as the virtual machine representation, and then compiles these to C.  However, the main racket compiler uses a different bytecode representation, implemented in C, that runs on the racket VM.  Why are there two different bytecode representations?  Isn&#39;t it a duplicated effort to have a different intermediate representation when compiling to C?  Why not first compile to the main racket bytecode, and then compile that to C?</span>