Why is it necessary to create an IL, and have a virtual machine? I understand that it allows us to control references and stuff without an explicit destructor, and such. Then, why can't it do it before hand and just add an extra step and pre compile to native win32 executables as well?

Could someone explain why this is too complex?