现在这堆动态语言都有 eval,从理论上断绝了编译成不带解释器的二进制代码的可能。
而如果没有 eval 这样的东西,那么「脚本语言」是可以编译成机器代码的。最原始的办法就是做这样的翻译:
# py def func(): if random.random()<0.5: return 0 else: return "a string"
// C // 感谢评论告诉我 python 中「值」这个 tagged union 的名字… pyObject func(){ if(lt(invoke_method(random, "random"), val_number(0.5))) { return val_number(0); } else { return val_string("a string"); } }
当然,后者没做任何优化……
任何语言都可以被编译到native,和是不是静态类型没有一毛钱关系。
静态类型只是在一些时候可以提升执行效率的一个做法,仅此而已。
Ruby一行代码的信息量超小的。你写代码的人什么都不说,到执行的时候就知道了,解释器也很为难啊。