PyPy 紹介

15,649 views

Published on

社内勉強会で PyPy の紹介をしたスライド

Published in: Technology
0 Comments
37 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
15,649
On SlideShare
0
From Embeds
0
Number of Embeds
1,396
Actions
Shares
0
Downloads
56
Comments
0
Likes
37
Embeds 0
No embeds

No notes for slide

PyPy 紹介

  1. 1. - Python による Python 実装 - 2011/11/11 pypy-ja 闇の軍団 団員 しょうま(@shomah4a)
  2. 2. やること● PyPy ってなに?● Python 処理系としての PyPy● 歴史的なお話● もう一つの PyPy● RPython ツールチェイン● 言語を作るには● 闇の軍団について
  3. 3. お前、誰よ● しょうま(@shomah4a)● Java の会社勤務 ● ていうかその会社の社内勉強会 ● 仕事では今は Python 使ってます。と思ったらそうでもなく なった ● Java とかよくわかりません● PyPy を触ってみたきっかけは、俺言語が作りたかったか ら● PyPy 闇の軍団の団員らしい
  4. 4. PyPy ってなに?
  5. 5. の前に
  6. 6. Python 使ったことある人!
  7. 7. PyPy がどんなものか知っている人!
  8. 8. PyPy をビルドしたことある人!
  9. 9. PyPy で処理系を作ったことがある人!
  10. 10. PyPy とは● http://pypy.org/● Python で作られた Python の処理系● 速いよ! ● JIT が載っていてすごく速い ● CPython の五倍くらいらしい ● ベンチマークについてはここらへんに kwsk 載っているので参 照 http://speed.pypy.org/
  11. 11. 互換性とか● 現在は Python 2.7.1 互換の処理系 ● 開発としては 3.x 対応を進めている ● 3.x 対応に向けた開発のための資金出資者募集中!!● C 拡張もそれなりに使えるけど、まだまだ ● ctypes を実装することで読めるようになっているとか ● http://readthedocs.org/docs/pypy/en/latest/extending.ht
  12. 12. CPython との違い● Garbage Collection が違う● CPython ● 参照カウント ● Mark & Sweep (循環参照の解放に使われる)● PyPy ● 標準は Minimark GC ● その他色々選べる ● http://readthedocs.org/docs/pypy/en/latest/garbage_collec● 細かな違いはここら辺 http://readthedocs.org/docs/pypy/en/latest/cpython_
  13. 13. ここまでが一般的に知られる PyPy
  14. 14. PyPy はこれだけじゃないんだぜ?
  15. 15. やること● PyPy ってなに?● Python 処理系としての PyPy● 歴史的なお話● もう一つの PyPy● RPython ツールチェイン● 言語を作るには● 闇の軍団について
  16. 16. 歴史的なお話
  17. 17. Psyco● さいこ● http://psyco.sourceforge.net/● PyPy の前身となるプロジェクト● PyPI で配布されているPython モジュール ● インポートすると JIT が使える ● x86 のみ対応● メインコミッターは Armin Rigo 氏
  18. 18. Armin Rngo
  19. 19. アーミン リーゴ
  20. 20. あーみん りーご
  21. 21. あーみん!
  22. 22. きっとこんな人に違いない!
  23. 23. と思って画像を探しました…
  24. 24. あみちゃんだと思った?
  25. 25. 残念! ヒゲのイケメンでした!
  26. 26. Rigo氏は重要なので何度も言いました
  27. 27. プロジェクトとしての PyPy● 最初のリリース 1.0 は 2007 年半ば● 最新版は 1.6 ● もうすぐ 1.7 が出るみたい● メインコミッターはもちろんあーみん Armin Rigo 氏● Psyco の後継プロジェクト ● JITの最適化の研究(とか ● 言語そのものの研究 ● アカデミック色が強い
  28. 28. 類似のプロジェクト● Ruby の Rubinius ● これも速いらしい ● すごいね!
  29. 29. PyPy の歴史● 最初は CPython と比べて 2000倍くらい遅かったらし い● 色々研究した結果● CPython の 5倍程度速くなりました!
  30. 30. やること● PyPy ってなに?● Python 処理系としての PyPy● 歴史的なお話● もう一つの PyPy● RPython ツールチェイン● 言語を作るには● 闇の軍団について
  31. 31. もう一つの PyPy
  32. 32. 俺言語を作りたいけどCとかわかんないし…
  33. 33. C++ は俺の嫁だし可愛いんだけど、 ホント可愛いんだけど難しいし…
  34. 34. JVM で動く言語を作りたいけどJava とかいう言語はちょっと…!
  35. 35. ( ゚∀゚)o彡゜ PyPy!! PyPy!!( ゚∀゚)o彡゜ PyPy!! PyPy!!( ゚∀゚)o彡゜ PyPy!! PyPy!!( ゚∀゚)o彡゜ PyPy!! PyPy!!( ゚∀゚)o彡゜ PyPy!! PyPy!!( ゚∀゚)o彡゜ PyPy!! PyPy!!
  36. 36. なんて言っているそこのアナタ!
  37. 37. PyPy で言語処理系を作りませんか!!
  38. 38. 作りましょう● RPython で処理系を書きます● RPython Toolchain でバイナリを吐きます● できあがり● わぁい!
  39. 39. PyPy とは?● Python で Python を実装する際に使っているライブラ リおよびツール群● Python のライブラリ ● EBNF, ctypes など● コンパイラ ● 型推論とか● 処理系作成 ● 基本的データ型(リストとか辞書とか) ● GC
  40. 40. PyPy とは● 動的言語の処理系を作るための汎用フレームワーク!● しかもフルスタックで Python なので書きやすい! ● C みたいにメモリ確保とかめんどくさい部分は PyPy が引き 受けてくれたり ● dict, list みたいなリッチな組み込み型が使えたり
  41. 41. やること● PyPy ってなに?● Python 処理系としての PyPy● 歴史的なお話● もう一つの PyPy● RPython ツールチェイン● 言語を作るには● 闇の軍団について
  42. 42. RPython Toolchain
  43. 43. RPython Toolchain とは● RPython という言語を処理するためのツールチェイン● FlowGraph, 型アノテーション, RTyper, Optimize などの 工程を経て、様々なバックエンドに出力できる● バックエンドは C Binary, CLI, Python, LLVM, JVM な ど様々● kwsk はここらへん http://readthedocs.org/docs/pypy/en/latest/transla
  44. 44. RPython Toolchain● 処理系としての PyPy は RPython Toolchain を使って 作られている● このツールチェインは Python を作るためだけのものでは なく、汎用的に使えるので、これで俺言語とか作れちゃ うよ!
  45. 45. 例えばこんな言語: Python 以外● Prolog● Smalltalk● JavaScript● Io● Scheme● Brainf*ck● Grass● Gameboy Emulator
  46. 46. RPython とは● Restricted Python の略らしい● Python をバイナリコンパイルするためにいくつかの制限 を設けたもの● 型システム含む動的な部分を制限し、静的型っぽく なっている● Python のサブセットなので、 RPython は Python の処 理系でそのまま動く
  47. 47. RPython の制限● 変数は一つの型しか扱えない ● 継承関係にあればアップキャストできる● モジュールグローバル変数はすべて定数として扱われる ● 書き換えようとするとエラー● for ループは組み込み型のみ● 動的関数定義や動的クラス定義は無理● ジェネレータはサポートしない
  48. 48. RPython の制限● 文字列型のメソッドは大体使えるけど使えないのもある● リストは一つの型しか扱えない ● 辞書なんかも同様● クラス周り ● 後付のメソッドは不可 ● 単一継承は完全サポート ● 単純な mixin はサポート ● クラスはもちろんファーストクラスオブジェクト
  49. 49. RPython の制限● Python の動的な部分が結構制限されて、静的型言 語っぽくなる● とはいえ Python らしい記述力は十分発揮できる● 静的型っぽいとはいえ、普通にプログラムを書いていれ ば、そんなにおかしな設計をしない限り動的型言語でも 型を意識して静的型っぽくなるでしょう?● 詳しい仕様はこちら: http://readthedocs.org/docs/pypy/en/latest/coding-g
  50. 50. RPython Toolchain の工程● RPython● FlowGraph● Type Annotation● RTyper● Optimize (Optional)● Transform● Output (C Binary, CLI, LLVM, etc...)
  51. 51. FlowGraph● 平たくいえばフローチャート● RPython から分岐・繰り返し・関数などの処理の流れ を取り出し、データ構造にしたもの● 後の工程ではこれに対して色々やる
  52. 52. Annotation● 型アノテーション● FlowGraph を辿って、型を全部チェックしていく ● みんな大好き型推論 ● 静的解析かも● 型チェックしてくれてエラーも出してくれるし素敵!● Erlang の Dializer みたいなやつ?● このあたりは @cocoatomo が研究中
  53. 53. RTyper● Annotator による型とバックエンドの型システムを繋ぐ もの● Annotator の High-level な型からバックエンドの Low- level な型に変換する● signed int とか unsigned int とか● リストじゃなくて配列とか● ドキュメントはこちら http://codespeak.net/pypy/dist/pypy/doc/rtyper.htm
  54. 54. RTyper で使われる型システム● lltypesystem ● C っぽいモデル ● 低レベルな操作に変換される ● メモリ操作とかポインタとか ● C Backend ● LLVM Backend
  55. 55. RTyper で使われる型システム● ootypesystem ● High-level な型システムを持つ VM 向け ● CLI ● JVM ● Squeak(?)
  56. 56. Optimize● Optimize ● 処理の最適化 ● 関数のインライン展開 ● Python で書いた場合のメモリ確保の回数を減らす
  57. 57. Transform● Transform ● FlowGraph の構造を弄るイメージ ● Stackless 変換 ● CPS 変換とかもできそうじゃない?(適当) ● Lisp のマクロみたいな何か
  58. 58. Backend● 色々やってバックエンドにはき出す● さっき書いたよね
  59. 59. JIT● Just in time Compiler● 実行時に処理の流れを解析して最適化できるところを 最適化する● 実装した 処理系から Analyzer にヒントを与えると最 適化してくれる● このあたりは @chlere がめちゃくちゃ詳しい
  60. 60. ここまで説明したけれど…● ここまでの説明は処理系実装者は気にしなくていいと ころ● translate.py を実行すると勝手にやってくれるので意 識しない● 重要なのは translate.py に食わせる RPython のソー スを書くこと
  61. 61. やること● PyPy ってなに?● Python 処理系としての PyPy● 歴史的なお話● もう一つの PyPy● RPython ツールチェイン● 言語を作るには● 闇の軍団について
  62. 62. 改めて作り方● RPython で処理系を書きます● RPython Toolchain を通してバイナリ出力します● できあがり● わぁい!
  63. 63. RPython で処理系を作るっていうけど どういうこと? なにを作るの?
  64. 64. 答え:● 言語の処理系に必要なもの全部● ソースのパース● VM のバイナリに落とし込む● VM そのものの実装● VM 上の型システム● 標準ライブラリ● …
  65. 65. 全部書きます● Python の場合は CPython で実装されているものを全 部 RPython で実装する● 俺言語を作るときも同様、ソースのパースから全部書く● で、これを RPython Toolchain でビルドすると、わぁい!
  66. 66. なんか嬉しいの?● C よりも高級な Python っぽい書き方ができる● メモリ管理とか煩わしいことは気にしなくていい● PyPy の実装に使われている部分は使い回せる ● VM とか型モデルとか使い回すと楽なんじゃない? ● EBNF とかもあるので楽できるはず
  67. 67. 要は?● 簡単に俺言語の処理系を作れるよ!!● 重要なので何度も言っている気がする
  68. 68. 作る上で役立つ資料● PyPy Tutorial ● https://bitbucket.org/brownan/pypy-tutorial/ ● PyPy で BF とかいう言語を作るチュートリアル ● 翻訳しました ● http://shomah4a.net/pypy-tutorial/● サンプル ● 処理系としての PyPy のソース ● その他言語のソース
  69. 69. Grass 作ったよ● ここらへんにエントリ書いたので見てね● http://d.hatena.ne.jp/shomah4a/20110730/13119931
  70. 70. 折角なのでソースを見てみる
  71. 71. 簡単でしょう?
  72. 72. 作りたくなったでしょう?
  73. 73. やること● PyPy ってなに?● Python 処理系としての PyPy● 歴史的なお話● もう一つの PyPy● RPython ツールチェイン● 言語を作るには● 闇の軍団について
  74. 74. 今すぐフォローするべき PyPy 界のスーパー エンジニア (英語圏)● @alex_gaynor ● Django, PyPy, CPythonのコミッター● @pedronis ● PyPy 関係者らしい● @voidspace ● IronPython、CPython、PyPyのコミッター● @cfbolz ● pypyコミッター、Djangoも...?
  75. 75. 今すぐフォローするべき PyPy 界のスーパー エンジニア (英語圏)● @fijall ● PyPy コミッター● @gutworth ● CPython, pypy● @ctismer ● pypy, Pscyco● @antocuni ● pypyメインコミッター, pdb++のメインコミッター, virtualenvの コミッター
  76. 76. 今すぐフォローするべき PyPy 界のスーパー エンジニア(日本語圏)● @rokujyouhitoma ● 総帥、翻訳● @chlere ● JIT 研究中の大学院生● @cocoatomo ● 静的解析、翻訳
  77. 77. PyPy 闇の軍団について
  78. 78. 闇の軍団?● 初出は C++ 闇の軍団?● モヒカンの集まりくらいの意味合い● 誰彼かまわず噛みつくことから怖い人たちみたいな捉え 方をされるみたい● 好きなもの: まさかり
  79. 79. PyPy 闇の軍団ってなんぞ● あーみんあーみん言っているただのユーザグループです ● とらドラ!の話がメイン● 総帥は @rokujyouhitoma● Google Group でやりとりしたりしてる ● https://groups.google.com/group/pypy-ja/● Google Site もあるよ ● https://sites.google.com/site/pypyja/● Lingr にもあるみたい● とか言いつつ skype でのやりとりが多かったりする
  80. 80. 活動って?● メイン: とらドラ! の話 ● Sphinx ユーザ会の会長もいるよ!● サブ: PyPy ドキュメントの翻訳 ● https://bitbucket.org/pypyja● ついでに: PyPy の普及活動 ● pyfes に潜入して活動したり ● Python mini hack-a-thon に潜入して活動したり
  81. 81. 来たれ! 団員!
  82. 82. ご清聴ありがとうございました!!

×