Cython とは

[Cython] は、 Python をベースにしたプログラミング言語です。Cythonでは、 静的なデータ型の宣言を行えるように、文法をいくつか追加しています。 高水準、オブジェクト指向、機能性、動的プログラミングといった特徴を備え た [Python] のスーパーセットを目指しています。 Cython のソースコード は最適化済みの C/C++ コードに翻訳されて、 Python の拡張モジュールとし てコンパイルされます。 そのため、とても高速に実行できるプログラムや、外部の C ライブラリをがっ ちり組み込んだプログラムを、 Python おなじみの高い生産性を失わずに実現 できるのです。

Python の実行環境として第一に挙げられるのは、 C で実装された、いわゆる CPython です。その他にも、 Java (Jython [Jython])、 C# (IronPython [IronPython])、 Python 自身 (PyPy [PyPy]) による実装があります。 CPython は C で書かれているので、C 言語のインタフェースを持つ外部のラ イブラリをラップするのに向いています。 とはいえ、 とりわけ Python のような高水準の言語に長けたプログラマにとっ ては、あたかも一字一字活字を配していくような作業を強いられる C 言語で 「つなぎ(glue)」のコードを書くのはそう楽な仕事ではありません。

Cython は、知る人ぞ知る [Pyrex] の手法にもとづいて、 Python コードを 等価な C のコードに翻訳するソースコードコンパイラによってこの問題を解 決します。生成されたコードは CPython ランタイムの中で実行されますが、 その実行速度はコンパイルされた C コードのもので、その上 C ライブラリを 直接呼び出せます。 同時に、 Cython のコードは Python のソースコードへのインタフェースも備 えていて、Python コードから直接利用できます。 この両面性によって、 Cython には大きな二つのユースケースが生まれます: 一つは高速なバイナリ型モジュールによる CPython インタプリタの拡張、も う一つは Python コードと外部 C ライブラリのつなぎ込みです。

Cython は (ほとんどの) Python コードをコンパイルできます。生成された C のコードは、Python と C の両方に静的なデータ型宣言がなされているため、 たいていの場合かなり (時によっては劇的に) 実行速度が向上します。このこ とから、 Cython は、Python コードの一部に C のセマンティクスを持ち込ん で、きわめて効率的な C のコードに変換するのにも使えます。 つまり、Cython の型宣言は二つの目的に使えるといえます: 一つは動的な Python セマンティクスのコードを、静的で高速な C のセマンティクスに移行 する目的、そしてもうひとつは外部ライブラリで定義されているデータ型を直 接操作する目的です。こうして、 Cython は、Python と C の二つの世界を結 びつけ、きわめて広範囲に適用可能なプログラミング言語に仕立て上げている のです。

[Cython]G. Ewing, R. W. Bradshaw, S. Behnel, D. S. Seljebotn et al., The Cython compiler, http://cython.org.
[IronPython]Jim Hugunin et al., http://www.codeplex.com/IronPython.
[Jython]J. Huginin, B. Warsaw, F. Bock, et al., Jython: Python for the Java platform, http://www.jython.org/
[PyPy]The PyPy Group, PyPy: a Python implementation written in Python, http://codespeak.net/pypy.
[Pyrex]G. Ewing, Pyrex: C-Extensions for Python, http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
[Python]G. van Rossum et al., The Python programming language, http://python.org.

Previous topic

Cython 入門

Next topic

Cython のインストール

This Page