SlideShare une entreprise Scribd logo
1  sur  52
Télécharger pour lire hors ligne
次世代言語 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 が
     代表総帥なので掛けあってみてください
ご清聴ありがとうございました

Contenu connexe

Tendances

虫食算に学ぶ、深さ優先探索アルゴリズム (combmof, 2018/12/23)
虫食算に学ぶ、深さ優先探索アルゴリズム (combmof, 2018/12/23)虫食算に学ぶ、深さ優先探索アルゴリズム (combmof, 2018/12/23)
虫食算に学ぶ、深さ優先探索アルゴリズム (combmof, 2018/12/23)Kensuke Otsuki
 
これから始める人のための自動化入門~Ubuntu Jujuを使って〜– OpenStack最新情報セミナー 2015年7月
これから始める人のための自動化入門~Ubuntu Jujuを使って〜– OpenStack最新情報セミナー 2015年7月これから始める人のための自動化入門~Ubuntu Jujuを使って〜– OpenStack最新情報セミナー 2015年7月
これから始める人のための自動化入門~Ubuntu Jujuを使って〜– OpenStack最新情報セミナー 2015年7月VirtualTech Japan Inc.
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門Preferred Networks
 
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMatYasuhiro Yoshimura
 
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Preferred Networks
 
はじめてのKrylov部分空間法
はじめてのKrylov部分空間法はじめてのKrylov部分空間法
はじめてのKrylov部分空間法tmaehara
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)kowa kowa
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?Narimichi Takamura
 
Nextcloud 16,15の新機能とOnline Office機能
Nextcloud 16,15の新機能とOnline Office機能Nextcloud 16,15の新機能とOnline Office機能
Nextcloud 16,15の新機能とOnline Office機能Tetsurou Yano
 
ソフトウェア技術者から見たFPGAの魅力と可能性
ソフトウェア技術者から見たFPGAの魅力と可能性ソフトウェア技術者から見たFPGAの魅力と可能性
ソフトウェア技術者から見たFPGAの魅力と可能性Kenichiro MITSUDA
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術Preferred Networks
 
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?Fumihiko Takahashi
 
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健Preferred Networks
 
研究の基本ツール
研究の基本ツール研究の基本ツール
研究の基本ツール由来 藤原
 

Tendances (20)

虫食算に学ぶ、深さ優先探索アルゴリズム (combmof, 2018/12/23)
虫食算に学ぶ、深さ優先探索アルゴリズム (combmof, 2018/12/23)虫食算に学ぶ、深さ優先探索アルゴリズム (combmof, 2018/12/23)
虫食算に学ぶ、深さ優先探索アルゴリズム (combmof, 2018/12/23)
 
これから始める人のための自動化入門~Ubuntu Jujuを使って〜– OpenStack最新情報セミナー 2015年7月
これから始める人のための自動化入門~Ubuntu Jujuを使って〜– OpenStack最新情報セミナー 2015年7月これから始める人のための自動化入門~Ubuntu Jujuを使って〜– OpenStack最新情報セミナー 2015年7月
これから始める人のための自動化入門~Ubuntu Jujuを使って〜– OpenStack最新情報セミナー 2015年7月
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門
 
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
 
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
 
はじめてのKrylov部分空間法
はじめてのKrylov部分空間法はじめてのKrylov部分空間法
はじめてのKrylov部分空間法
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)
 
Photonのサービス選択の勘どころ
Photonのサービス選択の勘どころPhotonのサービス選択の勘どころ
Photonのサービス選択の勘どころ
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
 
Nextcloud 16,15の新機能とOnline Office機能
Nextcloud 16,15の新機能とOnline Office機能Nextcloud 16,15の新機能とOnline Office機能
Nextcloud 16,15の新機能とOnline Office機能
 
ソフトウェア技術者から見たFPGAの魅力と可能性
ソフトウェア技術者から見たFPGAの魅力と可能性ソフトウェア技術者から見たFPGAの魅力と可能性
ソフトウェア技術者から見たFPGAの魅力と可能性
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術
 
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?
 
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
 
研究の基本ツール
研究の基本ツール研究の基本ツール
研究の基本ツール
 

En vedette

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
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングRansui Iso
 
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
 

En vedette (13)

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
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
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
 

Similaire à 次世代言語 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
 

Similaire à 次世代言語 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) でのスライド
 

Dernier

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
 
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
 
【早稲田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
 
論文紹介: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
 
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
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Dernier (10)

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」の紹介
 
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
 
【早稲田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
 
論文紹介: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
 
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...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

次世代言語 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 ばっかりなのであんまり使われていなかったり…