.net MSIL作为纯汇编的实现?

.net MSIL作为纯汇编的实现?,.net,assembly,bytecode,cil,.net,Assembly,Bytecode,Cil,最近,我对汇编语言产生了兴趣。通过这样做,我也对字节码的概念产生了兴趣。所以当我研究微软的.NET时,我非常感兴趣,发现它使用了一种伪汇编来创建自己的字节码。然而,汇编语言本身给我留下了深刻的印象。对我来说,这似乎是一种更高层次的集会 我的问题是,这是否可以实现为纯汇编(如编译的本机代码)而不是JIT/解释的.NET字节码?尝试这种趋势是否明智?其好处是什么?在某种程度上,将CIL转换为机器特定组件是可能的 Marc Gravell在评论中提到了Mono AOT,这是一种选择。如页面上所列,如果

最近,我对汇编语言产生了兴趣。通过这样做,我也对字节码的概念产生了兴趣。所以当我研究微软的.NET时,我非常感兴趣,发现它使用了一种伪汇编来创建自己的字节码。然而,汇编语言本身给我留下了深刻的印象。对我来说,这似乎是一种更高层次的集会


我的问题是,这是否可以实现为纯汇编(如编译的本机代码)而不是JIT/解释的.NET字节码?尝试这种趋势是否明智?其好处是什么?

在某种程度上,将CIL转换为机器特定组件是可能的

Marc Gravell在评论中提到了Mono AOT,这是一种选择。如页面上所列,如果您使用完整AOT(没有任何运行时IL解释),那么您可以做什么和不能做什么都有一些限制。否则,一些可以转换为机器代码的IL将被删除,其余的将在运行时按照通常的方式进行解释

还有,它用C#创建了一个完整的操作系统。如果没有托管操作系统,就没有.NET框架,他们除了将IL转换为机器代码外别无选择。IL2CPU也有其局限性,但我不知道完整的列表


但归根结底,对于绝大多数.NET程序来说,优势很少。您的程序运行速度不会明显加快,您使您的程序难以调试(您的程序或IL转换器中是否存在错误?),并且如果您的安装最终包括.NET Framework本身的一些部分,则安全更新不会应用于这些部分的副本。因此,除非您真的知道自己在做什么,否则不要这样做。

对于ngen工具,无论如何都不建议这样做,因为执行文件不会针对可能运行的机器进行优化later@DiegoDeVita是的,我知道这一点,以及类似的工具,但是很明显,它的用途是非常有限和适当的。。是否有任何非专有的MSIL->ASM转换器/编译器?也许。。。但这是一种非常“懒惰”的看待方式。我想问题更多的是“有没有一个汇编程序可以接受这个积垢?”我更希望第二个问题也能得到回答。你可能还想看看Mono AOT