Python is the programming language of masses and ranks among the top three most used languages. The easy and simple syntax of Python allows beginners and even kids to write code in a matter of days.
Over the last decade, developers have started to use Python for programming in many areas including data science, machine learning, web development, scientific computing, AI, the education sector, and even games development.
Before we get into details of Nuitka vs Cython vs PyPy, understand that Python is an interpreted language and quite slow when compared to compiled languages like C and C++. This makes Python programs inherently slow and limits Python use in CPU-intensive applications.
The other advantage of alternate compilers is that you can utilize existing libraries of other languages in Python code and compile it all together. We will get to more details shortly.
You can also check out the interpreter vs compiler debate to know more about the various steps required to produce desired output for compiled as well as for interpreted languages.
Nuitka vs Cython vs PyPy
While there are many popular Python compilers, this article will mainly focus on the capabilities and features of Nuitka, Cython, and PyPy.
We will also look at how these three compilers compare against each other, and the various use cases served by these compilers.
Let us start with Nuitka –
What is Nuitka?
Nuitka is written in Python itself, it takes Python module as input and provides c program as an output. The output is executed against libpython and other static c files and works as an extension module or an executable.
It is important to know that the Nuitka compiled output is highly optimized and faster than the raw python program, but it still doesn’t match the performance of executable created from a pure C code. Many developers claim to have gained 4x speed with Nuitka compiled programs when compared with basic Python code interpretation.
The best part of Nuitka is that it is compatible with almost all versions of Python including 3.3, 3.9, 2.6, 2.7, and more.
It is also very actively developed as of now and developers aim to transform Nuitka into a compiler that can provide native C performance out of the Python code.
Before we move on to PyPy, note that Nuitka is relatively new and still behind Cython and PyPy when it comes to user adoption and use, but it is gaining ground fast and seems very promising.
You can download the current stable release of Nuitka for various platforms and install/set up on Windows, Debian, Ubuntu, Mint, CentOS, macOS, Fedore, and many other platforms. You also need to have a C compiler installed on your machine.
Read more here – Nuitka
What is PyPy?
Like Nuitka, PyPy also supports both Python 2 and Python 3 specifications. PyPy is the most popular alternative to CPython which is the default Python compiler.
PyPy compiler was originally created to speed up Python execution and to do so, it utilizes Just in Time compilation (JIT). JIT-based compilers take raw code as input and turn the code to machine code prior to execution.
Execution speed is not the only advantage you get with PyPy, it also reduces memory usage and provides an option to write stackless applications as stackless python does.
It is also important to note that PyPy doesn’t give you a performance or memory utilization advantage on short-running processes. However, the performance gains are significantly noticeable when you have long-running processes.
The lack of performance with short running processes is mainly because JIT compilers take time to warm up and hence bring in inherent initialization overheads.
The same is true for memory usage as well, with small programs, the additional memory required by JIT overweighs any benefits gained from the execution of compiled code. Developers have experimented with PyPy to gain up to 15x performance when compared to raw python code execution.
Check below for Pypy Speed:
You can run PyPy on almost all popular operating systems including Linux, Mac OX X, Windows, FreeBSD, and OpenBSD.
Read more here about Python Pypy – PyPy
Nuitka vs PyPy
Both these are fundamentally different. Nuitka works more like a code transpiler and turns Python code into a c program which is turned into executable. On the other hand, PyPy uses original code at run time and compiles the code Just in Time (JIT).
Read more about Nuitka here – Nuitka
What is Cython?
Cython is a different animal altogether and often gets confused with the default python implementation – CPython. You might want to check out the popular Cython vs CPython review to understand the key differences between the two.
To clear the air a bit, Cython is a superset of Python and allows developers to call C/C++ functions and declare C types from Python code itself. This equips developers with capabilities to write C extensions for Python without the need to write much tougher C programs.
It is not surprising to see that many popular libraries like SciPy and Pandas are written in Cython.
Few additional notes about Cython are below –
- Write hybrid Cython applications by using both Python and C
- Is more of a programming language, based on Pyrex.
- Allows static type declarations in Python syntax itself
- Generates C code which can be complied into performant machine code using popular C compilers.
Cython seems to be growing by the day, developers intend to make it part of the official Python distribution by ensuring 100% compatibility with Python.
Read more about Cython here at – Cython
Nuitka vs Cython
Before I add few more lines here, note that it is not about which one is better since both serve different use cases. Cython has an ecosystem of its own while Nuitka is still catching up and may even grow beyond Cython. Talking about performance, Cython provides around 5x faster execution speed in comparison to Nuitka. This claim might vary with different pieces of code but is true for the most part if developers take full advantage of Cython features like using C types in Python code which is not possible in Nuitka.
Closing Thoughts: Nuitka vs Cython vs PyPy
Looking at the statistics, Cython seems to be the most widely used, but PyPy and Nuitka too are gaining ground with new features.
Also, while there are differences, all three still strive to provide 100% compatibility with python specifications and aim to become part of the standard python distribution.
This brings us to the end of the Nuitka vs Cython vs PyPy debate. Also, this comparison does not conclude any winner since all three are fundamentally different and try to solve different problems.
Also, none of these seems to be going obsolete anytime soon, so investing time would add to your knowledge. Do share your experience of working with these compilers with our readers via comments. And if you like the article, do share it on social media channels too. Thank you for reading!!
You might also like –