【问题标题】:php compare to python in perspective of core libraries从核心库的角度来看,php 与 python 的比较
【发布时间】:2014-03-19 09:21:46
【问题描述】:

这不是各种论坛上提出的语言比较问题。我有兴趣了解更具体的术语核心库/模块在 python 中调用/执行。

当我检查 Python 模块安装目录时,例如 /usr/lib/python2.7(在 Ubuntu 上)。我找到了 .py(源代码)和 .pyc(字节码)。当我们使用 import 语句或更具体地从该模块调用类/函数时,我假设 Python 解释器/编译器调用 .pyc 文件。

虽然 php 为库使用 .so(共享对象)文件。正如我在 /usr/lib/php5/20090626 上看到的那样。是的,python 也有一个目录 /usr/lib/pyshared/python2.7 用于 .so 文件。但是仍然有很多重要的库存储为 .pyc 文件。

对于像 php 这样的核心库仅使用 .so 扩展名以获得性能优势不是一个好主意吗?

【问题讨论】:

  • 我在想如果python喜欢表现得像JAVA World,jvm读取.class/.jar文件而不是编译版本,但我不确定java是否有核心模块不是本机编译的。

标签: php python python-2.7 shared-libraries


【解决方案1】:

.py 文件被即时编译为 .pyc 文件,如果 .pyc 比 .py 文件更新,则使用它。
有些模块可以用 C/C++ 编写,然后以 .so 文件的形式交付。

【讨论】:

  • 我知道 pyc 文件。我的观点是,即使对于许多核心模块,python 仍然在进行字节码读取。对于第三方模块/应用程序,可以理解,但是对于核心模块,如果使用.so编译版本有什么问题。
  • @kuldeep.kamboj CPython 是一个解释器。它不生成本机代码。 .so 文件是本机代码; Python 附带的那些是用 C 编写的。
  • @JanneKarila 在目录 /usr/lib/python2.7/ 我找到了 popen2.pyc、socket.pyc、urllib2.pyc 等等。如果它们不是 python 默认安装附带的核心库。我的问题仍然是相同的 cpython 可以为用户的应用程序生成 pyc,这是可以理解的,但是对于 popen、urllib2 等核心模块,可以使用 python 默认安装分发套接字本机编译版本。在php中,我们甚至没有类似pyc的字节编译文件,所以php intepreter读取/解析php文件。但是对于核心库,没有 .php 或字节编译版本,而是使用 .so 版本。
  • @kuldeep.kamboj 你本质上是在问为什么没有更多的标准库模块用 C 编写。这是一个可行的讨论话题,但 Stack Overflow 并不是一个真正适合讨论的地方。但是请注意,例如。 socket 仅部分用 Python 编写。您应该能够在系统上的某处找到_socket.so 文件。
  • @Janne Karila。据我了解,问题是我们为什么不将 python 标准库编译为本机代码,以便我们运行本机代码而不是运行字节码。答案是因为没有办法将python代码编译成native代码,见stackoverflow.com/questions/8786203/…
猜你喜欢
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 2023-03-14
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
相关资源
最近更新 更多