栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

儿童python教程12:Python底层是用什么语言实现的?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

儿童python教程12:Python底层是用什么语言实现的?

确切地说,本教程介绍的是用 C 语言编写实现的 Python,又称为 CPython。平时我们所讨论的 Python,指的其实就是 CPython。

随着编程语言的不断发展,Python 的实现方式也发生了变化,除了用 C 语言实现外,Python 还有其他的实现方式。例如,用 Java 语言实现的 Python 称为 JPython,用 .net 实现的 Python 称为 IronPython 等等。

Python 的这些实现方式虽然诞生比 CPython 晚,但一直在努力地跟上主流,并在不同的生产环境中不断地使用并推广 Python。

Python 的实现方式有很多种,Python *网上介绍了 20 多种语言变体、方言或 C 语言之外的 Python 解释器实现。其中一些只是实现了语言核心语法、功能和内置扩展的一个子集,但至少有几个与 CPython 几乎完全兼容。更重要的是,在这些不同的实现方式中,虽然有些只是玩具项目或实验,但大部分都是为了解决某些实际问题而创建的,这些问题要么使用 CPython 无法解决,要么需要开发人员花费巨大的精力,这里举几个例子:
  • 在嵌入式系统中运行 Python 代码。
  • 与运行框架(如 Java 或 .NET)或其他语言做代码集成。
  • 在 Web 浏览器中运行 Python 代码。

由于受到篇幅的限制,本节仅给大家介绍几种 Python 开发人员**常用的几种 Python 实现方式。 Stackless Python Stackless Python 自称 Python 增强版。之所以名为 Stackless(无栈),是因为它没有依赖 C 语言的调用栈,实际上就是对 CPython 做了一些修改,添加了一些新的功能。

在新添加的功能中,**重要就是由解释器管理的微线程,用来替代依赖系统内核上下文切换和任务调度的普通线程,既轻量化又节约资源。

Stackless Python **新可用的版本是 2.7.9 和 3.3.5,分别实现的是 Python 2.7 和 3.3。在 Stackless Python 中,所有的额外功能都是内置 stackless 模块内的框架。

Stackless Python 并不是**有名的 Python 实现,但很值得一提,因为它引入的思想对编程语言社区有很大的影响。例如,将 Stackless Python 中的内核切换功能提取出来并作为一个独立包发布,名为 greenlet,是许多有用的库和框架的基础。

此外,Stackless Python 的大部分功能都在 PyPy 中重新实现,PyPy 是另一个 Python 实现,我们将稍后介绍。 JPython Jython 是 Python 语言的 Java 实现。它将代码编译为 Java 字节代码,开发人员在 Python 模块中可以无缝使用 Java 类。

Jython 允许人们在复杂应用系统(例如 J2EE)中使用 Python 作为顶层脚本语言,它还将 Java 应用引入到 Python 中,一个很好的例子就是,在 Python 程序中可以使用 Apache Jackrabbit(这是一个基于 JCR 的文档仓库 API)。

Jython **新可用的版本是 Jython 2.7,对应的是 Python 2.7 版。它宣称几乎实现了 Python 所有的核心标准库,并使用相同的回归测试套件。Jython 3.x 版正在开发中。

Jython 与 CPython 实现的主要区别如下所示:
  • 真正的 Java 垃圾回收,而不是引用计数。
  • 没有全局解释器锁(GlobakInterpreter Lock,GIL),在多线程应用中可以充分利用多个内核。

这一语言实现的主要缺点是缺少对 C/Python 扩展 API 的支持,因此用 C 语言编写的 Python 扩展在 Jython 中无法运行。这种情况未来可能会发生改变,因为 Jython 3.x 计划支持 C/Python 扩展 API。

某些 Python Web 框架(例如 Pylons)被认为是促进 Jython 的开发,使其可用于 Java 世界。 IronPython IronPython 将 Python 引入 .NET 框架中,这个项目受到微软的支持,因为 IronPython 的主要开发人员都在微软工作。可以这么说,IronPython 是推广语言的一种重要实现。

除了 Java,.NET社区是**大的开发者社区之一。

值得一提的是,微软提供了一套免费开发工具,名为 PTVS(Python Tools for Visual Studio,用于Visual Studio 的 Python 工具),可以将 Visual Studio 转换为成熟的 Python IDE。这是作为 Visual Studio 的插件发布的,在 GitHub 可以找到其开源代码。

IronPython **新的稳定版本是 2.7.5,与 Python 2.7 兼容。与 Jython 类似,Python 3.x 的实现也在开发中,但还没有可用的稳定版本。

虽然 .NET 主要在微软 Windows 系统上运行,但是 IronPython 也可以在 Mac OS X 和 Linux 系统上运行,这一点要感谢 Mono,一个跨平台的开源 .NET 实现。

与 CPython 相比,IronPython 的主要区别或优点如下:
  • 与 Jython 类似,没有全局解释器锁(Global Interpreter Lock,GIL),在多线程应用中可以充分利用多个内核。
  • 用 C# 和其他 .NET 语言编写的代码可以轻松集成到 IronPython 中,反之亦然。
  • 通过 Silverlight,在所有主流 Web 浏览器中都可以运行。

说到弱点,IronPython 也与 Jython 非常类似,因为它也不支持 C/Python 扩展 API。对于想要使用主要基于 C 扩展的 Python 包(例如 NumPy)的开发人员来说,这一点很重要。

有一个叫作 ironclad 的项目,其目的是在 IronPython 中无缝使用这些扩展,其**新支持的版本是2.6,开发已经停止。 PyPy PyPy 可能是**令人兴奋的 Python 实现,因为其目标就是将 Python 重写为 Python。在 PyPy 中,Python 解释器本身是用 Python 编写的。

在 Python 的 CPython 实现中,有一个 C 代码层来实现具体细节。但在 PyPy 实现中,这个 C 代码层用 Python 完全重写。这样,你可以在代码运行期间改变解释器的行为,并实现 CPython 难以实现的代码模式。

目前 PyPy 的目的是与 Python 2.7 完全兼容,而 PyPy3 则与 Python 3.2.5 版兼容。

以前对 PyPy 感兴趣主要是理论上的原因,只有喜欢深入钻研语言细节的人才会对它感兴趣。PyPy 通常不用于生产环境,但这些年来这种状况己经发生改变,PyPy 通常比 CPython 实现要快得多。基于这一特性,使得越来越多的开发人员决定在生产环境中切换到 PyPy。

PyPy 与 CPython 实现的主要区别在于以下几个方面:
  • 使用垃圾回收,而不是引用计数。
  • 集成跟踪 JIT 编译器,可以显著提高性能。
  • 借鉴 Stackless Python 在应用层的无栈特性。

与几乎所有其他的 Python 实现类似,PyPy 也缺乏对 C/Python 扩展 API 的完全*方支持。但它至少通过 CPyExt 子系统为 C 扩展提供了某种程度的支持,虽然文档不完整,功能也尚未完善。此外,社区正在努力将 NumPy 迁移到 PyPy 中,因为这是**需要的功能。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/806057.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号