当人们说CPython是用C语写的时候意味着什么?

时间:2013-07-01 09:08:21

标签: python c

据我所知,CPython程序被编译成中间字节码,由虚拟机执行。那么如何在不事先知道CPython是用C语言编写的情况下进行识别。是否有两种常见的DNA可以匹配来识别它?

3 个答案:

答案 0 :(得分:17)

解释器是用C语言编写的。

它将Python代码编译为字节码,然后评估循环解释该字节码以运行您的代码。

通过查看Python的源代码,您可以识别Python的内容。例如,请参阅source for the evaluation loop

请注意,Python.org实现只是一个Python实现。我们将其称为CPython,因为它是用C实现的。还有其他实现,用其他语言编写。 Jython是用Java编写的,IronPython是用C#编写的,然后有PyPy,它是用Python的(子集)编写的,并运行许多任务faster than CPython。 / p>

答案 1 :(得分:12)

Python不是用C语言编写的。可以说,Python是使用BNF以深奥的英语方言编写的。

但是,以下所有陈述都是正确的:

  1. Python是一种语言,由语言规范和一堆标准模块组成
  2. Python源代码被编译为字节码表示
  3. 这个字节码原则上可以由设计合理的处理器直接执行,但我不知道实际存在的
  4. 如果没有一个原生理解字节码的处理器,必须使用一些其他程序将字节码转换为硬件处理器可以理解的东西
  5. 此运行时工具的一个实际实现是CPython
  6. CPython本身是 C编写的,但......
    1. C是一种语言,由语言规范和一堆标准库组成
    2. C源代码被编译为某种字节码格式(通常是特定于平台的)
    3. 这种特定于平台的格式通常是某些处理器的本机指令集(在这种情况下,它可能被称为"目标代码"或"机器代码")
    4. 这个原生字节码并没有保留任何神奇的C-ness:它只是指令。它对处理器没有任何影响。
    5. 编译字节码的语言
    6. 所以翻译你的Python字节码的CPython可执行文件是一个序列 直接在处理器上执行的指令
    7. 所以你有:Python字节码由硬件处理器解释的机器代码解释
  7. Jython是相同 Python运行时工具
  8. 的另一个实现
  9. Jython是用Java编写的,但......
    1. Java是一种语言,由规范,标准库等组成。
    2. 将Java源代码编译为不同的字节码
    3. Java字节码也可以在合适的硬件上执行,也可以由某些运行时工具
    4. 执行
    5. 提供此功能的Java运行时环境也可以用C
    6. 编写
    7. 所以你有:Java字节码由Java字节码解释,由硬件处理器解释的机器代码解释
  10. 您可以无限期地添加更多图层:考虑您的"硬件处理器"可能真的是一个软件仿真,或硬件处理器可能有一个前端解码他们的" native"指令设置为另一个内部字节码。

    所有这些层都是由它们所做的(根据某些规范执行或解释指令)定义的,而不是它们如何实现它。

    哦,我跳过了编译步骤。 C编译器通常用C语言编写(并且将任何语言编写到可以编译自身的阶段,这在传统上很重要),但它也可以用Python或Java编写。同样,编译器由它的作用定义(根据语言规范将某些源语言转换为某些输出,如字节码),而不是如何实现。

答案 2 :(得分:1)

我在这里很好地理解了我最初的怀疑: http://amitsaha.github.io/site/notes/articles/c_python_compiler_interpreter.html