SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
次世代言語 Python による
 PyPy を使った
次世代の処理系開発


第八回ありえるえりあ勉強会
   2012/01/20

      しょーま
    @shomah4a
お前、誰よ
●   しょーま or しょうま
    ●   twitter: @shomah4a
    ●   id:shomah4a
●   pypy-ja とか PyCon JP とかやってるみたい
●   PyPy を使ってみた切っ掛けは俺言語が作りたかっ
    たから
●   仕事? こまけぇこたぁいいんだよ
やること
●   PyPy ってなに?
●   Python で Python を実装するとは
●   高速化のヒミツ
●   その他情報まとめ
PyPy って何?
twitter で見かけた説明によると
https://twitter.com/nati/status/121825143285747713
一部不適切な表現がありましたがお詫
びするのも面倒だしする気もないので
       次へ
PyPy とは
●   http://pypy.org/
●   Python で作られた Python のインタプリタ
    ●   一般的にはこっち
    ●   今日は説明だけ
●   Python を作るために Python で作られた動的言
    語作成フレームワーク
    ●   今日はこっちがメイン
●   メインコミッターは Armin Rigo 氏
PyPy とは
●   前身は Psyco (さいこ)
    ●   http://psyco.sourceforge.net/
●   Python に JIT を追加す
    るモジュール
●   こちらも Armin Rigo 氏
    がメインコミッター
●   x86 しか使えない
Python インタプリタ
●   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/extend
CPython との違い
●   Garbage Collection が違う
●   CPython
    ●   参照カウント
    ●   Mark & Sweep のような何か
        –   循環参照の解放に使われる
        –   http://www.narihiro.info/translate/garbage_collection_for_python_jp.html
●   PyPy
    ●   標準は Minimark GC
    ●   その他色々選べる
    ●   http://readthedocs.org/docs/pypy/en/latest/garbage_collection.htm
●   細かな違いはここら辺(翻訳途中)
●   http://readthedocs.org/docs/pypyja/en/latest/cpython_differe
ここまでコピペ
●   ここらへんからコピペしました
    ●   PyPy 紹介
    ●   http://www.slideshare.net/ShomaHosaka/pypy-1011
    ●   受付のお姉さんの感想は「フォントが可愛い」でした
●   こっから先も大体コピペです
その他の資料
●   PyPy Advent Calendar 5日目 - PyPyとCPython
    の違いを知ろう - Ehrenの日記
    ●   http://d.hatena.ne.jp/Ehren/20111205/132307880
●   PyPy Advent Calendar 2011 6日目
    Frequently Asked Questions -
    YAMAGUCHI::weblog
    ●   http://d.hatena.ne.jp/ymotongpoo/20111206/1323
やること
●   PyPy ってなに?
●   Python で Python を実装するとは
●   高速化のヒミツ
●   その他情報まとめ
Python で Python を実装するとは
そもそも何を作るの?
●   言語の処理系に必要なもの全部
●   ソースのパース
●   VM のバイナリに落とし込む
●   VM そのものの実装
●   VM 上の型システム
●   標準ライブラリ
●   etc
●   …
はい! めんどくせーって思った人!
PyPy はそんなあなたをサポートします
PyPy とは
●   動的言語の処理系を作るための汎用フレームワー
    ク!
●   しかもフルスタック
●   Python なので書きやすい!
    ●   C みたいにメモリ確保とかめんどくさい部分は PyPy が
        引き受けてくれたり
    ●   dict, list みたいなリッチな組み込み型が使えたり
●   PyPy の Python インタプリタの中で使い回せるも
    のは使い回しちゃう
PyPy がしてくれること
●   言語を作るためのライブラリとか
    ●   EBNF によるパーサ
    ●   dict, list などの Python で使える標準的な型
    ●   基本的な型システムとその評価器 (ObjectSpace)
    ●   Python から C ライブラリを使う仕組み
●   メモリ管理はもちろん意識しない
●   RPython Toolchain
    ●   JIT コンパイラ
    ●   各種GC
実装実績(Python 以外)
●   Brainf*ck
●   Gameboy Emulator
●   Grass
●   HQ9+
●   Io
●   JavaScript
●   Ook!
●   Prolog
●   Scheme
●   Smalltalk
でも、遅いんでしょう?
やること
●   PyPy ってなに?
●   Python で Python を実装するとは
●   高速化のヒミツ
●   その他情報まとめ
高速化のヒミツ
速度について
●   Python で Python を実装している PyPy
●   でも 5 倍くらい速いらしい
何言ってんだこいつ
Python で Python 実装したって速い
      わけねーだろ起きろ!
と思われるかもしれませんが
●   速さにはもちろん理由があります
●   RPython Toolchain がキーワード
RPython Toolchain とは
●   RPython という言語を処理するためのツールチェ
    イン
●   FlowGraph, Annotation, RTyper, Optimize な
    どの工程を経て、様々なバックエンドに出力できる
●   バックエンドは C Binary, CLI, Python, LLVM,
    JVM など
●   kwsk はここらへん
    http://readthedocs.org/docs/pypyja/en/latest/t
RPython とは
●   Restricted Python の略らしい
●   Zope の RestrictedPython ではない
●   Python をバイナリコンパイルするためにいくつか
    の制限を設けたもの
●   型システム含む動的な部分を制限し、静的型っぽく
    なっている
●   Python のサブセットなので、 RPython は Python
    の処理系でそのまま動く
RPython の制限
●   変数は一つの型しか扱えない
    ●   継承関係にあればアップキャストできる
●   モジュールグローバル変数はすべて定数として扱われる
    ●   書き換えようとするとエラー
●   for ループは組み込み型のみ
●   動的関数定義や動的クラス定義は無理
●   ジェネレータはサポートしない
●   関数などの型は一つしか推論結果を持てない
    ●   template <typename T> T somefunc(T arg) なんだけど、
        実体化できるのは一つ、というイメージ
RPython の制限
●   文字列型のメソッドは大体使えるけど使えないのもある
●   リストは一つの型しか扱えない
    ●   辞書なんかも同様
    ●   複数の型が入るような場合は、すべての型を含む上限境界の型が推
        論結果として使われる
    ●   最悪 TYPE <: object な推論結果になって、後々エラーになることも
●   クラス周り
    ●   後付のメソッドは不可
    ●   単一継承は完全サポート
    ●   単純な mixin はサポート
    ●   クラスはもちろんファーストクラスオブジェクト
RPython の制限
●   Python の動的な部分が結構制限されて、静的型
    言語っぽくなる
    ●   コンパイル時なら動的に色々できる
●   とはいえ Python らしい記述力は十分発揮できる
●   静的型っぽいとはいえ、普通にプログラムを書いて
    いれば、そんなにおかしな設計をしない限り動的型
    言語でも型を意識して静的型っぽくなるでしょう?
●   詳しい仕様はこちら:
    http://readthedocs.org/docs/pypy/en/latest/co
RPython Toolchain の工程
●   RPython
●   FlowGraph
●   Annotation
    ●   Type Annotation
    ●   RTyper
    ●   Optimize (Optional)
    ●   Transform
●   Output (C Binary, CLI, LLVM, etc...)
FlowGraph
●   平たくいえばフローチャート
●   RPython から分岐・繰り返し・関数呼び出しなどの
    処理の流れを取り出し、データ構造にしたもの
●   後の工程ではこれに対して色々やる
Type Annotation
●   型アノテーション
●   FlowGraph を辿って、型を全部チェックしていく
    ●   みんな大好き型推論
    ●   静的解析かも
●   型チェックしてくれてエラーも出してくれるし素敵!
●   Erlang の Dializer みたいなやつ?
●   この後のセッションで詳しく説明します
RTyper
●   Annotator による型とバックエンドの型システムを
    繋ぐもの
●   Annotator の High-level な型からバックエンドの
    Low-level な型に変換する
●   signed int とか unsigned int とか
●   リストじゃなくて配列とか
●   ドキュメントはこちら
    http://codespeak.net/pypy/dist/pypy/doc/rtype
RTyper で使われる型システム
●   lltypesystem
    ●   C っぽいモデル
    ●   低レベルな操作に変換される
    ●   メモリ操作とかポインタとか
    ●   C Backend
    ●   LLVM Backend
RTyper で使われる型システム
●   ootypesystem
    ●   High-level な型システムを持つ VM 向け
    ●   CLI
    ●   JVM
    ●   Squeak(?)
Transform
●   Transform
    ●   FlowGraph の構造を弄るイメージ
    ●   Stackless 変換(deprecated)
        –   continulet になりました
        –   http://readthedocs.org/docs/pypyja/en/latest/stackless.h
    ●   CPS 変換とかもできそうじゃない?(適当)
    ●   Lisp のマクロみたいな何か
Backend
●   色々やってバックエンドにはき出す
●   さっき書いたよね
JIT コンパイラ
●   Just in Time Compiler
●   実行時に処理の流れを解析して最適化できるとこ
    ろを最適化する
●   実装した 処理系から Analyzer にヒントを与えると
    最適化してくれる
●   詳しくはこの後
結局のところ
●   RPython Toolchain でバイナリになるから速い
●   とはいえ C でガチで書くよりは遅い
●   速いのは JIT があるから
    ●   後のセッションにご期待下さい!
●   結局型チェックしてバイナリに落とすならそれで動
    的言語作らなくてもいいんじゃないの? という方は
    こちら
    ●   渋日記: PyPyよりも5倍高速な最速のPython処理系
        http://blog.shibu.jp/article/51727956.html
問題とか
●   x86 な Linux 以外の環境だと C-Backend 以外
    がコンパイルできなかったりする
    ●   pypy cliバックエンドに完敗 - aodag's posterous
        –   http://aodag.posterous.com/pypy-cli
    ●   jvmバックエンドに完敗 PyPy Advent Calendar 26日
        + 1日目(27日目?) - rokujyouhitomaの日記
        –   http://d.hatena.ne.jp/rokujyouhitoma/20111226/132485
    ●   PyPy Sudden Death Calendar 27日目 - JVM
        Backend に完敗した件を受けて - プログラマのネタ帳
        –   http://d.hatena.ne.jp/shomah4a/20111227/1324997958
ソースとかデモとか
●   時間があったら…
●   https://bitbucket.org/brownan/pypy-tutorial/
情報まとめ
●   本家ドキュメント
    ●   http://readthedocs.org/docs/pypy/en/latest/
●   pypy-ja が翻訳中のドキュメント
    ●   http://readthedocs.org/docs/pypyja/en/latest/
    ●   協力者募集中!
情報まとめ
●   PyPy Tutorial
    ●   PyPy を使って BF という言語を実装するチュートリアル
    ●   言語実装から JIT のヒント追加まで一通り
    ●   https://bitbucket.org/brownan/pypy-tutorial/
    ●   翻訳しました
        –   http://shomah4a.net/pypy-tutorial/
情報まとめ
●   PyPy Advent Calendar 2011
    ●   PyPyの紹介・翻訳・言語実装・処理系拡張・実装理論
        など各種エントリが揃っているのでオススメ
    ●   http://atnd.org/events/22078
    ●   https://sites.google.com/site/pypyja/pypy-advent-ca
pypy-ja について
●   闇の軍団らしいよ
●   @rokujyouhitoma が総帥
●   pypy-ja まとめサイト
    ●   https://sites.google.com/site/pypyja/
●   Google Groups
    ●   https://groups.google.com/group/pypy-ja
●   Bitbucket
    ●   https://bitbucket.org/pypyja
●   lingr
    ●   http://lingr.com/room/pypy_ja
    ●   skype ばっかりなのであんまり使われていなかったり…
pypy-ja は皆様の参加をお待ちしております!
興味のある方は多分会場にいるであろう @rokujyouhitoma が
     代表総帥なので掛けあってみてください
ご清聴ありがとうございました

Mais conteúdo relacionado

Mais procurados

Unityは神,Unrealは現実
Unityは神,Unrealは現実Unityは神,Unrealは現実
Unityは神,Unrealは現実Linea319
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)Preferred Networks
 
それでも私が研究を続ける理由
それでも私が研究を続ける理由それでも私が研究を続ける理由
それでも私が研究を続ける理由Hitomi Yanaka
 
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCHDeep Learning JP
 
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015SaitoTsutomu
 
OSS強化学習フレームワークの比較
OSS強化学習フレームワークの比較OSS強化学習フレームワークの比較
OSS強化学習フレームワークの比較gree_tech
 
Openfermionを使った分子の計算 part I
Openfermionを使った分子の計算 part IOpenfermionを使った分子の計算 part I
Openfermionを使った分子の計算 part IMaho Nakata
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018Takahiro Kubo
 
2019年度チュートリアルBPE
2019年度チュートリアルBPE2019年度チュートリアルBPE
2019年度チュートリアルBPE広樹 本間
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介Deep Learning JP
 
Lie-Trotter-Suzuki分解、特にフラクタル分解について
Lie-Trotter-Suzuki分解、特にフラクタル分解についてLie-Trotter-Suzuki分解、特にフラクタル分解について
Lie-Trotter-Suzuki分解、特にフラクタル分解についてMaho Nakata
 
多様な強化学習の概念と課題認識
多様な強化学習の概念と課題認識多様な強化学習の概念と課題認識
多様な強化学習の概念と課題認識佑 甲野
 
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2Preferred Networks
 
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...Deep Learning JP
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 

Mais procurados (20)

Unityは神,Unrealは現実
Unityは神,Unrealは現実Unityは神,Unrealは現実
Unityは神,Unrealは現実
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
 
それでも私が研究を続ける理由
それでも私が研究を続ける理由それでも私が研究を続ける理由
それでも私が研究を続ける理由
 
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
 
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
 
Oss貢献超入門
Oss貢献超入門Oss貢献超入門
Oss貢献超入門
 
OSS強化学習フレームワークの比較
OSS強化学習フレームワークの比較OSS強化学習フレームワークの比較
OSS強化学習フレームワークの比較
 
Openfermionを使った分子の計算 part I
Openfermionを使った分子の計算 part IOpenfermionを使った分子の計算 part I
Openfermionを使った分子の計算 part I
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018
 
2019年度チュートリアルBPE
2019年度チュートリアルBPE2019年度チュートリアルBPE
2019年度チュートリアルBPE
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
 
Lie-Trotter-Suzuki分解、特にフラクタル分解について
Lie-Trotter-Suzuki分解、特にフラクタル分解についてLie-Trotter-Suzuki分解、特にフラクタル分解について
Lie-Trotter-Suzuki分解、特にフラクタル分解について
 
多様な強化学習の概念と課題認識
多様な強化学習の概念と課題認識多様な強化学習の概念と課題認識
多様な強化学習の概念と課題認識
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
 
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 

Destaque

PyPy 紹介
PyPy 紹介PyPy 紹介
PyPy 紹介shoma h
 
Pythonコミュニティが私に与えてくれたもの
Pythonコミュニティが私に与えてくれたものPythonコミュニティが私に与えてくれたもの
Pythonコミュニティが私に与えてくれたものTomomiK
 
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第2回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第2回(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第2回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第2回Project Samurai
 
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るPHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るYoshio Hanawa
 
【勉強会】自己組織化マップ(SOM)
【勉強会】自己組織化マップ(SOM)【勉強会】自己組織化マップ(SOM)
【勉強会】自己組織化マップ(SOM)Jun Harada
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityMikiya Okuno
 
Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31Shinichi Nakagawa
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル敦志 金谷
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationMikiya Okuno
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたYusuke Kon
 
Pythonによる機械学習の最前線
Pythonによる機械学習の最前線Pythonによる機械学習の最前線
Pythonによる機械学習の最前線Kimikazu Kato
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveTakanori Sejima
 

Destaque (12)

PyPy 紹介
PyPy 紹介PyPy 紹介
PyPy 紹介
 
Pythonコミュニティが私に与えてくれたもの
Pythonコミュニティが私に与えてくれたものPythonコミュニティが私に与えてくれたもの
Pythonコミュニティが私に与えてくれたもの
 
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第2回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第2回(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第2回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第2回
 
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るPHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
 
【勉強会】自己組織化マップ(SOM)
【勉強会】自己組織化マップ(SOM)【勉強会】自己組織化マップ(SOM)
【勉強会】自己組織化マップ(SOM)
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 Security
 
Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 Replication
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
 
Pythonによる機械学習の最前線
Pythonによる機械学習の最前線Pythonによる機械学習の最前線
Pythonによる機械学習の最前線
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slave
 

Semelhante a 次世代言語 Python による PyPy を使った次世代の処理系開発

Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementationsmasahitojp
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Reportgree_tech
 
PyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッションPyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッションTetsuya Morimoto
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門kashew_nuts
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17Shinya Okano
 
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45civic Sasaki
 
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方サードパーティパッケージの歩き方
サードパーティパッケージの歩き方Takesxi Sximada
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境Hisao Soyama
 
Pipenvのご紹介 v2
Pipenvのご紹介 v2Pipenvのご紹介 v2
Pipenvのご紹介 v2C Y
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplibShinya Okano
 
PyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTPyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTTetsuya Morimoto
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようKenji NAKAGAKI
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺Shogo Kawahara
 
Pythonによる画像処理について
Pythonによる画像処理についてPythonによる画像処理について
Pythonによる画像処理についてYasutomo Kawanishi
 
プログラマーとの出会い - 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 for Beginners ( #PyLadiesKyoto Meetup )
Python for Beginners ( #PyLadiesKyoto Meetup )Python for Beginners ( #PyLadiesKyoto Meetup )
Python for Beginners ( #PyLadiesKyoto Meetup )Ai Makabi
 
High performance python computing for data science
High performance python computing for data scienceHigh performance python computing for data science
High performance python computing for data scienceTakami Sato
 
高位合成友の会 第3回 (2015/12/08) でのスライド
高位合成友の会 第3回 (2015/12/08) でのスライド高位合成友の会 第3回 (2015/12/08) でのスライド
高位合成友の会 第3回 (2015/12/08) でのスライドktok07b6
 

Semelhante a 次世代言語 Python による PyPy を使った次世代の処理系開発 (20)

Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
PyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッションPyCon JP 2016 ビギナーセッション
PyCon JP 2016 ビギナーセッション
 
Introduction Pycon2010
Introduction Pycon2010Introduction Pycon2010
Introduction Pycon2010
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17
 
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
 
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方サードパーティパッケージの歩き方
サードパーティパッケージの歩き方
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
 
Pipenvのご紹介 v2
Pipenvのご紹介 v2Pipenvのご紹介 v2
Pipenvのご紹介 v2
 
Rdkitの紹介
Rdkitの紹介Rdkitの紹介
Rdkitの紹介
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 
PyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTPyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LT
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺
 
Pythonによる画像処理について
Pythonによる画像処理についてPythonによる画像処理について
Pythonによる画像処理について
 
プログラマーとの出会い - 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 for Beginners ( #PyLadiesKyoto Meetup )
Python for Beginners ( #PyLadiesKyoto Meetup )Python for Beginners ( #PyLadiesKyoto Meetup )
Python for Beginners ( #PyLadiesKyoto Meetup )
 
High performance python computing for data science
High performance python computing for data scienceHigh performance python computing for data science
High performance python computing for data science
 
高位合成友の会 第3回 (2015/12/08) でのスライド
高位合成友の会 第3回 (2015/12/08) でのスライド高位合成友の会 第3回 (2015/12/08) でのスライド
高位合成友の会 第3回 (2015/12/08) でのスライド
 

次世代言語 Python による PyPy を使った次世代の処理系開発

  • 1. 次世代言語 Python による PyPy を使った 次世代の処理系開発 第八回ありえるえりあ勉強会 2012/01/20 しょーま @shomah4a
  • 2. お前、誰よ ● しょーま or しょうま ● twitter: @shomah4a ● id:shomah4a ● pypy-ja とか PyCon JP とかやってるみたい ● PyPy を使ってみた切っ掛けは俺言語が作りたかっ たから ● 仕事? こまけぇこたぁいいんだよ
  • 3. やること ● PyPy ってなに? ● Python で Python を実装するとは ● 高速化のヒミツ ● その他情報まとめ
  • 8. PyPy とは ● http://pypy.org/ ● Python で作られた Python のインタプリタ ● 一般的にはこっち ● 今日は説明だけ ● Python を作るために Python で作られた動的言 語作成フレームワーク ● 今日はこっちがメイン ● メインコミッターは Armin Rigo 氏
  • 9. PyPy とは ● 前身は Psyco (さいこ) ● http://psyco.sourceforge.net/ ● Python に JIT を追加す るモジュール ● こちらも Armin Rigo 氏 がメインコミッター ● x86 しか使えない
  • 10. Python インタプリタ ● 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/extend
  • 12. CPython との違い ● Garbage Collection が違う ● CPython ● 参照カウント ● Mark & Sweep のような何か – 循環参照の解放に使われる – http://www.narihiro.info/translate/garbage_collection_for_python_jp.html ● PyPy ● 標準は Minimark GC ● その他色々選べる ● http://readthedocs.org/docs/pypy/en/latest/garbage_collection.htm ● 細かな違いはここら辺(翻訳途中) ● http://readthedocs.org/docs/pypyja/en/latest/cpython_differe
  • 13. ここまでコピペ ● ここらへんからコピペしました ● PyPy 紹介 ● http://www.slideshare.net/ShomaHosaka/pypy-1011 ● 受付のお姉さんの感想は「フォントが可愛い」でした ● こっから先も大体コピペです
  • 14. その他の資料 ● PyPy Advent Calendar 5日目 - PyPyとCPython の違いを知ろう - Ehrenの日記 ● http://d.hatena.ne.jp/Ehren/20111205/132307880 ● PyPy Advent Calendar 2011 6日目 Frequently Asked Questions - YAMAGUCHI::weblog ● http://d.hatena.ne.jp/ymotongpoo/20111206/1323
  • 15. やること ● PyPy ってなに? ● Python で Python を実装するとは ● 高速化のヒミツ ● その他情報まとめ
  • 16. Python で Python を実装するとは
  • 17. そもそも何を作るの? ● 言語の処理系に必要なもの全部 ● ソースのパース ● VM のバイナリに落とし込む ● VM そのものの実装 ● VM 上の型システム ● 標準ライブラリ ● etc ● …
  • 20. PyPy とは ● 動的言語の処理系を作るための汎用フレームワー ク! ● しかもフルスタック ● Python なので書きやすい! ● C みたいにメモリ確保とかめんどくさい部分は PyPy が 引き受けてくれたり ● dict, list みたいなリッチな組み込み型が使えたり ● PyPy の Python インタプリタの中で使い回せるも のは使い回しちゃう
  • 21. PyPy がしてくれること ● 言語を作るためのライブラリとか ● EBNF によるパーサ ● dict, list などの Python で使える標準的な型 ● 基本的な型システムとその評価器 (ObjectSpace) ● Python から C ライブラリを使う仕組み ● メモリ管理はもちろん意識しない ● RPython Toolchain ● JIT コンパイラ ● 各種GC
  • 22. 実装実績(Python 以外) ● Brainf*ck ● Gameboy Emulator ● Grass ● HQ9+ ● Io ● JavaScript ● Ook! ● Prolog ● Scheme ● Smalltalk
  • 24. やること ● PyPy ってなに? ● Python で Python を実装するとは ● 高速化のヒミツ ● その他情報まとめ
  • 26. 速度について ● Python で Python を実装している PyPy ● でも 5 倍くらい速いらしい
  • 28. Python で Python 実装したって速い わけねーだろ起きろ!
  • 29. と思われるかもしれませんが ● 速さにはもちろん理由があります ● RPython Toolchain がキーワード
  • 30. RPython Toolchain とは ● RPython という言語を処理するためのツールチェ イン ● FlowGraph, Annotation, RTyper, Optimize な どの工程を経て、様々なバックエンドに出力できる ● バックエンドは C Binary, CLI, Python, LLVM, JVM など ● kwsk はここらへん http://readthedocs.org/docs/pypyja/en/latest/t
  • 31. RPython とは ● Restricted Python の略らしい ● Zope の RestrictedPython ではない ● Python をバイナリコンパイルするためにいくつか の制限を設けたもの ● 型システム含む動的な部分を制限し、静的型っぽく なっている ● Python のサブセットなので、 RPython は Python の処理系でそのまま動く
  • 32. RPython の制限 ● 変数は一つの型しか扱えない ● 継承関係にあればアップキャストできる ● モジュールグローバル変数はすべて定数として扱われる ● 書き換えようとするとエラー ● for ループは組み込み型のみ ● 動的関数定義や動的クラス定義は無理 ● ジェネレータはサポートしない ● 関数などの型は一つしか推論結果を持てない ● template <typename T> T somefunc(T arg) なんだけど、 実体化できるのは一つ、というイメージ
  • 33. RPython の制限 ● 文字列型のメソッドは大体使えるけど使えないのもある ● リストは一つの型しか扱えない ● 辞書なんかも同様 ● 複数の型が入るような場合は、すべての型を含む上限境界の型が推 論結果として使われる ● 最悪 TYPE <: object な推論結果になって、後々エラーになることも ● クラス周り ● 後付のメソッドは不可 ● 単一継承は完全サポート ● 単純な mixin はサポート ● クラスはもちろんファーストクラスオブジェクト
  • 34. RPython の制限 ● Python の動的な部分が結構制限されて、静的型 言語っぽくなる ● コンパイル時なら動的に色々できる ● とはいえ Python らしい記述力は十分発揮できる ● 静的型っぽいとはいえ、普通にプログラムを書いて いれば、そんなにおかしな設計をしない限り動的型 言語でも型を意識して静的型っぽくなるでしょう? ● 詳しい仕様はこちら: http://readthedocs.org/docs/pypy/en/latest/co
  • 35. RPython Toolchain の工程 ● RPython ● FlowGraph ● Annotation ● Type Annotation ● RTyper ● Optimize (Optional) ● Transform ● Output (C Binary, CLI, LLVM, etc...)
  • 36. FlowGraph ● 平たくいえばフローチャート ● RPython から分岐・繰り返し・関数呼び出しなどの 処理の流れを取り出し、データ構造にしたもの ● 後の工程ではこれに対して色々やる
  • 37. Type Annotation ● 型アノテーション ● FlowGraph を辿って、型を全部チェックしていく ● みんな大好き型推論 ● 静的解析かも ● 型チェックしてくれてエラーも出してくれるし素敵! ● Erlang の Dializer みたいなやつ? ● この後のセッションで詳しく説明します
  • 38. RTyper ● Annotator による型とバックエンドの型システムを 繋ぐもの ● Annotator の High-level な型からバックエンドの Low-level な型に変換する ● signed int とか unsigned int とか ● リストじゃなくて配列とか ● ドキュメントはこちら http://codespeak.net/pypy/dist/pypy/doc/rtype
  • 39. RTyper で使われる型システム ● lltypesystem ● C っぽいモデル ● 低レベルな操作に変換される ● メモリ操作とかポインタとか ● C Backend ● LLVM Backend
  • 40. RTyper で使われる型システム ● ootypesystem ● High-level な型システムを持つ VM 向け ● CLI ● JVM ● Squeak(?)
  • 41. Transform ● Transform ● FlowGraph の構造を弄るイメージ ● Stackless 変換(deprecated) – continulet になりました – http://readthedocs.org/docs/pypyja/en/latest/stackless.h ● CPS 変換とかもできそうじゃない?(適当) ● Lisp のマクロみたいな何か
  • 42. Backend ● 色々やってバックエンドにはき出す ● さっき書いたよね
  • 43. JIT コンパイラ ● Just in Time Compiler ● 実行時に処理の流れを解析して最適化できるとこ ろを最適化する ● 実装した 処理系から Analyzer にヒントを与えると 最適化してくれる ● 詳しくはこの後
  • 44. 結局のところ ● RPython Toolchain でバイナリになるから速い ● とはいえ C でガチで書くよりは遅い ● 速いのは JIT があるから ● 後のセッションにご期待下さい! ● 結局型チェックしてバイナリに落とすならそれで動 的言語作らなくてもいいんじゃないの? という方は こちら ● 渋日記: PyPyよりも5倍高速な最速のPython処理系 http://blog.shibu.jp/article/51727956.html
  • 45. 問題とか ● x86 な Linux 以外の環境だと C-Backend 以外 がコンパイルできなかったりする ● pypy cliバックエンドに完敗 - aodag's posterous – http://aodag.posterous.com/pypy-cli ● jvmバックエンドに完敗 PyPy Advent Calendar 26日 + 1日目(27日目?) - rokujyouhitomaの日記 – http://d.hatena.ne.jp/rokujyouhitoma/20111226/132485 ● PyPy Sudden Death Calendar 27日目 - JVM Backend に完敗した件を受けて - プログラマのネタ帳 – http://d.hatena.ne.jp/shomah4a/20111227/1324997958
  • 46. ソースとかデモとか ● 時間があったら… ● https://bitbucket.org/brownan/pypy-tutorial/
  • 47. 情報まとめ ● 本家ドキュメント ● http://readthedocs.org/docs/pypy/en/latest/ ● pypy-ja が翻訳中のドキュメント ● http://readthedocs.org/docs/pypyja/en/latest/ ● 協力者募集中!
  • 48. 情報まとめ ● PyPy Tutorial ● PyPy を使って BF という言語を実装するチュートリアル ● 言語実装から JIT のヒント追加まで一通り ● https://bitbucket.org/brownan/pypy-tutorial/ ● 翻訳しました – http://shomah4a.net/pypy-tutorial/
  • 49. 情報まとめ ● PyPy Advent Calendar 2011 ● PyPyの紹介・翻訳・言語実装・処理系拡張・実装理論 など各種エントリが揃っているのでオススメ ● http://atnd.org/events/22078 ● https://sites.google.com/site/pypyja/pypy-advent-ca
  • 50. pypy-ja について ● 闇の軍団らしいよ ● @rokujyouhitoma が総帥 ● pypy-ja まとめサイト ● https://sites.google.com/site/pypyja/ ● Google Groups ● https://groups.google.com/group/pypy-ja ● Bitbucket ● https://bitbucket.org/pypyja ● lingr ● http://lingr.com/room/pypy_ja ● skype ばっかりなのであんまり使われていなかったり…