为什么动态类型语言必须将变量名称存储为字符串?

时间:2016-02-05 16:16:00

标签: types language-agnostic interpreted-language

我读过动态类型语言较慢,因为它们将变量名称存储为字符串,但是它们不能使用别的东西吗?我问这个问题是对这个问题的跟进:

Why are dynamically typed languages slow?

是否有其他方法来访问变量而不是使用名称哈希查找?这不是使用模板编程技术的机会吗?

1 个答案:

答案 0 :(得分:1)

有几个原因,接下来只是一对。假设有一个代码接收变量x并在其上访问字段foo,并且此变量一次附加到Bar类型的对象,其他时间附加对于Baz类型的对象,两者都有其他字段,两者之间没有关系。访问x.foo在两种情况下都有效,但由于这些类完全不相关,因此很难将标识符foo映射到某个整数,该整数可以在以后用于快速访问所需字段:其位置和它的类型可能是不可预测的。为了增加一些现实,想象一下其他一些类可能在系统中进出,并且它们也可能具有字段foo

另一种情况与面向对象的方法无关,并且是在LISP和类似语言被发明时学习的。它们不仅可以计算代码中静态写入的内容,还可以在运行时计算某些术语。可以检索这些术语,例如,作为普通字符串,来自外部文件,数据库,网络等,然后使用特殊功能进行解释,通常称为eval。当然,动态计算的术语可以指现有的变量。除了他们的名字之外别无他法。

然而,在运行时优化某些变量访问似乎是合理的。关键问题是它只能在某些特定情况下完成,而不是像静态类型语言那样在大多数情况下完成。