为什么我们需要/使用托管代码(超过原生代码)?

Ani*_*rma 7 c# java jvm managed .net-native

我在这里遗漏了一些基本的东西.从源语言编译成字节码(java)或中间语言(.NET)然后从JVM或CLR内部运行它们有什么用?


使用托管代码的性能(无论是轻微还是大)都有所下降,但有哪些好处?我知道有垃圾收集和内存管理,但即便如此,将源代码直接编译为原生而不需要这个中间级别也不是更好吗?

另外(我在这里添加它,因为它与问题直接相关) - 显然,Windows 10 Universal应用程序是使用.NET Native编译的,它编译为本机机器代码.我很好奇为什么以前没有使用所有.NET程序.

InB*_*een 2

除了其他答案中指出的其他内容之外,这种方法的主要好处是在开发和维护方面实现了显着的成本降低以及开发环境的可扩展性的极大提高。

考虑没有中间语言的情况;您需要为每种受支持的语言每个受支持的平台开发和维护一个编译器。假设您有语言L1L2L3以及平台P1P2P3。这意味着您需要开发和维护 9 个不同的编译器:C1(L1,P1)C2(L1, P2)C3(L1, P3)C4(L2, P1)等。

另一方面,拥有中间通用语言I可以让您开发 3 个特定于语言的编译器C1(L1, I)C2(L2, I)C3(L3, I)以及 3 个特定于平台的编译器C4(I, P1)C5(I,P2)C6(I,P3)

显然,支持的语言和平台基础越大,成本降低就越显着。

它还为您在未来添加受支持的平台或语言方面提供了很大的灵活性;任何新的L4语言只需要开发一个编译器C(L4,I),您只需一次开发的价格即可立即支持所有平台。相反,如果你有一个新平台P4,你只需要开发C(I, P4),宾果,你有L1L2L3都在P4中工作。

这基本上是一个双赢的局面。