gpt4 book ai didi

performance - 为什么类型检查很昂贵?

转载 作者:行者123 更新时间:2023-12-02 05:57:58 25 4
gpt4 key购买 nike

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

最佳答案

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

所以他们经常尝试强制类型来防止异常,即使它可能是不可取的。在 python 中,经常会发现一个简单的整数除法意味着我的用户输出突然充满了“2.0”,因为我没有明确地转换回 int .

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

静态类型语言被编译,动态类型语言被解释是很常见的。这是因为如果一种语言是为编译器设计的,那么将类型检查的责任交给编译器是不费吹灰之力的,这样您的代码将更加优化并且不需要在运行时管理类型。在运行时需要携带的数据越少,代码执行的速度就越快。

最终,这意味着为解释器设计的语言无法承受编译器所能达到的输入级别。除了利用类型信息进行优化的自由度较低之外 - 打击 1 到性能 - 他们必须在运行时携带和修改类型信息 - 打击 2。较弱的类型系统还引入了许多类型安全错误。

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

与往常一样,我强烈建议您在轨道中使用动态语言和静态语言。获得强类型的保证和弱类型的易用性是非常宝贵的。成为代码杂食者:)

关于performance - 为什么类型检查很昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41622341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com