我正在设计一种编译为中间字节码的编程语言。但是,我在设计字节码结构时遇到了很多麻烦。有人对如何用二进制表示程序有任何指示吗?或者,是否有任何资源(最好是免费的)来说明如何做到这一点?我发现的最接近的是 Lua 解释器 bytecode 的描述。
编辑:更多信息:我正在实现自己的垃圾收集方案,该方案针对不变性和并发性进行了高度优化。为了效率,我需要一些独特的字节码指令,允许程序与垃圾收集方案交互。
我正在设计一种编译为中间字节码的编程语言。但是,我在设计字节码结构时遇到了很多麻烦。有人对如何用二进制表示程序有任何指示吗?或者,是否有任何资源(最好是免费的)来说明如何做到这一点?我发现的最接近的是 Lua 解释器 bytecode 的描述。
编辑:更多信息:我正在实现自己的垃圾收集方案,该方案针对不变性和并发性进行了高度优化。为了效率,我需要一些独特的字节码指令,允许程序与垃圾收集方案交互。
不要设计你的字节码,这是不必要的!
我建议您研究一下LLVM和GNU Lightning,它们为您做了很多艰苦的工作,并且只要求您在注释掉内容并解析范围等之后创建一个类似 AST 的模式进行翻译。
龙书还包括一些关于字节码的部分。计算机编程艺术也可能有所帮助,因为 Mix 语言说明了一些(过时的)但重要的设计决策。
真的,您的中间代码应该是:
这完全取决于您的要求,除非您需要,否则不要设计自己的 IR/字节码。如果其他适合,请使用它!你不需要维护它!
本文描述了 GNU Smalltalk VM 及其字节码。谷歌搜索“smalltalk bytecode”会找到其他资源。
您可以查看python 字节码指令列表,并使用dis 模块查看为简单程序生成的字节码。
有关字节码优化的讨论,请参阅how-many-places-are-optimized-in-pythons-bytecodeversion-2-5。
您可能会发现查看有关 Bytecode 的 Wikipedia 文章很有用http://en.wikipedia.org/wiki/Bytecode ”并按照您感兴趣的年龄和风格的语言的一些参考。