为什么类型检查昂贵?

时间:2017-01-12 20:25:34

标签: performance types casting computer-science

我听过许多轶事,动态类型语言的一个大问题是类型检查非常慢。为什么它会变慢?使用可能发生变化的运行时分配类型导致计算效率大幅下降的计算机科学理性是什么?

1 个答案:

答案 0 :(得分:8)

动态类型语言必须在代码运行时执行类型检查。虽然它们有时可以编译,但它们需要削减许多角落以获得合理的性能。在运行时检查的一个重大缺点是,如果类型无效,则解释器只能抛出异常或停止执行。

因此,他们经常尝试强制类型以防止异常,即使它可能是不受欢迎的。在python中,发现整数的简单除法意味着我的用户输出突然充满'2.0'并不常见,因为我没有明确地转回int

计算机科学理性是类型检查是一种非常繁重的算法。对于您调用的每个函数,必须验证所有涉及的类型(或强制执行,这可能是另一个函数调用),之后必须更新类型信息。在运行时,您只能拥有一个简单的类型系统和极少的优化。通过比较编译器甚至可以利用弱类型系统来优化您的低效算法。

编译静态类型语言和解释动态类型语言非常常见。这是因为如果正在为编译器设计一种语言,那么将编码检查的责任交给编译器是很明智的,这样您的代码就会更加优化,并且不需要在运行时管理类型。在运行时需要携带的越少,执行的代码就越快。

最终,这意味着为解释器设计的语言无法承受编译器可以输入的级别。除了利用类型信息进行优化的自由度较低 - 性能提高1 - 它们必须在运行时携带和修改类型信息 - 攻击2.较弱的类型系统还引入了许多类型的安全漏洞。

自然地,还有许多需要弱打字的情况。动态语言通常扮演脚本的角色;它们可以快速编写代码,易于理解,并且可以比编译器更快地移植到新平台!这使得它们非常适合将非常不同的系统粘合在一起。一个脚本可以与操作系统及其上的许多程序进行交互,以安排从您喜爱的网站每日下载所有最新的猫视频。

与往常一样,我强烈建议您在曲目中使用动态语言和静态语言。能够获得强类型的保证以及轻松打字的便利性是非常宝贵的。是一个杂食的代码:)