gpt4 book ai didi

CPython,Pypy,MicroPython...还在傻傻分不清楚?

转载 作者:我是一只小鸟 更新时间:2023-07-06 22:31:40 29 4
gpt4 key购买 nike

哈喽大家好,我是咸鱼 。

当我们说 Python 时,通常指的是官方实现的 CPython 。

但还有很多比如 Pypy、Jython、MicroPython、Brython、RustPython 等 “python” 。

许多小伙伴看到这些带 “python” 的概念可能一头雾水,心想这跟我平时接触到的 python 有什么区别吗?这些到底是什么 。

那么今天这篇文章将跟大家介绍相关的概念 。

参考链接:

What's the deal with CPython, Pypy, MicroPython, Jython...? (bitecode.dev) 。

为什么会有这么多的 “python”

在开始这篇文章之前,我们首先需要了解一个东西——python 是什么?

python 实际上是一个语言规范 ,这个规范定义了 Python 这门语言应该具备哪些语言要素,应当能完成什么样的任务 。

Python 语言规范可以用不同的方式实现,可以用 C 实现,也可以用 C++、Java、C#、JavaScript,甚至使用 Python 自己实现 。

python 最初是由龟哥(Guido van Rossum)用 C 编写的(CPython) 。

在 python 大获成功之后,许多其他的项目开始用其他的编程语言或者不同的目标去重新编写 python 。

那么这些项目中的每一个 python 实现都需要一个名字去区别于最初的那个 python(龟哥写的那个) 。

所以这就是 Pypy、MicroPython、Iron Python、Jython 和 Pyston 等丰富多彩的名字出现的原因 。

各种 "python" 介绍

CPython 。

当我们在讨论 python 的时候,99% 的情况下指的是 CPython,CPython 指的是用 C 编写的 pyhton 实现 。

CPython 是标准 python,可以将 Python 源码编译成 CPython 字节码,由虚拟机解释执行这些字节码 。

一般情况下,CPython 是最常用的 python 实现,大多数开发人员基本不会使用到 CPython 之外的 python 实现,甚至都不会去讨论 。

Pypy 。

Pypy 是最著名的 CPython 替代品,它是用 python 编写的(你没听错,用 python 编写的 python 实现) 。

实际上 Pypy 是由 RPython 实现的,RPython 是 Python 的一个子集 。

Pypy 使用即时编译(JIT)技术,可以在运行时将 Python 代码动态地编译成机器码,从而提供更高的执行速度 。

虽然 Pypy 执行速度要比 CPython 快,但是它的启动速度要比 CPython 慢,如果运行的时间足够长的话,就会变得越来越快 。

这使得它对于长时间运行的进程特别有用,例如守护进程、任务队列和web服务器 。

还有一个缺点就是 Pypy 与许多使用 C 编写的 Python 拓展库不兼容 。

虽然 Pypy 提供了一些与 CPython C API 兼容的接口,但并不能保证所有的 C 拓展都能无缝运行 。

Stackless Python 。

Stackless Python 是一种 Python 的变体,它是在 CPython 的基础上进行扩展和改进的版本 。

与传统的 CPython 相比,Stackless Python 提供了一些额外的特性,其中最重要的是支持协程(coroutine)和微线程(microthreads) 。

协程是一种轻量级的线程,它允许在同一个线程内的多个协程之间进行切换,从而实现并发执行 。

Stackless Python 的协程实现基于任务切换的概念,可以方便地编写异步、非阻塞的代码,提高程序的并发性和响应性 。

微线程是 Stackless Python 中的另一个概念,它是一种更轻量级的线程单位,可以在一个进程内并发地执行多个微线程 。

微线程与操作系统线程的切换开销较小,可以更高效地处理大量的并发任务 。

Stackless Python 并不是 Python 的官方版本,它是由 Christian Tismer 和其他贡献者开发和维护的一个项目 。

Stackless Python 的一个简单应用:

                        
                          import stackless

# 定义一个协程函数
def task(name):
    print("Running task:", name)

    # 模拟任务执行
    stackless.sleep(1)
    print("Task", name, "completed")

# 创建协程
task1 = stackless.tasklet(task)("Task 1")
task2 = stackless.tasklet(task)("Task 2")

# 运行协程调度器
stackless.run()

                        
                      

Jython 。

Jython(Java Python 的缩写)由 Java 编写,运行在 Java 虚拟机上( Java Virtual Machine,JVM) 。

它允许开发人员使用 Python 语言编写和执行 Java 应用程序,可以在Jython中直接访问Java类和方法 。

它提供了对 Java 类和库的无缝集成,使得开发人员可以利用 Java 平台的功能和生态系统 。

Jython 广泛应用于 Java 开发中,尤其是需要结合 Python 脚本和 Java 代码的场景 。

jython 的一个简单应用:

                        
                          # 导入Java类
from java.util import ArrayList

# 创建一个Java ArrayList对象
list = ArrayList()

# 向列表中添加元素
list.add("Hello")
list.add("World")

# 使用Python的for循环遍历列表
for item in list:
    print(item)

                        
                      

IronPython 。

IronPython 与 Jython 类似,它是 .NET 框架的 python 实现 。

它使用了微软开发的动态语言运行时(DLR)和公共语言运行时(CLR),能够与.NET框架无缝集成 。

开发人员可以在 .NET 平台上编写和执行 Python 代码,利用 .NET 框架的功能和资源 。

IronPython 的一个简单应用:

                        
                          import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Windows.Forms import Application, Form, Button
from System.Drawing import Point

# 创建窗体类
class MyForm(Form):
    def __init__(self):
        self.Text = "IronPython Form Example"
        self.button = Button()
        self.button.Text = "Click Me"
        self.button.Location = Point(50, 50)
        self.button.Click += self.button_Click
        self.Controls.Add(self.button)

    def button_Click(self, sender, event):
        self.button.Text = "Clicked!"

# 创建应用程序并运行窗体
Application.Run(MyForm())

                        
                      

MicroPython 。

根据字面意思可以得知—— MicroPython 是一种精简版的 python 实现 。

它只包含了 python 标准库中的一小部分并经过优化,以适应资源受限的环境,专为嵌入式系统和物联网设备而设计 。

MicroPython具有以下特点:

  • 小巧
  • 支持硬件交互
  • 垃圾回收和内存管理
  • 交互式开发
  • 跨平台支持

总结一下 。

  • Python 实际上是一个语言规范,可以用不同的方式实现 。

  • 为了能够实现在特定的应用场景中具有不同的优势和用途,开发人员用其他语言设计了不同的 python 实现 。

  • CPython 是最常用的 Python 实现,它是官方用 C 编写的 python 实现 。

  • 除此之外还有像 jython、Pypy、Iron Python、Stackless Python 等 。

最后此篇关于CPython,Pypy,MicroPython...还在傻傻分不清楚?的文章就讲到这里了,如果你想了解更多关于CPython,Pypy,MicroPython...还在傻傻分不清楚?的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com