If C# is not interpreted, then why is a VM needed?

后端 未结 3 1676
我在风中等你
我在风中等你 2020-12-30 14:07

I have read a lot of controversy about C#, where some say it\'s interpreted, some say it\'s not. I do know it\'s compiled into the MSIL and then JITed when run, depending on

3条回答
  •  佛祖请我去吃肉
    2020-12-30 14:44

    The VM is just an abstraction of a microprocessor. It is just a definition and does not really exist. I.e. you cannot run code on the VM; however, you can generate IL code for it. The advantage is that language compilers do not need to know details about different kinds of real processors. Since different .NET languages like C# or VB (and many more) produce IL, they are compatible on this level. This, together with other conventions like a common type system, allows you to use a DLL generated from VB code in a C# program, for instance.

    The IL is compiled just in time on Windows when you run a .NET application and can also be compiled ahead of time in Mono. In both cases, native machine code for the actual processor is generated. This fully compiled code is executed on the REAL microprocessor!


    A different aspect is the number of compliers you have to write. If you have n languages and you want to run them on m processor architectures, you need n language-to-IL compliers + m IL-to-native-code compliers. Without this intermediate abstraction layer you would need to have n × m compliers and this can be a much higher number than just n + m!

提交回复
热议问题