大多数语言都有许多不同的执行引擎吗?
答案 0 :(得分:3)
是否可以衡量语言的表现?
不是真的。这取决于你如何定义表现以及你的体重。例如,如果你的意思是“原始cpu密集型计算工作”,当然,可以用几种不同的语言编写一堆算法,并在一些不同的硬件上试用它们并测量运行时间。但总的来说,不可能说语言X比语言Y表现更好。
大多数语言都有许多不同的执行引擎吗?
你的意思是说大多数语言都有虚拟机吗?我会说,不,不是今天。但是,许多新语言都是基于VM的(或基于某些现有VM,如JVM或.NET VM)。
答案 1 :(得分:1)
许多语言都没有执行引擎 - 整个动态/静态事物围绕着这样一个事实:动态功能可以按照数量级简化某些类型的编程问题 - 但是你需要在运行时为此付出代价,因为事情必须是动态思考 - 常见的lisp是其中最好的例子之一,它非常乐意可互换地处理数据和代码,但它并不完全是速度恶魔(针对本机编译的C ++,其中100x +工程时间用于消除动态在你开始对我大吼大叫之前,要求人们,等等。
1)许多语言都有重点领域 - 你知道prolog,你会创建一个高性能的规则系统比C ++中的人快得多 - 但如果C ++开发人员花费的时间长10倍,他们就会有一个系统在1/10的情况下可以快10倍的速度运行
2)您必须区分真正的编译语言(经典C ++),解释型语言(经典LISP),基于VM的语言(Smalltalk,Pascal),以及向用户呈现VM的新型混合型语言,但是可以使用窥孔优化(C#,Java)在主机上动态重新编译 - 解释语言总是比本机编译语言慢 - 本机编译语言没有执行引擎,所有其他语言都有一种或另一种形式的执行发动机
3)“最快”的语言将是原生机器代码 - 不是非常便携,而且开发成本非常高昂
4)真正的问题是;
考虑一下 - 我可以在几分钟内在Smalltalk中编写一些程序,这需要我花费几天的时间才能取得相同的进展 - 现在Smalltalk程序运行速度比C#程序慢得多,但总的来说,我花的钱少了时间/用它 -
这个故事的道德 - 语言是工具 - 为工作选择合适的工具
答案 2 :(得分:1)
大多数语言有很多不同 执行引擎......“我没有 理解了这个含义因此问了 问题!
在上下文中,含义是 - 大多数语言都有多个实现,程序性能取决于使用哪种语言实现来运行程序。
作为一个简单的例子,我们通常希望使用Java 解释器运行的程序比使用Java Hotspot运行的相同程序使用更多时间 -
答案 3 :(得分:0)
您可以随时查看SPEC提供的基准:benchmark suite
一起测试编译器和硬件是很常见的。
答案 4 :(得分:0)
我所知道的“执行引擎”确实没有标准含义。最初的人显然用它来描述大量事物的集合。
许多语言通常都编译为机器代码。这意味着编译器以某种方式将程序所说的内容转换为机器代码,提供运行时例程和库(并且这种区别也不是很明显),并将所有内容放入可执行包中。编译过程本身可能是直接的,也可能是其他东西,然后翻译成机器语言(系统的汇编语言和C是两种流行的选择)。
通常会解释许多语言。这意味着编译器可能会将源代码转换为某些中间代码,然后由解释器执行。在某些情况下,解释器可以自己转换为机器语言,通常称为JIT(即时)编译器。原始翻译步骤不是强制性的,但是很常见。
没有必须编译或必须解释的语言(尽管使实际的Perl编译器比它的价值要麻烦得多)。实现的类型可以改变:Java最初被认为是一种解释语言,直到一些JVM(Java虚拟机)解释器成为JIT编译器。
大多数流行语言在一般情况下都有多个实现(Perl可能是最大的反例)。有时它们几乎都是编译的,有时它们几乎都被解释了。有些语言很难编译(比如Perl),有些语言看起来很难但是通常编译(比如Lisp),有些语言很难被编译(比如C语言)。
因此,给定的语言可以有各种各样的实现,不一定是同一种类。在不同的实现中可以有不同的组件,并且组件将不相同。如果你愿意,可以调用这些系统执行引擎。
因此,询问语言X是否比语言Y更快通常是没有意义的,因为它取决于实现的质量。话虽这么说,有些语言更适合编译(更快),有些语言更适合编译成快速代码,有些语言有一个或几个常见的实现,所以我可以说C通常更快到比Python运行。