SlideShare a Scribd company logo
1 of 82
Download to read offline
- 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

What's hot

Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Reportgree_tech
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたYusuke Kon
 
PyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTPyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTTetsuya Morimoto
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境Hisao Soyama
 
Sinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonSinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonkuroneko1988
 
Phpstormちょっといい話
Phpstormちょっといい話Phpstormちょっといい話
Phpstormちょっといい話Hisateru Tanaka
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LTdrillan
 
S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01Takeshi Akutsu
 
Py datameetup1
Py datameetup1Py datameetup1
Py datameetup1shiroyagi
 
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine今日から始める Go言語 と appengine
今日から始める Go言語 と appenginea know
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyShinichi Okada
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋Takuya Ueda
 
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2Takuya Ueda
 
BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3Atsushi Odagiri
 
OSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツールOSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツールTano Makoto
 

What's hot (20)

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

Viewers also liked

黒い画面超入門 - tmux を使ってみよう
黒い画面超入門 - tmux を使ってみよう黒い画面超入門 - tmux を使ってみよう
黒い画面超入門 - tmux を使ってみようgirigiribauer
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)Kenichiro MATOHARA
 
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法shigeki_ohtsu
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能についてshigeki_ohtsu
 
ルータ遊びことはじめ
ルータ遊びことはじめルータ遊びことはじめ
ルータ遊びことはじめTakumi Sueda
 
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)Yuki Tamura
 
スマホデザインパターン なう
スマホデザインパターン なうスマホデザインパターン なう
スマホデザインパターン なうAndroid UI勉強会
 
バグハンターの哀しみ
バグハンターの哀しみバグハンターの哀しみ
バグハンターの哀しみMasato Kinugawa
 
ルータでルータのプレゼンをした話。 ~# 技術解説
ルータでルータのプレゼンをした話。 ~# 技術解説ルータでルータのプレゼンをした話。 ~# 技術解説
ルータでルータのプレゼンをした話。 ~# 技術解説Takumi Sueda
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4bitter_fox
 
Bitcoinを技術的に理解する
Bitcoinを技術的に理解するBitcoinを技術的に理解する
Bitcoinを技術的に理解するKenji Urushima
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!Yuji Nojima
 
Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31Shinichi Nakagawa
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Etsuji Nakai
 
You Don't Know ES Modules
You Don't Know ES ModulesYou Don't Know ES Modules
You Don't Know ES ModulesTeppei Sato
 
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE
 

Viewers also liked (20)

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

Similar to PyPy 紹介

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

Similar to PyPy 紹介 (20)

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

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Recently uploaded (10)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

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 に潜入して活動したり