CPythonとCythonって何が違うの?
「○○による▲▲の実装」という文言を見て混乱している方、いるんじゃないでしょうか。
こんにちは、ライターのフクロウです。Pythonのインストラクターもやっています。
この記事では、PythonやCPython、Cythonなどの名前が似ていて混乱するようなPythonの用語について紹介してきます。実は全然難しい話ではないので、安心してください!
この記事はこんな人のために書きました。
- Python, CPythonなどの単語が何を指しているのかちゃんと知りたい
- Pythonのいろんな実装に興味がある
Pythonの用語についてわかりやすく解説していますので、ぜひ参考にしてください。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
PythonとCPythonという言葉の意味
Pythonの勉強を始めると、CPythonとかCythonとか、いろんな「Pythonっぽい名前」を目にすると思います。この章ではこれらが何なのかをまとめていきます。
結論から書くと、「Pythonというプログラミング言語(言語仕様)があり、CPythonというのはそのプログラミング言語でもっともよく使われている実装」です。
Pythonもメモ帳アプリやゲームアプリと同じくソフトウェアです。なので同じ(似たような)動作をするソフトウェアを別の言語で書くことが可能です。
つまりPythonというプログラミング言語があり、それをいろんな言語(いろんな方法)で実装したものが処理系だと言えます。
いろんなPython実装
CPython
CPythonはC言語を使って書かれたPython処理系です。
最もよく使われているPython実装であり、オリジナルのPython処理系でもあります。一般的には「Python」と言ったらこれのことです。
C言語で書かれているため、様々な言語の資産を使うことが可能です。Pythonのライブラリとして公開されているものにも、実はC言語やFortran、C++などの言語で実装されているものが数多くあります。
Jython
JythonはJavaを使って書かれたPython処理系です。
JVM(Java Virtual Machine)上に実装されたJavaなどの言語のメソッドが簡単に使えるのが売りです。Python2系が実装されています。また、JVM上にPython3系を実装したものとしてcafebabepyという別の処理系もあります。
これについては以下の記事で詳しく紹介しています。
IronPython
IronPythonはC#を使って書かれたPython処理系です。Microsoft .NET Frameworkの中で実装されているので、C#やVisual Basic .NETなどの言語のメソッドが簡単に使えます。
これについては以下の記事で詳しく紹介しています。
PyPy
PyPyは上の2つと比べて少し説明の難しい処理系です。
まず、RPythonというCPythonのサブセットがあります。これはつまり制限付きのCPythonで実装されたPython処理系です。そしてそのRPythonを使って実装されたのがPyPyになります。
PyPyのプログラムはJust-in-Time(JIT)コンパイルという、実行時にコードのチャンクを実行時に逐一コンパイルするシステムを使って高速化されています。JITコンパイルは何度も使われるコードを最適化するため、Pythonのコードでもかなり早く動かすことができます。
(厳密に言うと、PyPyで使われているのはMeta-Tracing JITと呼ばれるものです。これについてはかなり発展的な話題なので、興味がある方は調べてみてください。)
PythonのスーパーセットCython
Cythonは今までとは少し毛色の違うものです。これはPythonに似た文法のプログラミング言語をC/C++にコンパイルして高速化します。
具体的には、Pythonに型情報を追記することができる様になっています。CythonはPythonに似た文法ではあるのですが、型に慣れ親しんでいないPythonユーザーの中には難しいと感じる人もいたようです。
ですが、最近はPythonにも型ヒントのような型情報をアノテーションする機能が実装されました。これによりCythonに入門する障壁が低くなりました。
問題にもよりますが、多くの場合必要な部分だけに型を付けることでかなりの高速化が期待できます。
これについては以下の記事で詳しく紹介しています。
まとめ
この記事では、「CPythonはPythonのC言語による実装である」という文の意味を分かってもらえるように解説をしました。
PythonとCPythonの違い、分かってもらえたでしょうか。
侍で紹介したことがあるものに関しては、詳しい記事へのリンクも貼っておきました。更に勉強したい方はぜひ、読んでみてくださいね。
Python(CPython)はグルー言語と呼ばれるだけあって、様々な言語と連携することが得意です。「〜言語の関数が使いたいからこっちの実装を使ってみよう」というのはあまりないかもしれませんが、それぞれの実装にはそれらなりの利点や欠点があります。
例えばオリジナル実装のCPythonは利用者が多くて知見が見つけやすいですが、PyPyの方が高速です。でも実は起動が少し遅かったりします。いろいろ試してみるのが一番ですね。