【发布时间】:2016-02-06 20:09:20
【问题描述】:
我读到动态类型语言比较慢,因为它们将变量名存储为字符串,但它们不能使用其他东西吗?我问这个问题是对这个问题的跟进:
Why are dynamically typed languages slow?
除了使用名称哈希查找之外,没有其他方法可以访问变量吗?这不是使用模板编程技术的机会吗?
【问题讨论】:
-
如果你能做到
foo = 'bar' + rand(); echo baz[foo];,直到运行时才知道这些,除了某种字符串查找之外,不可能优化它。 -
我认为要么这个问题的答案不清楚,要么你不明白它的意思。在静态类型语言中,编译器可以在保证的有限时间内进行大量分析。在动态类型语言中,您甚至无法保证可以自动派生每个变量的类型。如果编译器甚至不知道,那么在编译期间对程序进行推理是非常困难的。
-
所有静态类型语言都编译为动态类型语言(几乎所有的 x86 机器代码和 ARM 机器代码都是动态类型的 - RAM 没有类型 - 但过去有 CPU 已标记内存,其中 RAM 有类型,但它们在市场上是失败的)。即使他们编译成静态类型的语言(JVM 是静态类型的吗?我有疑问)他们运行的是动态类型的 CPU。
-
另外,x86 程序集、ARM 程序集、PowerPC 程序集、MIPS 程序集、68k 程序集等都是动态类型的。您可以对任何变量执行任何整数或浮点运算。
-
在有关编程语言的讨论中声称汇编是“动态类型的”是一种误导。动态类型意味着该语言将为您做一些低级的事情,例如将数据复制到不同的内存位置,更改原始值等……这是一个高级概念,指的是一种抽象类型。从这个意义上说,程序集不是动态类型的。它根本没有打字。它有一种类型,原始数据。
标签: types language-agnostic interpreted-language