Status of each Python processing system in 2020

Support for Python 2 series ended on January 1, 2020 (except for some long-term support environments). I think Python has completely moved to the Python 3 era and is entering a stable period. However, Python is not just CPython. What is the current state of other processing systems such as Jython and IronPython? I was curious, so I did a little research.

CPython

python-logo.png

Official site Repository

Needless to say, it is the original and most famous Python processing system. It is implemented in C language.

End of Support (EOL) for Python 2 series on January 1, 2020. The latest version, 3.8.5, was released on July 21, 2020. The other 3.7 series released 3.7.8 and the 3.6 series released 3.6.11 on June 28th. The next version, 3.9.0, is currently in the final beta version (b5), and will be released on October 5th after about two months of RC (Release Candidate) (Release Candidate). PEP596). Click here if you are interested in the new features of 3.9 ⇒ New features of Python 3.9 (Summary)

PyPy

bitmap.png

Official Site Repository

Most of them are Python implementations implemented in Pure Python, and are characterized by the fact that they often run faster than CPython due to the JIT (Just In Time) compiler (not always faster).

The latest version is version 7.3.1 released on April 5, 2020. Two versions, equivalent to CPython 3.6 and equivalent to CPython 2.7, are available. As for the current trend, the development branch equivalent to CPython 3.7 has been cut and development is continuing, but the release is undecided.

Jython

jython.png

Official site Repository

It is a Python processing system that is implemented in Java and can use classes such as JDK.

Version 2.7.0 equivalent to CPython 2.7 was released in March 2015 and was updated to version 2.7.2 on March 21, 2020. However, regarding support for version 3 series, although a dedicated repository is available, there have been no commits for the past three years. Major contributor Jeff Allen said that it is necessary to support new features of Python 3 and to design and implement new ones in consideration of the old Jython implementation The Very Slow Jython Project We have launched (: //the-very-slow-jython-project.readthedocs.io/en/latest/index.html) and are trying to sort out the issues. As the name implies, this is considered a time-consuming endeavor.

Graal Python

graal.png

Repository

GraalVM is an emerging Python processing system that runs on a Java VM. Our goal is to be able to use the Python 3.7 grammar and to be able to use SciPy and its associated libraries. At the moment it is specified as ʻexperimental`. It also considers Compatibility with Jython. Version 20.1.0 for GraalVM 20 was released on March 20, 2020, and version 19.3.3 for GraalVM 19 was released on August 5, 2020. It means that it implements the grammar equivalent to Python 3.8.2. There is also information that JIT works because it runs on the JVM and is faster than CPython or Jython. It is a processing system that I would like to expect for future development.

IronPython

ironpython.png

Official site Repository

A Python implementation that is implemented in C # and can use .NET Framework libraries.

The latest version is version 2.7.10 released on April 27, 2020. It supports functions equivalent to CPython 2.7. A dedicated repository has been created for support for version 3 series, but it clearly states that "it is not yet ready for use". There is a list of new features in Python 3 in the issue, but the amount of work is so huge that it seems that the road to release is still far away.

Brython

brython.png

Official site Repository

It is a Python processing system using Javascript, and you can execute Python code on the browser. The size of the interpreter (brython.js) is about 700KB (excluding the library).

The latest version was released on March 20, 2020, version 3.8.9, which implements CPython's 3.8 equivalent functionality (in my environment [walrus operator](https: // www. The operation of python.org/dev/peps/pep-0572/) has been confirmed). It can be said that it is a Python processing project with momentum because it has a fast follow-up speed to the original family (CPython) and commits stably.

MicroPython

micropython.png

Official site Repository

A subset implementation of Python intended to work in an embedded environment. The minimum configuration is said to work with 128KB of ROM and 8KB of RAM, and can be run on an ESP32-equipped board or a dedicated pyboard. There is also a port to PIC16 and Javascript.

The latest version is version 1.12 released on December 20, 2019. This is a CPython 3.4-equivalent feature with some 3.5 features (async / await) added. A huge number of issues have been submitted regarding the support for various architectures and peripherals, and active activities continue.

Numba

bitmap.png

Official site Repository

Numba is a JIT compiler for accelerating Python code. In particular, optimization for code using NumPy arrays and functions is considered.

The latest version is version 0.50.1 released on June 24, 2020. CPython supports 3.6 to 3.8 and NumPy supports 1.15 to 1.18. With over 1000 open issues, we can see the high expectations of people for the project (and lack of human resources). On average, about 4 to 50 commits are made every week, and it can be said that it is a very active processing system.

Cython

cython.png

Official site Repository

Cython is an unusual Python processing system. Compiles the source code of your own Cython extension language, which is similar to the Python grammar, and generates a library for Python. This allows you to create fast libraries with less effort. The latest version of the stabilizer was released on July 9, 2020, 0.29.21. And on July 31, 2020, the alpha preview version 3.0.0alpha6 of 3.0.0, which will be the first major version upgrade, has been released. It contains many backwards incompatible changes and the Python 3 syntax is the default.

RustPython

rustpython.png

Official site Repository

It is a Python processing system implemented in Rust that started in 2018, and it is also possible to embed Python on the Rust application, compile Python code into WebAssembly, and run it on the browser. The latest version is version 0.12 released on June 22, 2020. Currently, at least Python 3.5 equivalent functions are implemented. It has been confirmed that the _separation of numeric literals such as f-string and 1_000_000, which is a 3.6 function, is implemented in my environment. The {var =} notation in 3.8 was not implemented. It's a processing system that I'm looking forward to developing in the future.

Nuitka

nuitka.png

Official site Repository

Nuitka is a Python compiler that can compile Python source code to generate executable files (.exe, etc.) and library files for Python (* .pyd, * .so). PyInstaller and py2exe are famous in this area, but they are the opponents. The reading of the name seems to be close to Nuitika. The name was taken from Annuikta, the name of the wife of the creator, Kay Hayen. The latest stable version is version 0.6.8.4 released on June 6, 2020. The Python versions to be compiled are 2.6-2.7 and 3.3-3.8. I just tried it for a while, but I was able to easily create an executable file of my own program (including C ++ code). I was surprised that the size was smaller than I expected.

Pyodide

(No logo was found)

Repository

A Python processing system specialized for the Scientific direction. Using WebAssembly technology, you can use the Python interpreter and libraries such as NumPy, Pandas, Matplotlib, SciPy, SymPy on your browser. There is a Jupyter Notebook-like demo. The latest version is version 0.15.0 released on March 21, 2020. At this point, it has the function equivalent to CPython 3.7.4. The next version, 0.16, is aiming for 3.8.2 (the release date is undecided, but it's not too far from the latest commits). By the way, the name comes from Py + Iodide (iodide, to put it simply, the iodine version of the oxide). Naming for being related to the Iodide Project.

Change log

If we find any interesting changes during 2020, we will update them from time to time.

--August 5, 2020 -Added Cython commented by @ superrino130 --August 7, 2020 --Added RustPython commented by @Piroro --August 9, 2020 -Added Nuitka commented by @ eleven-junichi2 -Added Pyodide commented by @sigmaponta

in conclusion

There are differences in the speed of major processing systems, but it seems that development is continuing for all of them. Jython's support for Python 3 seems to be in a rather difficult situation.

There are various processing systems, but since the development of the head family progresses at a tremendous speed, we can get a glimpse of the current situation where other processing systems are devoting considerable resources to respond to them. On top of that, we have to refine the unique characteristics of the processing system, so I feel that the developers are really thankful.

If you know of other interesting processing systems, please let us know in the comments.

Recommended Posts

Status of each Python processing system in 2020
File processing in Python
Multithreaded processing in python
Queue processing in Python
Various processing of Python
Match the distribution of each group in Python
View the result of geometry processing in Python
UTF8 text processing in python
Full-width and half-width processing of CSV data in Python
Asynchronous processing (threading) in python
Equivalence of objects in Python
Python: Deep learning in natural language processing: Implementation of answer sentence selection system
Post processing of python (NG)
Image Processing Collection in Python
Implementation of quicksort in Python
Using Python mode in Processing
Check the processing time and the number of calls for each process in python (cProfile)
Check the operation of Python for .NET in each environment
Make a table of multiplication of each element in a spreadsheet (Python)
Processing of python3 that seems to be usable in paiza
Get the index of each element of the confusion matrix in Python
Pixel manipulation of images in Python
100 Language Processing Knock Chapter 1 in Python
Division of timedelta in Python 2.7 series
Handling of JSON files in Python
Implementation of life game in Python
Waveform display of audio in Python
Basic grammar of Python3 system (dictionary)
Law of large numbers in python
Implementation of original sorting in Python
Reversible scrambling of integers in Python
A function that measures the processing time of a method in python
Basics of binarized image processing with Python
Conversion of string <-> date (date, datetime) in Python
Check the behavior of destructor in Python
(Bad) practice of using this in Python
General Theory of Relativity in Python: Introduction
Output tree structure of files in Python
(Java, JavaScript, Python) Comparison of string processing
Display a list of alphabets in Python 3
Comparison of Japanese conversion module in Python3
Grayscale by matrix-Reinventor of Python image processing-
The result of installing python in Anaconda
Gang of Four (GoF) Patterns in Python
The basics of running NoxPlayer in Python
Basic grammar of Python3 system (character string)
Bulk replacement of strings in Python arrays
Project Euler # 16 "Sum of Powers" in Python
Drawing with Matrix-Reinventor of Python Image Processing-
Easy image processing in Python with Pillow
Summary of built-in methods in Python list
Non-logical operator usage of or in python
The story of blackjack A processing (python)
Memo of troubles about coexistence of Python 2/3 system
Practical example of Hexagonal Architecture in Python
Basic grammar of Python3 system (included notation)
Duplicate prohibition processing in GAE / Python Datastore
Project Euler # 17 "Number of Characters" in Python
Double pendulum equation of motion in python
Get rid of DICOM images in Python
Matrix Convolution Filtering-Reinventor of Python Image Processing-