Open6
Python風の言語からネイティブコードを生成するやつ
Pythonは速度がウリの言語ではない。しかし需要は高いので、「Python風の文法を持ち、高速なネイティブコードを出力できるコンパイラー・言語」が色々開発されている。
注目したい部分:
- 型ヒント
- Pythonは型のない言語だが、型ヒントを書けるようになっている(PEP 484)。Pythonとの互換性を目指している言語の場合は型ヒントを利用することが考えられる。
- 変数のスコープ
- Pythonの変数のスコープは基本的には関数スコープのみである(let以前のJavaScriptと同様。例外的に関数スコープ以外の変数を導入できる構文(リスト内包表記)があるのもJavaScriptと同様)。これは不便なので、Pythonと似ているが同一ではない言語を作る際にブロックスコープ等を導入することは十分考えられる。
- Pythonとの相互運用性
- Pythonの資産を利用できるか。ネイティブコード化されたコードをPythonから呼び出せるか。
- numpyを呼び出せるか。
Cython
PythonのC拡張をPython風の文法で書けるやつ。Pythonのスーパーセットを目指す。
Cを経由してコンパイルする。
歴史が古いせいか、PEP 484ではない独自の型宣言構文を持つ。PEP 484スタイルの型宣言もできる。
Numba
Python、特にNumPy利用コードに対するJITコンパイラー。Pythonのサブセットで記述する必要がある。
Pythonから透過的に呼び出せる。
マルチコア並列化、SIMD、GPUなどに対応する。
Nim
Python風の文法を持つが、別にPythonとの互換性・相互運用性をウリにしているわけではないはず。「Python風の文法を持ちネイティブコードを出力する」のでこのリストに加えた。
Codon
- exaloop/codon: A high-performance, zero-overhead, extensible Python compiler using LLVM
- Codon: A Compiler for High-Performance Pythonic Applications and DSLs | Proceedings of the 32nd ACM SIGPLAN International Conference on Compiler Construction
Pythonのサブセットをコンパイルする。独自のデコレーターにも対応している。
Mojo
LLVMやSwiftでお馴染み、Chris LattnerがCEOの会社が出してきた言語。
AIアクセラレーター(もちろんCPUも)を有効活用できることを目指すっぽい。
Python流の暗黙の関数スコープ変数の他に、let
と var
で変数を宣言できる。
mypyc
mypyで推論した型を使ってCコード(C拡張)を生成するらしい。
Pythonのサブセットをコンパイルする。固定長整数型が拡張として使える。
Nuitka
- Nuitka the Python Compiler — Nuitka the Python Compiler documentation
- Nuitka/Nuitka: Nuitka is a Python compiler written in Python. It's fully compatible with Python 2.6, 2.7, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, and 3.11. You feed it your Python app, it does a lot of clever things, and spits out an executable or extension module.
typed_python
Pythran
- Pythran — Pythran 0.13.1 documentation
- serge-sans-paille/pythran: Ahead of Time compiler for numeric kernels
Pythonのサブセットをコンパイルする。科学計算向き。
C++を経由するっぽい。