SlideShare a Scribd company logo
- Python による Python 実装 -




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

More Related Content

PDF
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PDF
言語処理するのに Python でいいの? #PyDataTokyo
PDF
LT: 今日帰ってすぐに始められるPython #nds45
PDF
PyCon JP 2016 ビギナーセッション
PPTX
私の好きなPython構文 vol.2 #nds46
PPTX
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
次世代言語 Python による PyPy を使った次世代の処理系開発
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
言語処理するのに Python でいいの? #PyDataTokyo
LT: 今日帰ってすぐに始められるPython #nds45
PyCon JP 2016 ビギナーセッション
私の好きなPython構文 vol.2 #nds46
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化

What's hot (20)

PDF
Python & PyConJP 2014 Report
PDF
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
PDF
PyLadies Tokyo 二周年記念パーティ LT
PDF
10分でわかるPythonの開発環境
PDF
Sinatra風マイクロフレームワークで始めるPython
PDF
Phpstormちょっといい話
PPTX
Pynyumon03 LT
PDF
S01 t1 tsuji_pylearn_ut_01
PDF
Py datameetup1
PPTX
210630 python
PDF
Go言語オーバービュー201507
PDF
今日から始める Go言語 と appengine
PDF
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋
PDF
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
PDF
BPStudy#54 そろそろPython3
PDF
OSSで楽に作るGo言語クライアントツール
PDF
Goをえらんだ理由
PDF
PyCharm入門
PDF
Goとテスト
Python & PyConJP 2014 Report
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
PyLadies Tokyo 二周年記念パーティ LT
10分でわかるPythonの開発環境
Sinatra風マイクロフレームワークで始めるPython
Phpstormちょっといい話
Pynyumon03 LT
S01 t1 tsuji_pylearn_ut_01
Py datameetup1
210630 python
Go言語オーバービュー201507
今日から始める Go言語 と appengine
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
今日から始めるGopher - スタートGo #0 @GDG名古屋
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
BPStudy#54 そろそろPython3
OSSで楽に作るGo言語クライアントツール
Goをえらんだ理由
PyCharm入門
Goとテスト
Ad

Viewers also liked (20)

PDF
黒い画面超入門 - tmux を使ってみよう
PPTX
Fork/Join Framework
PPTX
Web Component概要
PDF
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
PDF
Node-v0.12のTLSを256倍使いこなす方法
PDF
Node-v0.12の新機能について
PPTX
ルータ遊びことはじめ
PDF
ECMAScript没proposal追悼式
PDF
C++の話(本当にあった怖い話)
PDF
スマホデザインパターン なう
PDF
バグハンターの哀しみ
PDF
ルータでルータのプレゼンをした話。 ~# 技術解説
PDF
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
PDF
Bitcoinを技術的に理解する
PDF
最強オブジェクト指向言語 JavaScript 再入門!
PDF
Pythonistaデビュー #PyNyumon 2016/5/31
PDF
ES6 in Practice
PDF
Python 機械学習プログラミング データ分析ライブラリー解説編
PDF
You Don't Know ES Modules
PDF
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
黒い画面超入門 - tmux を使ってみよう
Fork/Join Framework
Web Component概要
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12の新機能について
ルータ遊びことはじめ
ECMAScript没proposal追悼式
C++の話(本当にあった怖い話)
スマホデザインパターン なう
バグハンターの哀しみ
ルータでルータのプレゼンをした話。 ~# 技術解説
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Bitcoinを技術的に理解する
最強オブジェクト指向言語 JavaScript 再入門!
Pythonistaデビュー #PyNyumon 2016/5/31
ES6 in Practice
Python 機械学習プログラミング データ分析ライブラリー解説編
You Don't Know ES Modules
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
Ad

Similar to PyPy 紹介 (20)

PDF
Pyconjp2014_implementations
PDF
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
PDF
Python札幌 2012/06/17
PDF
Python for Beginners ( #PyLadiesKyoto Meetup )
PPTX
Pipenvのご紹介 v2
 
PDF
Python界隈の翻訳プロジェクト
PDF
Introduction Pycon2010
PPTX
Pythonによる画像処理について
PDF
mypy - 待望のPython3.9型ヒント対応
PDF
サードパーティパッケージの歩き方
PDF
Django で始める PyCharm 入門
PPTX
LLoT ランゲージアップデート Python
KEY
Windowsにpythonをインストールしてみよう
PPTX
Pythonスタートアップ勉強会201109 python入門
PPTX
211120 他人の書いたPythonスクリプトをステップ実行で理解する
PDF
Why python
PDF
Why python
PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
PDF
Sphinxを使って本を書こう #pyconjp 2012
PDF
Python と型ヒント (Type Hints)
Pyconjp2014_implementations
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
Python札幌 2012/06/17
Python for Beginners ( #PyLadiesKyoto Meetup )
Pipenvのご紹介 v2
 
Python界隈の翻訳プロジェクト
Introduction Pycon2010
Pythonによる画像処理について
mypy - 待望のPython3.9型ヒント対応
サードパーティパッケージの歩き方
Django で始める PyCharm 入門
LLoT ランゲージアップデート Python
Windowsにpythonをインストールしてみよう
Pythonスタートアップ勉強会201109 python入門
211120 他人の書いたPythonスクリプトをステップ実行で理解する
Why python
Why python
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Sphinxを使って本を書こう #pyconjp 2012
Python と型ヒント (Type Hints)

PyPy 紹介

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