More Related Content
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発 PDF
PyCon JP 2016 ビギナーセッション PPTX
私の好きなPython構文 vol.2 #nds46 PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版 PDF
言語処理するのに Python でいいの? #PyDataTokyo PDF
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49 PPTX
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化 PDF
LT: 今日帰ってすぐに始められるPython #nds45 What's hot
PDF
Python & PyConJP 2014 Report PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋 PPTX
Pythonスタートアップ勉強会201109 python入門 PDF
RubyエンジニアがPythonをdisるためにPythonを勉強してみた PDF
PDF
PDF
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2 PDF
PDF
PDF
PyLadies Tokyo 二周年記念パーティ LT PDF
PDF
S01 t1 tsuji_pylearn_ut_01 PPTX
PDF
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby PDF
PDF
PDF
PDF
PPTX
PDF
Viewers also liked
PDF
PDF
PDF
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome) PDF
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa PDF
You Don't Know ES Modules PPTX
PDF
ルータでルータのプレゼンをした話。 ~# 技術解説 PDF
Python 機械学習プログラミング データ分析ライブラリー解説編 PPTX
PDF
PDF
最強オブジェクト指向言語 JavaScript 再入門! PDF
Node-v0.12のTLSを256倍使いこなす方法 PDF
PDF
Pythonistaデビュー #PyNyumon 2016/5/31 PDF
PDF
PDF
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4 PDF
PPTX
PDF
Similar to PyPy 紹介
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 PDF
PPTX
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ. PDF
Wrapping a C++ library with Cython KEY
PDF
Pyconjp2014_implementations PDF
PDF
「Python言語」はじめの一歩 / First step of Python PDF
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12 PDF
PPT
Python languageupdate (2004) ODP
Can A Python Go Beyond The Python PPTX
PDF
Lisp tutorial for Pythonista : Day 1 ODP
PDF
LLdeade Python Language Update PDF
PDF
おまえらこのライブラリ使ってないの? m9 (2013-07) PDF
Recently uploaded
PDF
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと... PPTX
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool PDF
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ PDF
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2 PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1 PyPy 紹介
- 1.
- Python によるPython 実装 -
2011/11/11
pypy-ja 闇の軍団 団員
しょうま(@shomah4a)
- 2.
やること
● PyPy ってなに?
● Python 処理系としての PyPy
● 歴史的なお話
● もう一つの PyPy
●
RPython ツールチェイン
● 言語を作るには
● 闇の軍団について
- 3.
お前、誰よ
● しょうま(@shomah4a)
● Java の会社勤務
●
ていうかその会社の社内勉強会
● 仕事では今は Python 使ってます。と思ったらそうでもなく
なった
● Java とかよくわかりません
●
PyPy を触ってみたきっかけは、俺言語が作りたかったか
ら
● PyPy 闇の軍団の団員らしい
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 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_
- 13.
- 14.
- 15.
やること
● PyPy ってなに?
● Python 処理系としての PyPy
● 歴史的なお話
● もう一つの PyPy
●
RPython ツールチェイン
● 言語を作るには
● 闇の軍団について
- 16.
- 17.
Psyco
● さいこ
● http://psyco.sourceforge.net/
● PyPy の前身となるプロジェクト
● PyPI で配布されているPython モジュール
● インポートすると JIT が使える
● x86 のみ対応
● メインコミッターは Armin Rigo 氏
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
プロジェクトとしての PyPy
● 最初のリリース 1.0 は 2007 年半ば
● 最新版は 1.6
●
もうすぐ 1.7 が出るみたい
● メインコミッターはもちろんあーみん Armin Rigo 氏
● Psyco の後継プロジェクト
● JITの最適化の研究(とか
●
言語そのものの研究
●
アカデミック色が強い
- 28.
- 29.
PyPy の歴史
● 最初は CPython と比べて 2000倍くらい遅かったらし
い
● 色々研究した結果
● CPython の 5倍程度速くなりました!
- 30.
やること
● PyPy ってなに?
● Python 処理系としての PyPy
● 歴史的なお話
● もう一つの PyPy
●
RPython ツールチェイン
● 言語を作るには
● 闇の軍団について
- 31.
- 32.
- 33.
- 34.
- 35.
( ゚∀゚)o彡゜ PyPy!! PyPy!!
( ゚∀゚)o彡゜ PyPy!! PyPy!!
( ゚∀゚)o彡゜ PyPy!! PyPy!!
( ゚∀゚)o彡゜ PyPy!! PyPy!!
( ゚∀゚)o彡゜ PyPy!! PyPy!!
( ゚∀゚)o彡゜ PyPy!! PyPy!!
- 36.
- 37.
- 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 ツールチェイン
● 言語を作るには
● 闇の軍団について
- 42.
- 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.
- 56.
Optimize
● Optimize
●
処理の最適化
● 関数のインライン展開
● Python で書いた場合のメモリ確保の回数を減らす
- 57.
Transform
● Transform
●
FlowGraph の構造を弄るイメージ
● Stackless 変換
● CPS 変換とかもできそうじゃない?(適当)
●
Lisp のマクロみたいな何か
- 58.
- 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.
- 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
- 70.
- 71.
- 72.
- 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.
- 77.
- 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 に潜入して活動したり
- 81.
- 82.