你可以在互联网上看到汇编代码和汇编代码,但字节码几乎没有。这是为什么 ?汇编编程的需求和优势也应该适用于字节码编程。
最佳答案
字节码编程远不如汇编编程流行/常见的另一个原因是字节码的通用性 - 它的简单性。
字节码指令集主要是“超RISC”,非常简单的指令。为两个目的而设计,为虚拟机提供快速翻译/映射到 native 指令集的能力,并允许高级编译器轻松创建接近 native 的字节码。
另一方面,汇编器也有如此简单的通用部分——这些是字节码解释器/即时编译器实际用来实现字节码功能的部分。很少有人专门使用 native 指令集的这些部分来编写汇编程序。 (Just-in-time-) 编译器为你做这件事。
但汇编器的功能远不止这些,尤其是 SIMD/向量指令。这些指令对于非常特殊的工作负载(“数据流”,从最广泛的意义上说 - 任何像德古拉一样通过女士喉咙传输数据的东西)是专用且高效的。迄今为止,在某些情况下,一些人为干预可能会超过编译器结果的数量级。这样做通常需要使用此类向量指令,以某种特定方式编译器可能不会被强制为您执行。
付出的代价是必须编写 native 汇编函数。
字节码缺乏这些特殊用途的指令扩展,而像这样扩展字节码将放弃首先拥有字节码的最大优势之一。这将使其在 CPU 类型之间无法移植——例如 x86/x64 (SSEx)、ARM (Neon) 或 PowerPC (AltiVec) 的矢量扩展差异太大,无法在顶部映射单个垫片层。
就汇编级编程的教学而言,不需要为此提供实际的 CPU 指令集; Donald Knuth 在“计算机编程艺术”中使用了一个名为 MIX/MMIX 的“虚拟”汇编程序,它比“字节码”这个词的出现早了几十年。可以通过 x86 汇编语言教授的概念也可以通过 .NET 字节码教授。
但是人们编写汇编语言的主要原因(在学术界之外,请参阅上一段)——利用特殊指令集扩展实现的特定于平台的优化——并不是直接编写字节码的正当理由。
关于assembly - 为什么字节码编程不如汇编编程流行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5925975/