我读过动态类型语言的速度较慢,因为它们将变量名称存储为字符串,但它们不能使用其他东西吗?我问这个问题是这个问题的后续:
为什么动态类型语言很慢?
除了使用名称哈希查找之外,没有其他方法可以访问变量吗?这不是使用模板编程技术的机会吗?
有几个原因,接下来只是几个。假设,有一个代码接收一个变量x
并访问其上的字段foo
,一次该变量附加到类型为 Bar
的对象,其他时间附加到 Baz
类型的对象,两者都有其他字段,两者之间没有关系。访问x.foo
在这两种情况下都是有效的,但由于类完全不相关,因此很难将标识符foo
映射到以后可用于快速访问所需字段的某个整数:其位置和类型可能是不可预测的。为了增加一些现实,想象一下其他一些类可能会在系统中来来去去,它们也可能具有字段foo
。
另一种情况与面向对象的方法无关,是在LISP和类似语言发明时学到的。它们不仅允许计算代码中静态写入的内容,还允许在运行时计算某些术语。这些术语可以从外部文件、数据库、网络等中检索,例如作为纯字符串,然后使用通常称为eval
的特殊函数进行解释。当然,动态计算的项可以引用现有的变量。除了他们的名字之外,没有其他方法可以做到这一点。
但是,在运行时优化某些变量访问似乎是合理的。关键问题是它只能在某些特定情况下完成,而不是像静态类型语言那样在大多数时候完成。