我正在阅读有关解释性语言的优缺点,其中最常见的缺点之一是速度较慢,但为什么解释性语言的程序会很慢呢?
我正在阅读有关解释性语言的优缺点,其中最常见的缺点之一是速度较慢,但为什么解释性语言的程序会很慢呢?
本地程序使用为其运行的处理器编写的指令来运行。
解释性语言就是这样,“解释”。某种形式的指令被读取并由运行时解释,随后执行本机机器指令。
可以这样想。如果你能用母语与某人交流,那通常比需要一个翻译将你的语言翻译成另一种语言让听众理解更快。
请注意,我上面所描述的是在解释器中运行语言的情况。有许多语言的解释器也有本地链接器,用于构建本机机器指令。速度减慢(然而它的大小可能是多少)只适用于解释上下文。
因此,稍微不准确地说,语言不是慢的,而是它运行的上下文是慢的。
C#不是一种解释性语言,尽管它使用中间语言(IL),但在执行之前,它将被JIT编译为本机指令,因此它具有一些相同的速度降低,但并非全部。但我敢打赌,如果为C#或C++构建了一个完整的解释器,它也会运行得更慢。
只是为了明确,当我说“慢”时,那当然是一个相对的词。
简单来说,编译型语言是通过机器指令执行,而解释型语言是由一个程序(用编译型语言编写)执行,该程序读取源代码或字节码,然后基本上模拟了一个假设的计算机,如果该计算机存在,它就可以直接运行程序。
把解释运行时想象成是一种模拟器,可以替代实际上此时你没有的计算机。
当然,这被Java、C#和其他语言所使用的JIT(Just In Time)编译器所复杂化。理论上,它们与“AOT”(“At One Time”)编译器一样好,但在实践中,这些语言运行速度更慢,并且需要在程序运行时拥有编译器,从而占用内存和时间。但是,如果你在这里谈论这些问题,则要准备吸引狂热的JIT辩护者,他们坚称JIT和AOT之间没有理论差异。如果你问他们Java和C#是否像C和C++一样快,那么他们就开始找借口并且稍微冷静下来了。 :-)
因此,在游戏领域,C++完全掌控了最大可用计算资源。
在桌面和Web上,信息导向任务通常由更抽象或至少编译较少的语言完成,因为计算机非常快,问题不需要进行复杂的计算,所以我们可以花费一些时间来达成目标,如市场上的时间、程序员生产力、可靠的内存安全环境、动态模块化和其他强大的工具。
OUT portnum,value
这样的操作时才会“生成低级代码”,例如在需要常量地址的 8080 处理器上使用 out
指令。BASIC 解释器将存储 "OUT" 指令,后跟一个 RET,并将其保存在几个方便使用的字节中,然后调用该例程。 - supercat除了其他答案之外,还有优化:当您编译程序时,通常不关心编译需要多长时间 - 编译器有很多时间来优化您的代码。当您解释代码时,必须非常快速地完成,因此某些更聪明的优化可能无法实现。
没有所谓的解释性语言。任何语言都可以通过解释器或编译器实现。如今,大多数语言都使用编译器进行实现。
话虽如此,解释器通常较慢,因为它们需要在运行时处理语言或类似语言的东西,并将其翻译成机器指令。编译器只需一次将此转换为机器指令,之后便可直接执行。
没错,解释性语言的速度比较慢...
但是,请考虑以下情况。我有一个问题需要解决。在Python中,我花了4分钟解决了这个问题,程序运行时间为0.15秒。然后我尝试用C语言编写它,得到了0.12秒的运行时间,但编写它花费了我1小时的时间。所有这些都是因为解决问题的实际方法是使用哈希表,而哈希表无论如何都会占据运行时间。