SlideShare a Scribd company logo
次世代言語 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 が
     代表総帥なので掛けあってみてください
ご清聴ありがとうございました

More Related Content

PPTX
Guide to GraalVM (JJUG CCC 2019 Fall)
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
イミュータブルデータモデル(世代編)
PDF
Windowsコンテナ入門
PDF
Docker Swarm入門
PPTX
Apache Avro vs Protocol Buffers
PDF
BuildKitの概要と最近の機能
Guide to GraalVM (JJUG CCC 2019 Fall)
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
イミュータブルデータモデル(世代編)
Windowsコンテナ入門
Docker Swarm入門
Apache Avro vs Protocol Buffers
BuildKitの概要と最近の機能

What's hot (20)

PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
PDF
[GKE & Spanner 勉強会] GKE 入門
PDF
Dockerだけではないコンテナのはなし
PDF
オブジェクト指向できていますか?
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
PDF
Unified JVM Logging
PDF
文字コードに起因する脆弱性とその対策(増補版)
PDF
CRC-32
PPTX
root権限無しでKubernetesを動かす
PPTX
冬のLock free祭り safe
PDF
Akkaとは。アクターモデル とは。
PDF
Dockerfileを改善するためのBest Practice 2019年版
PDF
Twitterのsnowflakeについて
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PDF
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
PDF
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
PDF
Tackling Complexity
PDF
すごい constexpr たのしくレイトレ!
PPTX
Amazon EKS によるスマホゲームのバックエンド運用事例
PDF
Kubernetes Meetup Tokyo #35_GitOps Toolkit による Kubernetes マニフェスト CD
SPAセキュリティ入門~PHP Conference Japan 2021
[GKE & Spanner 勉強会] GKE 入門
Dockerだけではないコンテナのはなし
オブジェクト指向できていますか?
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unified JVM Logging
文字コードに起因する脆弱性とその対策(増補版)
CRC-32
root権限無しでKubernetesを動かす
冬のLock free祭り safe
Akkaとは。アクターモデル とは。
Dockerfileを改善するためのBest Practice 2019年版
Twitterのsnowflakeについて
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Tackling Complexity
すごい constexpr たのしくレイトレ!
Amazon EKS によるスマホゲームのバックエンド運用事例
Kubernetes Meetup Tokyo #35_GitOps Toolkit による Kubernetes マニフェスト CD
Ad

Viewers also liked (13)

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

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

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