在我看来,使用起来非常简单的语言(即Python)通常比被认为更复杂的语言(即C ++或Java)的执行时间更慢。为什么?我知道问题的一部分源于Python被解释而不是编译,但是什么阻止Python(或其他高级语言)被有效编译?有没有你认为没有这种权衡的编程语言?
答案 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 ++慢,主要是因为它是一种动态类型语言。例如,见: