スライドショー

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

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

フクロウ

フクロウ

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説