为什么语言的简单性和执行时间之间似乎存在紧张关系?

时间:2012-08-10 20:52:44

标签: c++ python compilation interpreter execution

在我看来,使用起来非常简单的语言(即Python)通常比被认为更复杂的语言(即C ++或Java)的执行时间更慢。为什么?我知道问题的一部分源于Py​​thon被解释而不是编译,但是什么阻止Python(或其他高级语言)被有效编译?有没有你认为没有这种权衡的编程语言?

4 个答案:

答案 0 :(得分:5)

高级语言(或者至少是动态语言)的效率问题源于这样一个事实,即通常不知道在运行时解析实际类型的对象之前需要执行哪些操作。因此,这些语言不能编译成简单的机器代码,并且必须完成所有重要工作。

答案 1 :(得分:5)

让我们比较C和Python。大多数人认为C更复杂"编程,而不是说,Python。这是因为Python自动化了很多C不会做的工作。例如,垃圾收集在Python中是自动化的,但是程序员在C中负责。

这种自动化的代价是这些"高级功能"需要足够通用以适应"适应"每个计划的需求。例如,Python垃圾收集器具有预定义的调度/垃圾收集算法,这可能不是每个应用程序的最佳选择。另一方面,C为程序员提供了完全的灵活性,可以按照自己的意愿定义GC计划和算法。

所以你有它,轻松与表现。

答案 2 :(得分:2)

基本上,在这一切之下有一个核心原因:执行某些操作所需的指令数量。

在旧的C语言中,大多数语句只需要几条指令就可以完成,通常只需要从1到4左右,并且可以非常接近1。

在C ++中,还有更多的内容,例如,它需要额外的几条指令才能调用虚拟方法。这可以通过一个好的优化器解决,但运行时类型信息可以阻止优化器。

在Java中,你遇到了同样的问题,而且代码是在一个解释器中运行的,它将每个JVM指令扩展为一个或多个机器指令 - 在某些情况下更多,特别是如果代码运行时间不够长利用运行时优化。

Python有所有这些问题,但它必须在启动时进行解析,并且具有处理类型的灵活移动(更复杂),这意味着更多的指令。

是的,可以编译Python。甚至有projects that are trying it。但是硬编译会失去动态语言的一些优点。

答案 3 :(得分:1)

Python代码执行时间比C ++慢,主要是因为它是一种动态类型语言。例如,见:

Why are dynamically typed languages slow