我正在使用自己的玩具编程语言。现在我正在解释AST的源语言,我想知道编译一个字节码有什么好处,然后解释它可以提供给我。
现在我有三件事:
我的观点是否正确?编译为字节码有什么其他动机?
答案 0 :(得分:7)
生成字节代码(或任何其他“易于解释”的形式,如线程代码)的要点基本上是性能。
对于AST解释器来决定接下来要做什么,它需要遍历树,检查节点,确定节点类型,检查任何操作数的类型,验证合法性,并确定AST指定的特殊情况运算符应用(它表示“+”,但它意味着16位添加或字符串连接?),然后才最终执行某些操作。
如果一个人采取最后的行动并产生某种易于解释的结构,那么在“执行”时,解释者可以专注于执行动作,而无需进行所有检查/特殊情况确定。
最近的另一个借口是,如果为许多众所周知的虚拟机(JVM,MSIL,Parrot等)中的任何一个生成字节代码,您甚至不必编写解释器代码。对于JVM和MSIL,您还可以获得与它们相关的JIT编译器的好处,并仔细设计您的语言,兼容大型库,这是Java和C#的真正吸引力。
答案 1 :(得分:5)
速度是主要原因;解释AST在实践中太慢了。
使用字节码的另一个原因是它可以简单地序列化(存储在磁盘上),以便您可以分发它。这就是Java所做的。