[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
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

What's hot (20)

Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
gree_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 二周年記念パーティ LT
Tetsuya Morimoto
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
Hisao Soyama
 
Sinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonSinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPython
kuroneko1988
 
Phpstormちょっといい話
Phpstormちょっといい話Phpstormちょっといい話
Phpstormちょっといい話
Hisateru Tanaka
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LT
drillan
 
S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01
Takeshi Akutsu
 
Py datameetup1
Py datameetup1Py datameetup1
Py datameetup1
shiroyagi
 
210630 python
210630 python210630 python
210630 python
Takuya Nishimoto
 
Go言語オーバービュー201507
Go言語オーバービュー201507Go言語オーバービュー201507
Go言語オーバービュー201507
エンジニア勉強会 エスキュービズム
 
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine今日から始める Go言語 と appengine
今日から始める Go言語 と appengine
a know
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Shinichi 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勉強会2
Takuya Ueda
 
BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3
Atsushi Odagiri
 
OSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツールOSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツール
Tano Makoto
 
Goをえらんだ理由
Goをえらんだ理由Goをえらんだ理由
Goをえらんだ理由
Tatsumi Naganuma
 
PyCharm入門
PyCharm入門PyCharm入門
PyCharm入門
Yuki Nagai
 
Goとテスト
GoとテストGoとテスト
Goとテスト
Takuya Ueda
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
gree_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 二周年記念パーティ LT
Tetsuya Morimoto
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
Hisao Soyama
 
Sinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonSinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPython
kuroneko1988
 
Phpstormちょっといい話
Phpstormちょっといい話Phpstormちょっといい話
Phpstormちょっといい話
Hisateru Tanaka
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LT
drillan
 
S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01
Takeshi Akutsu
 
Py datameetup1
Py datameetup1Py datameetup1
Py datameetup1
shiroyagi
 
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine今日から始める Go言語 と appengine
今日から始める Go言語 と appengine
a know
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Shinichi 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勉強会2
Takuya Ueda
 
BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3
Atsushi Odagiri
 
OSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツールOSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツール
Tano Makoto
 

Viewers also liked (20)

黒い画面超入門 - tmux を使ってみよう
黒い画面超入門 - tmux を使ってみよう黒い画面超入門 - tmux を使ってみよう
黒い画面超入門 - tmux を使ってみよう
girigiribauer
 
Web Component概要
Web Component概要Web Component概要
Web Component概要
Shumpei Shiraishi
 
マウスを使わないでキーボードで快適に生活する方法(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
 
ECMAScript没proposal追悼式
ECMAScript没proposal追悼式ECMAScript没proposal追悼式
ECMAScript没proposal追悼式
京大 マイコンクラブ
 
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_ab4
bitter_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/31
Shinichi Nakagawa
 
ES6 in Practice
ES6 in PracticeES6 in Practice
ES6 in Practice
Teppei Sato
 
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 Modules
Teppei Sato
 
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE
 
黒い画面超入門 - 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_ab4
bitter_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/31
Shinichi 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 Modules
Teppei Sato
 
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE
 

Similar to PyPy 紹介 (20)

Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
masahitojp
 
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
Takayuki Shimizukawa
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17
Shinya 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のご紹介 v2
C Y
 
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクト
Tetsuya Morimoto
 
Introduction Pycon2010
Introduction Pycon2010Introduction Pycon2010
Introduction Pycon2010
(shibao)芝尾 (kouichiro)幸一郎
 
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 ランゲージアップデート Python
hirokiky
 
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
 
Why python
Why pythonWhy python
Why python
TeppeiAkada1
 
Why python
Why pythonWhy python
Why python
TeppeiAkada1
 
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 2012
Takayuki Shimizukawa
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
Tetsuya Morimoto
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
masahitojp
 
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
Takayuki Shimizukawa
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17
Shinya 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のご紹介 v2
C 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 ランゲージアップデート Python
hirokiky
 
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 2012
Takayuki Shimizukawa
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
Tetsuya Morimoto
 

Recently uploaded (11)

【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
 
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
Matsushita Laboratory
 
空間オーディオを用いたヘッドパスワードの提案と音源提示手法の最適化
空間オーディオを用いたヘッドパスワードの提案と音源提示手法の最適化空間オーディオを用いたヘッドパスワードの提案と音源提示手法の最適化
空間オーディオを用いたヘッドパスワードの提案と音源提示手法の最適化
sugiuralab
 
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
 
測距センサとIMUセンサを用いた指輪型デバイスにおける顔認証システムの提案
測距センサとIMUセンサを用いた指輪型デバイスにおける顔認証システムの提案測距センサとIMUセンサを用いた指輪型デバイスにおける顔認証システムの提案
測距センサとIMUセンサを用いた指輪型デバイスにおける顔認証システムの提案
sugiuralab
 
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
 
ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
harmonylab
 
HarukiShinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援_deim2025
HarukiShinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援_deim2025HarukiShinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援_deim2025
HarukiShinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援_deim2025
Matsushita Laboratory
 
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
 
NodaItsuki_反省観点の分類に基づく試合の振り返り支援システムに関する有用性検証_DEIM2025
NodaItsuki_反省観点の分類に基づく試合の振り返り支援システムに関する有用性検証_DEIM2025NodaItsuki_反省観点の分類に基づく試合の振り返り支援システムに関する有用性検証_DEIM2025
NodaItsuki_反省観点の分類に基づく試合の振り返り支援システムに関する有用性検証_DEIM2025
Matsushita Laboratory
 
【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
 
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
Matsushita Laboratory
 
空間オーディオを用いたヘッドパスワードの提案と音源提示手法の最適化
空間オーディオを用いたヘッドパスワードの提案と音源提示手法の最適化空間オーディオを用いたヘッドパスワードの提案と音源提示手法の最適化
空間オーディオを用いたヘッドパスワードの提案と音源提示手法の最適化
sugiuralab
 
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
 
測距センサとIMUセンサを用いた指輪型デバイスにおける顔認証システムの提案
測距センサとIMUセンサを用いた指輪型デバイスにおける顔認証システムの提案測距センサとIMUセンサを用いた指輪型デバイスにおける顔認証システムの提案
測距センサとIMUセンサを用いた指輪型デバイスにおける顔認証システムの提案
sugiuralab
 
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
 
ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
harmonylab
 
HarukiShinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援_deim2025
HarukiShinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援_deim2025HarukiShinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援_deim2025
HarukiShinkawa_LLMを利用した果樹農家の経験知の対話的蓄積支援_deim2025
Matsushita Laboratory
 
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
 
NodaItsuki_反省観点の分類に基づく試合の振り返り支援システムに関する有用性検証_DEIM2025
NodaItsuki_反省観点の分類に基づく試合の振り返り支援システムに関する有用性検証_DEIM2025NodaItsuki_反省観点の分類に基づく試合の振り返り支援システムに関する有用性検証_DEIM2025
NodaItsuki_反省観点の分類に基づく試合の振り返り支援システムに関する有用性検証_DEIM2025
Matsushita Laboratory
 

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