そうだ! EuroPython 2011へ行こう

#3 PyPyについての講演,ハンズオン,スプリント

この記事を読むのに必要な時間:およそ 5 分

前回に続き,Pythonそのものの講演について紹介したいと思います。今回は,PyPyというPythonで実装されたPythonの講演を紹介します。

本カンファレンスに一緒に参加した池さん@rokujyouhitomaPyPyというプロジェクトにとても興味をもたれたという話を受け,以下のPyPyの講演のレポートは池さんに執筆していただきました。

PyPy(執筆:池さん)

PyPy IN PRODUCTION

PyPyのセッションは,メインコミッター,設計者であるAntonio Cuni氏とArmin Rigo氏が講演されました。

Armin Rigo
大学にてプログラミング言語および言語実装を研究。PyPyプロジェクトのリーダー。CPythonのJITコンパイラであるPsycoの作者。Antonio Cuni氏らとPyPyに関する論文を共著。
Antonio Cuni
2006年よりPyPyのメインコミッター。CLI/.NET,JITコンパイラの開発者。PyPyの開発・研究により2010年にPhDを取得。pdb++の作者/マネージャ,virtualenvのコントリビュータ。現在はOpenEndに雇われておりPyPyのフルタイム開発者。

左: Antonio Cuni氏 右:Armin Rigo氏

左: Antonio Cuni氏 右:Armin Rigo氏

PyPyって何?

最初にPyPyについて紹介します。

PyPyプロジェクトは2003年にスタートし,EUなどから支援を受けたOSSプロジェクトです。EUからは2004年12月から2007年3月の期間,資金援助を受けました。

PyPyには大きく2つの使命があります。

1つ目は動的言語を作成するためのフレームワークとしてのPyPyです。

これは言語仕様と実装を明確に分離し,動的言語の共通的な変換のためによりユーザの実装を助けるフレームワークです。PyPyチームではRPython Toolchainと呼んでいます。

2つ目は,Python実装としてのPyPyです。

これはRPython Toolchainを使って,Python言語準拠の実装を新しく先進的な高レベルの機能を盛り込み,低レベルな変換を行うことなく,柔軟かつ処理速度が高速な実装を目指しています。

これらの2つから,PyPyは動的言語の実装のためのJust-in-Timeコンパイラを自動生成することを実現しています。

また,歴史的にユーザーの管理範囲外であって,

  • メモリとスレッドモデル
  • ガーベージコレクションの戦略
  • 最適化の適用
  • そもそもJITコンパイラを持っているかどうか

など,動的言語実装時における実装決定へのミックス&マッチ手法を可能にします。

PyPyはさらにその先の目標を設定しています。伝統的に言語処理系は,C/POSIX,Java,C#ののようなターゲットプラットフォームの言語で書かれてきました。

PyPyはアプリケーションと各ターゲット環境間の基本的なマッピングを提供し,.NETフレームワークやJava仮想環境のように言語実装をサポートするための標準化することによって,より高いレベルの機能を提供することが可能になることを目指しています。

PyPy 1.5

PyPy1.5は2011年4月30日にリリースされました。1.5ではCPythonの2.6と2.7.1の標準ライブラリを含むすべての機能をサポートしました。PyPyはCPythonと互換性を持った実装処理系です。

また,CPython拡張モジュールのAPIも修正され,様々なライブラリが利用可能になりました。速度は平均して25%程度のパフォーマンスが改善されました。

PyPyの今後

PyPyは大規模な並列処理のためにマイクロスレッドをサポートしたStacklessバージョンも別にあります。StacklessバージョンとJITコンパイラの統合が現在進行中です。

cpyextはCPythonのC-API互換性レイヤーです。現状cpyextはどんな場面でもちゃんと動くというわけではありませんが,wxPython,PIL,cx_Oracle,mysqldb,pycairoなどでは問題なく動きます。さらなるサポート領域を広げるために開発が進行中です。

メモリ消費が少ないコンパクトなインスタンス(例えば__slots__など)を調査しており,将来使えるようになる予定です。

処理速度

次のグラフは,CPythonを1.00とした場合のPyPyの速度を表しています。Python処理系の実装としての速度は,ほとんどの処理においてCPythonより速いです。

PyPy VS CPython

PyPy VS CPython

次のグラフは,PyPyのコードがリポジトリにコミットされる度に,Djangoの実行速度が改善されているのを示しています。PyPyは頻繁にコミットが行われており,速度が日増しによくなっています。

昨年のPyPyによるDjangoの速度

昨年のPyPyによるDjangoの速度

次のグラフは,先程の表にCPython2.6.3を加え比較出来るようにしたものです。CPython2.6.3よりもDjangoの処理速度が速いのが読み取れます。

昨年のPyPy VS CPython

昨年のPyPy VS CPython

処理速度に関しての最新の情報はpypy.orgのSPEED CENTER Time normalized to cpython 2.6.2で公開されています。

PyPy活用事例

PyPyが実際に使われている事例を紹介します。

1つ目の事例は,LWNのgitdmです。gitdmはLinuxカーネルの開発者の動向を追うために,gitのログデータを読み込み開発者のつながり,雇用主の特定,パッチコードについてなどの情報をデータマイニングするツールです。

gitdmはCPythonでは63秒かかるのに対して,PyPyでは21秒と,より早い結果となりました。

2つ目の事例は,MyHDLです。MyHDLはPythonを使ったハードウェア記述するDSL言語と検証言語を提供しているライブラリです。MyHDLのサイトによれば,PyPyインタプリタを使用することによって,シミュレーションプログラムは6?12倍高速に実行されたとのことです。

3つ目の事例は,PyPyプロジェクト自体です。PyPyは巨大で複雑なアーキテクチャを持ったソフトウェアです。まさに,PyPyのロゴ通り,自分の尾を飲み込み蛇(Ouroboros,ウロボロス)ですね。

Ouroboros

Ouroboros

他にも様々な場面でPyPyが活用されていますが,次の事例は,是非ともみなさんが作って下さい!PyPyを使う価値があるかもしれません。

著者プロフィール

森本哲也(もりもとてつや)

一介のプログラマ。

自分で設計して,自分で開発して,自分で直せるような独立したプログラマを目指している。OSSコミュニティのゆるい人のつながりが性にあっていてPythonプログラミングが好き。共訳書に『エキスパート Pythonプログラミング』(アスキーメディアワークス)がある。

Twitter:@t2y

ブログ:http://d.hatena.ne.jp/t2y-1979/


池徹(いけとおる)

プログラミング言語全般を好み,特にJavaScriptとPythonを愛する。好奇心旺盛で学ぶことは大好きであるが,最近の関心はもっぱらPyPy。休日の楽しみは読書に,美術館巡り。現在はオーストラリアの会社で開発をしつつ忍者の肩書きを授かる。

Twitter:http://twitter.com/#!/rokujyouhitoma
ブログ:http://d.hatena.ne.jp/rokujyouhitoma

コメント

コメントの記入