Performance 为什么解释语言速度慢?

Performance 为什么解释语言速度慢?,performance,interpreted-language,Performance,Interpreted Language,我在读解释语言的优缺点,最常见的缺点之一是速度慢,但为什么解释语言的程序速度慢?本机程序使用为其运行的处理器编写的指令运行 解释语言就是“解释的”。另一种形式的指令由运行时读取和解释,而运行时又执行本机指令 这样想吧。如果你能用你的母语与某人交谈,这通常比让口译员将你的语言翻译成其他语言以便听者理解要快 请注意,我上面描述的是在解释器中运行语言时使用的。有许多语言的解释器,也有构建本机机器指令的本机链接器。速度降低(无论其大小)仅适用于解释的上下文 因此,说语言是慢的是有点不正确的,相反,它运行

我在读解释语言的优缺点,最常见的缺点之一是速度慢,但为什么解释语言的程序速度慢?

本机程序使用为其运行的处理器编写的指令运行

解释语言就是“解释的”。另一种形式的指令由运行时读取和解释,而运行时又执行本机指令

这样想吧。如果你能用你的母语与某人交谈,这通常比让口译员将你的语言翻译成其他语言以便听者理解要快

请注意,我上面描述的是在解释器中运行语言时使用的。有许多语言的解释器,也有构建本机机器指令的本机链接器。速度降低(无论其大小)仅适用于解释的上下文

因此,说语言是慢的是有点不正确的,相反,它运行的环境是慢的

< P> C不是一种解释语言,即使它使用中间语言(IL),在执行之前它被引向本地指令,所以它具有一些相同的速度降低,但不是全部,但是我敢打赌,如果你为C++或C++建立了一个完全成熟的解释器,它也会运行得较慢。
要明确的是,当我说“慢”时,这当然是一个相对的术语。

循环100次,循环的内容被100次解释为低级代码

未缓存、未重用、未优化

简单地说,编译器将一次解释为低级代码

在评论之后编辑:

  • ,不作解释。只是稍后才编译,不是预先编译
  • 我指的是经典的定义,而不是现代的实际实现
来自:

处理解释语言 在运行时。每一行都读过, 分析和执行。不得不 在循环中每次重新处理一行 是什么让解释语言如此 慢点。这个开销意味着 解释代码在5到10之间运行 比编译代码慢10倍。这个 解释语言,如Basic或 JavaScript是最慢的。他们的 优势在于不需要被忽视 更改后重新编译,即 当你学习编程时很方便


然而,对于Java和C#等语言来说,速度慢5-10倍并不一定是正确的。它们会被解释,但可以为某些操作生成机器语言指令,从而显著加快速度(有时接近编译语言的速度)。

解释语言需要在执行时读取和解释源代码。对于编译后的代码,很多解释都是提前完成的(在编译时)。

现在很少有当代脚本语言被“解释”;它们通常是动态编译的,要么编译成机器代码,要么编译成某种中间字节码语言,在虚拟机中执行(更有效)


话虽如此,它们的速度较慢,因为您的cpu在每个“代码行”上执行更多的指令,因为许多指令都花在理解代码上,而不是执行该行的语义所暗示的任何操作

除了其他答案外,还有优化:当你编译一个程序时,你通常不关心编译需要多长时间——编译器有很多时间来优化你的代码。当您解释代码时,必须非常快地完成,因此可能无法进行一些更聪明的优化

这就是那篇文章中与你的问题相关的观点

解释器的执行是 通常效率要低得多 常规程序执行。发生了 因为每一条指令 应在会议上通过解释 运行时或在较新版本中 实现时,代码必须是 编译成中间版本 每次执行前的陈述


因为同样的原因,通过翻译比用母语说话要慢。或者,用字典阅读。翻译需要时间


更新:不,我没有看到我的答案在某种程度上与公认的答案相同;-)

没有解释语言这回事。任何语言都可以由解释器或编译器实现。现在大多数语言都有使用编译器的实现


也就是说,解释器通常速度较慢,因为他们需要在运行时处理语言或与之相当接近的东西,并将其翻译成机器指令。编译器只对机器指令翻译一次,然后直接执行。

一个简单的问题,没有任何真正简单的答案。底线是所有计算机真正“理解”的是二进制指令,这就是像C这样的“快速”语言编译成的指令

还有一些虚拟机,它们可以理解不同的二进制指令(如Java和.NET),但这些指令必须通过即时编译器(JIT)实时转换为机器指令。这几乎和静态编译器一样快(在某些特定情况下甚至更快,因为JIT比静态编译器有更多关于如何使用代码的信息)

还有解释语言,它们通常也有自己的中间二进制指令,但解释器的功能很像一个循环,其中包含一个大的switch语句,每个指令都有一个case,以及如何执行它。对底层机器代码的这种抽象级别很慢。解释器中涉及的指令更多,函数调用的长链甚至可以做简单的事情,因此可以说内存和缓存没有得到有效的利用

但是解释语言对于pur来说通常足够快