Optimization 弱键入是性能提高还是降低?
在编写解释语言时,弱类型还是强类型更快 我想知道这一点,因为通常更快的动态类型解释语言(Lua、Javascript),事实上大多数解释语言都使用弱类型 但另一方面,强类型提供了弱类型不能提供的保证,那么,优化技术是否可以用于一种类型而不能用于另一种类型呢Optimization 弱键入是性能提高还是降低?,optimization,typing,scripting-language,Optimization,Typing,Scripting Language,在编写解释语言时,弱类型还是强类型更快 我想知道这一点,因为通常更快的动态类型解释语言(Lua、Javascript),事实上大多数解释语言都使用弱类型 但另一方面,强类型提供了弱类型不能提供的保证,那么,优化技术是否可以用于一种类型而不能用于另一种类型呢 对于强类型,我的意思是类型之间没有隐式转换。例如,这在强类型语言中是非法的,但在弱类型语言中(可能)是合法的:“5”*2==10。尤其是Javascript在这些类型转换方面臭名昭著。在我看来,由于缺乏“强类型解释语言”(使用我从问题注释中
对于强类型,我的意思是类型之间没有隐式转换。例如,这在强类型语言中是非法的,但在弱类型语言中(可能)是合法的:
“5”*2==10
。尤其是Javascript在这些类型转换方面臭名昭著。在我看来,由于缺乏“强类型解释语言”(使用我从问题注释中理解的定义),这个问题很难用明确的示例来回答
我想不出有哪种语言是经过解释的,并且没有隐式转换的。我认为这有两个原因:
“5”*2==10
问题在于,“弱类型”不是一个定义良好的术语,因为有两种非常不同的方式可以发生这种“隐式转换”,这对性能的影响几乎相反:
- “脚本语言方式”:值具有运行时类型,当操作调用不同类型时,该语言隐式应用语义规则在类型之间进行转换(例如将二进制数格式化为十进制字符串)。这会降低性能,因为A)需要在运行时有类型信息,b)需要检查此信息。这两个需求都会引入开销
- “C方式”:在运行时,它只是字节。如果您可以说服编译器对字符串应用一个取4字节整数的操作,那么取决于具体操作的方式,该字符串的前4个字节将被简单地视为一个(可能非常大)整数,或者您将得到缓冲区溢出。或者恶魔从你鼻子里飞出来。这种方法不需要任何开销,并且会导致非常快的性能(以及非常惊人的崩溃)
“5”*2==10
。尤其是Javascript,它因这些类型转换而臭名昭著。编辑:将其添加到问题中。现在大多数现代JavaScript引擎不再进行解释,而是直接编译成字节码。所以很难将这个问题应用到语言中。这个问题在两个方面都没有意义。首先:执行隐式转换时会产生隐式转换的开销。无论语言是否支持隐式转换,不执行任何此类隐式转换的程序都是相同的。因此,您的问题就像询问具有内置反正切函数的编程语言是否比不具有内置反正切函数的编程语言慢。第二:执行