スライドショー

PythonとCPythonって何が違うの?言語仕様と実装の話

CPythonってPythonと何が違うの?
CPythonとCythonって何が違うの?

「○○による▲▲の実装」という文言を見て混乱している方、いるんじゃないでしょうか。

こんにちは、ライターのフクロウです。Pythonのインストラクターもやっています。

この記事では、PythonやCPython、Cythonなどの名前が似ていて混乱するようなPythonの用語について紹介してきます。実は全然難しい話ではないので、安心してください!

この記事はこんな人のために書きました。

  • Python, CPythonなどの単語が何を指しているのかちゃんと知りたい
  • 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

https://jython.github.io/

JythonはJavaを使って書かれたPython処理系です。

JVM(Java Virtual Machine)上に実装されたJavaなどの言語のメソッドが簡単に使えるのが売りです。Python2系が実装されています。また、JVM上にPython3系を実装したものとしてcafebabepyという別の処理系もあります。

これについては以下の記事で詳しく紹介しています。

JavaによるPython実装「Jython」初学者向けまとめ
更新日 : 2019年4月12日

IronPython

https://ironpython.net/

IronPythonはC#を使って書かれたPython処理系です。Microsoft .NET Frameworkの中で実装されているので、C#やVisual Basic .NETなどの言語のメソッドが簡単に使えます。

これについては以下の記事で詳しく紹介しています。

.NETで動くPython「IronPython」の初学者向けまとめ
更新日 : 2019年4月12日

PyPy

cython.org

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に入門する障壁が低くなりました。

問題にもよりますが、多くの場合必要な部分だけに型を付けることでかなりの高速化が期待できます。

これについては以下の記事で詳しく紹介しています。

Pythonを簡単高速化!Cythonの実力とは?
更新日 : 2019年5月13日

まとめ

この記事では、「CPythonはPythonのC言語による実装である」という文の意味を分かってもらえるように解説をしました。

PythonとCPythonの違い、分かってもらえたでしょうか。

侍で紹介したことがあるものに関しては、詳しい記事へのリンクも貼っておきました。更に勉強したい方はぜひ、読んでみてくださいね。

Python(CPython)はグルー言語と呼ばれるだけあって、様々な言語と連携することが得意です。「〜言語の関数が使いたいからこっちの実装を使ってみよう」というのはあまりないかもしれませんが、それぞれの実装にはそれらなりの利点や欠点があります。

例えばオリジナル実装のCPythonは利用者が多くて知見が見つけやすいですが、PyPyの方が高速です。でも実は起動が少し遅かったりします。いろいろ試してみるのが一番ですね。

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。