【发布时间】:2015-07-23 08:58:04
【问题描述】:
我正在为动态类型语言制作字节码解释器。例如这个表达式:
2 + 3
将创建以下类似汇编的输出(稍后编译为字节码):
iconst reg1, 2 ; Put integer 2 to register 1
iconst reg2, 3 ; Put integer 3 to register 2
iadd reg3, reg1, reg2 ; Add the 2 as integers from reg1 and 2 and put it into reg3
另一个例子是:
1 + 3.2
输出:
iconst reg1, 1
itof reg2, reg1 ; Convert integer to float and put it into reg2
fconst reg3, reg2
fadd reg4, reg2, reg3
所以每种类型都有自己的运算符(fadd、iadd、也许是sadd...)。这意味着我需要知道编译类型的类型。在我有例如函数调用之前,这不是问题:
function foo(x, y):
return x + y
foo() 可以用整数、浮点数,甚至混合调用。所以我不能在编译时为它生成正确的字节码。最好做什么,所以它不会真正影响速度。使用所使用的参数类型生成函数是一个好策略吗?所以如果这被调用:
foo(2, 3.2)
它会生成类似 foo@int,float() 的东西。还是在运行时解决它更好?我可以在不影响性能的情况下这样做吗?如何? lua是怎么做到的?
对不起,如果这是重复的,也许我需要提高我的谷歌搜索技能。
【问题讨论】:
标签: interpreter dynamic-typing