15

我正在设计一种编译为中间字节码的编程语言。但是,我在设计字节码结构时遇到了很多麻烦。有人对如何用二进制表示程序有任何指示吗?或者,是否有任何资源(最好是免费的)来说明如何做到这一点?我发现的最接近的是 Lua 解释器 bytecode 的描述

编辑:更多信息:我正在实现自己的垃圾收集方案,该方案针对不变性和并发性进行了高度优化。为了效率,我需要一些独特的字节码指令,允许程序与垃圾收集方案交互。

4

4 回答 4

6

不要设计你的字节码,这是不必要的!

我建议您研究一下LLVMGNU Lightning,它们为您做了很多艰苦的工作,并且只要求您在注释掉内容并解析范围等之后创建一个类似 AST 的模式进行翻译。

龙书还包括一些关于字节码的部分。计算机编程艺术也可能有所帮助,因为 Mix 语言说明了一些(过时的)但重要的设计决策。

真的,您的中间代码应该是:

  1. 写的东西是一种有效的中间形式,它允许流行的优化算法和翻译到后端,而不会因翻译错误等而丢失语义
  2. 一个众所周知且使用过的 IR,您可以使用其他工具将其转换为机器代码。即使您使用 .NET/Mono 设置作为 IR,如果它满足您的需求,那就太好了。

这完全取决于您的要求,除非您需要,否则不要设计自己的 IR/字节码。如果其他适合,请使用它!你不需要维护它!

于 2009-07-17T12:20:11.000 回答
4

本文描述了 GNU Smalltalk VM 及其字节码。谷歌搜索“smalltalk bytecode”会找到其他资源。

于 2009-07-17T12:12:11.357 回答
2

您可以查看python 字节码指令列表,并使用dis 模块查看为简单程序生成的字节码。

有关字节码优化的讨论,请参阅how-many-places-are-optimized-in-pythons-bytecodeversion-2-5

于 2009-07-17T12:34:42.893 回答
1

您可能会发现查看有关 Bytecode 的 Wikipedia 文章很有用http://en.wikipedia.org/wiki/Bytecode ”并按照您感兴趣的年龄和风格的语言的一些参考。

于 2009-07-17T12:10:40.050 回答