我知道python是一种解释型语言,但如果编译它的性能要高得多。究竟是什么阻止了python的编译?而且,为什么python被设计为解释语言而不是首先编译的语言?
注意:我知道.pyc
个文件,但这些文件是字节码,而不是编译文件。
答案 0 :(得分:4)
Python,这种语言与任何编程语言一样,本身并不是编译或解释的。标准的Python实现,称为CPython,自动将Python源代码编译为字节码并执行它。
Python的实现可以编译为本机代码。例如,PyPy project使用JIT编译来获得CPython易用性与本机代码性能相结合的好处。
Cython是另一种混合方法,可以从Python的方言动态生成和编译C代码。
但是,由于Python是动态类型的,因此完全预编译所有可能的代码路径通常并不实用,并且它不会像主流的静态类型语言那样快,即使是JIT编译的。
答案 1 :(得分:0)
Python是一种脚本语言,通常用于快速原型设计或快速开发等事情,因此我认为解释器优于编译器的思维过程是它为这些域中的程序员简化了事情(以性能为代价)。没有什么能阻止你或其他人为Python编写编译器;当Facebook编写HHVM来执行编译的Hack(他们的PHP类型变体)的字节码时,Facebook为PHP做了类似的事情。
事实上,有些项目可以用python做到这一点。 Cython就是我能想到的一个例子(cython.org)。
答案 2 :(得分:0)
我认为python代码可以在某种程度上编译,但我们无法在python中编译所有内容。这是由于python的松散类型,你可以在程序中的任何地方更改变量类型。 Python的修改即Rpython具有非常严格的风格,因此可以完全编译。
答案 3 :(得分:0)
Python是主要用于编写可读和富有表现力的代码的语言。 Python包含了所有邻居的许多功能。
让我们看看为什么我们不需要将python代码编译成程序集或机器。 现在让我们将本地语言与python进行比较。我们来看看C ++。 有一些python特定的功能,比如你不必在python中做任何类型声明。这由Python解释器管理。但是如果你试图在C ++中实现相同的功能,那么它就是编译器的负担。它会添加代码以在每次访问任何目的之前检查变量的类型。即使是python编译器也会执行相同的操作。这意味着您根本没有提高运行时性能。
大多数python函数都是python编译器在python脚本中调用它时内部调用的c函数。
我们不需要python编译器的主要原因是它不能大规模地提高性能。编写软件会增加风险而不是减少风险,这是浪费。一旦所有的代码都存储在主内存中,python就会非常快。