More Related Content
PDF
Yocto Project ハンズオン プレゼン用資料 PPTX
Guide to GraalVM (JJUG CCC 2019 Fall) PDF
PDF
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう PDF
PDF
CEDEC2014 「ライブラリを作ってはいけない ~それでも作りたいあなたへのアドバイス~」 PDF
PPTX
What's hot
PPTX
PPTX
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH PPTX
物体検出の歴史(R-CNNからSSD・YOLOまで) PPTX
PDF
PDF
PDF
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43 PDF
IIJ Technical DAY 2019 ~ IIJのサーバインフラはここまでやっています PDF
PDF
PDF
テストとリファクタリングに関する深い方法論 #wewlc_jp PDF
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】 PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」 PDF
【Unite Tokyo 2019】Understanding C# Struct All Things PPTX
さるでも分かりたい9dofで作るクォータニオン姿勢 ODP
tcpdumpとtcpreplayとtcprewriteと他。 PPTX
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料) PDF
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう PDF
PWNの超入門 大和セキュリティ神戸 2018-03-25 PDF
Viewers also liked
PDF
KEY
PDF
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発
第2回 PDF
PHP-FPMとuWSGI——mod_php以外の選択肢を探る PPTX
PDF
What's New in MySQL 5.7 Security PDF
Pythonistaデビュー #PyNyumon 2016/5/31 PDF
PDF
scikit-learnを用いた機械学習チュートリアル PDF
What's New in MySQL 5.7 Replication PDF
RubyエンジニアがPythonをdisるためにPythonを勉強してみた PDF
PDF
MySQL5.7 GA の Multi-threaded slave Similar to 次世代言語 Python による PyPy を使った次世代の処理系開発
PDF
Pyconjp2014_implementations PDF
Python & PyConJP 2014 Report PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ. PDF
Wrapping a C++ library with Cython PPT
Python languageupdate (2004) PDF
PDF
PDF
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12 PDF
「Python言語」はじめの一歩 / First step of Python ODP
KEY
PPTX
ODP
Can A Python Go Beyond The Python PPTX
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版 PDF
PDF
LLdeade Python Language Update PDF
おまえらこのライブラリ使ってないの? m9 (2013-07) PDF
Recently uploaded
PDF
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」 PDF
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信 PDF
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望 PDF
PMBOK 7th Edition Project Management Process Scrum PDF
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf PDF
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S... PDF
PMBOK 7th Edition_Project Management Context Diagram PDF
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector PDF
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版 PDF
FY2025 IT Strategist Afternoon I Question-1 Balanced Scorecard PDF
PMBOK 7th Edition_Project Management Process_WF Type Development PDF
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis PDF
自転車ユーザ参加型路面画像センシングによる点字ブロック検出における性能向上方法の模索 (20260123 SeMI研) 次世代言語 Python による PyPy を使った次世代の処理系開発
- 1.
- 2.
お前、誰よ
● しょーま or しょうま
● twitter: @shomah4a
● id:shomah4a
● pypy-ja とか PyCon JP とかやってるみたい
● PyPy を使ってみた切っ掛けは俺言語が作りたかっ
たから
● 仕事? こまけぇこたぁいいんだよ
- 3.
やること
● PyPy ってなに?
● Python で Python を実装するとは
● 高速化のヒミツ
● その他情報まとめ
- 4.
- 5.
- 6.
- 7.
- 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.
- 17.
そもそも何を作るの?
● 言語の処理系に必要なもの全部
● ソースのパース
● VM のバイナリに落とし込む
● VM そのものの実装
● VM 上の型システム
● 標準ライブラリ
● etc
● …
- 18.
- 19.
- 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
- 23.
- 24.
やること
● PyPy ってなに?
● Python で Python を実装するとは
● 高速化のヒミツ
● その他情報まとめ
- 25.
- 26.
速度について
● Python で Python を実装している PyPy
● でも 5 倍くらい速いらしい
- 27.
- 28.
- 29.
- 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.
- 41.
Transform
● Transform
● FlowGraph の構造を弄るイメージ
● Stackless 変換(deprecated)
– continulet になりました
– http://readthedocs.org/docs/pypyja/en/latest/stackless.h
● CPS 変換とかもできそうじゃない?(適当)
● Lisp のマクロみたいな何か
- 42.
- 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 ばっかりなのであんまり使われていなかったり…
- 51.
- 52.