CPython, Pypy, MicroPython...還在傻傻分不清楚?
哈嘍大家好,我是咸魚。
當我們說 Python 時,通常指的是官方實現的 CPython,但還有很多比如 Pypy、Jython、MicroPython、Brython、RustPython 等 “python”。許多小伙伴看到這些帶 “python” 的概念可能一頭霧水,心想這跟我平時接觸到的 python 有什么區別嗎?這些到底是什么?
那么今天這篇文章將跟大家介紹相關的概念。
為什么會有這么多的 '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 的一個簡單應用:
Jython
Jython(Java Python 的縮寫)由 Java 編寫,運行在 Java 虛擬機上( Java Virtual Machine,JVM),它允許開發人員使用 Python 語言編寫和執行 Java 應用程序,可以在Jython中直接訪問Java類和方法,它提供了對 Java 類和庫的無縫集成,使得開發人員可以利用 Java 平臺的功能和生態系統。
Jython 廣泛應用于 Java 開發中,尤其是需要結合 Python 腳本和 Java 代碼的場景。
Jython 的一個簡單應用:
IronPython
IronPython 與 Jython 類似,它是 .NET 框架的 python 實現,它使用了微軟開發的動態語言運行時(DLR)和公共語言運行時(CLR),能夠與.NET框架無縫集成,開發人員可以在 .NET 平臺上編寫和執行 Python 代碼,利用 .NET 框架的功能和資源。
IronPython 的一個簡單應用:
MicroPython
根據字面意思可以得知—— MicroPython 是一種精簡版的 python 實現,它只包含了 python 標準庫中的一小部分并經過優化,以適應資源受限的環境,專為嵌入式系統和物聯網設備而設計。
MicroPython具有以下特點:
- 小巧
- 支持硬件交互
- 垃圾回收和內存管理
- 交互式開發
- 跨平臺支持
總結一下
- Python 實際上是一個語言規范,可以用不同的方式實現
- 為了能夠實現在特定的應用場景中具有不同的優勢和用途,開發人員用其他語言設計了不同的 python 實現
- CPython 是最常用的 Python 實現,它是官方用 C 編寫的 python 實現
- 除此之外還有像 jython、Pypy、Iron Python、Stackless Python 等