4

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

4

4 回答 4

5

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

于 2012-08-10T20:59:40.430 回答
5

让我们比较一下 C 和 Python。在大多数情况下,C 编程比 Python 更“复杂”。这是因为 Python 自动化了很多 C 没有的工作。例如,垃圾收集在 Python 中是自动化的,但在 C 中是程序员的责任。

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

所以你有它,轻松与性能。

于 2012-08-10T21:01:27.500 回答
2

基本上,这一切背后都有一个核心原因:做某事所需的指令数量。

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

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

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

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

是的,可以编译 Python。甚至有项目正在尝试。但是硬编译会让你失去一些动态语言的优势。

于 2012-08-10T21:07:08.360 回答
1

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

为什么动态类型语言很慢

于 2012-08-10T21:15:21.963 回答