More Related Content
PDF
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ. PPTX
PDF
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜 PPTX
PDF
PDF
PPT
Python入門からpython twitter利用のハンズオン What's hot
PDF
PDF
PDF
Python 機械学習プログラミング データ分析ライブラリー解説編 PDF
PDF
PDF
High performance python computing for data science PDF
言語処理するのに Python でいいの? #PyDataTokyo PPTX
PPTX
PDF
Wrapping a C++ library with Cython PDF
Python 2/3コード共存戦略 #osakapy PDF
Phpmatsuri2011 LT j_nakada PDF
20170131 python3 6 PEP526 PDF
PDF
Twitter sphere of #twitter4j #twtr_hack PPTX
PDF
PDF
Viewers also liked
PDF
PDF
PDF
PDF
Djangoフレームワークの紹介 OSC2015北海道 PPTX
PPTX
ちょっと真面目にPython&Django・基礎編 PDF
PPTX
Python勉強会資料(MessageBoard作成) Similar to Can A Python Go Beyond The Python
PDF
Python & PyConJP 2014 Report PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版 PDF
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23 PDF
次世代言語 Python による PyPy を使った次世代の処理系開発 PDF
KEY
PDF
ODP
PDF
Pyconjp2014_implementations PDF
DATUM STUDIO PyCon2016 Turorial PDF
PDF
PDF
PDF
PDF
PDF
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール PDF
LLdeade Python Language Update PDF
PPTX
PDF
More from Yusuke Muraoka
PDF
PDF
Pythonistaで始めるiOSプロトタイプ開発 PDF
PPTX
KEY
PDF
Substance D world-plone-day-2017 PPTX
PDF
The Substance D - Plone Symposium Tokyo 2015 PDF
PDF
PDF
Debug it-python-hack-a-thon-2011.02 PDF
PDF
Can A Python Go Beyond The Python
- 1.
- 2.
PyPyとは? Python で実装されたPython 処理系 解釈できる言語は RPython オリジナルの Python にはない様々な機能 処理系全てがPythonで作られている。 パーサ、抽象構文木(AST)、インタプリタ、環境フレームなども Pure Pythonなモジュールも動作実績がある Django, Pylons, BitTorrent, Twisted, SymPy, Pyglet, Nevow, Pinax - 3.
こんな感じ # トレースオプション >>>> __pytrace__ = 1 Tracing enabled >>>> a = 1 + 2 |- <<<< enter <inline>\na = 1 + 2 @ 1 >>>> |- 0 LOAD_CONST 1 (W_IntObject(3)) |- 3 STORE_NAME 0 (a) |- hash(W_StringObject('a')) -> W_IntObject(-468864544) |- int_w(W_IntObject(-468864544)) -> -468864544 |- 6 LOAD_CONST 0 (<W_NoneObject()>) |- 9 RETURN_VALUE |- <<<< leave <inline>\na = 1 + 2 @ 1 >>>> - 4.
PyPyとは? Python で実装されたPython 処理系 解釈できる言語は RPython オリジナルの Python にはない様々な機能 Python言語のサブセット Restricted Python 一番大きな違いはyieldが使えないこと ジェネレータが使えない http://codespeak.net/pypy/dist/pypy/doc/coding-guide.html - 5.
PyPyとは? Python で実装されたPython 処理系 解釈できる言語は RPython オリジナルの Python にはない様々な機能 Prologインタプリタ 多様なGC 多種なバックエンド C, CLI, JVM向けのバイナリを出力できる Stackless JIT - 6.
- 7.
- 8.
JIT? JIT とは? PyPy に積まれてる JIT Just In Timeコンパイラ Sun JVMのHotSpotで使われている コードのよく実行される箇所を高速化する 最近だとTraceMonkeyやV8にも使われて話題に - 9.
- 10.
JIT? JIT とは? PyPy に積まれてる JIT Tracing JIT Trace Monkeyと同じ手法 バイトコードレベルでよく実行される箇所を検出して、それを最適化する psycoの人が関わってる 関数を超えた最適化も可能 だけど今のPyPyでの実装は、、、 - 11.
こんな感じ def f(a,b) : if b % 46 == 41: return a - b else: return a + b def strange_sum(n): result = 0 while n >= 0: result = f(result, n) n -= 1 return result # corresponding trace: loop_header(result0, n0) i0 = int_mod(n0, Const(46)) i1 = int_eq(i0, Const(41)) guard_false(i1) result1 = int_add(result0, n0) n1 = int_sub(n0, Const(1)) i2 = int_ge(n1, Const(0)) guard_true(i2) jump(result1, n1) <= ガード条件に失敗するとインタプリタに戻る <= http://codespeak.net/svn/pypy/extradoc/talk/icooolps2009/bolz-tracing-jit.pdf - 12.
こんな感じ class __extend__(PyFrame): def dispatch(self, pycode, next_instr, ec): next_instr = r_uint(next_instr) try: while True: pypyjitdriver.jit_merge_point( frame=self, ec=ec, next_instr=next_instr, pycode=pycode) co_code = pycode.co_code self.valuestackdepth = hint(self.valuestackdepth, promote=True) next_instr = self.handle_bytecode(co_code, next_instr, ec) except ExitFrame: return self.popvalue() def JUMP_ABSOLUTE(f, jumpto, next_instr, *ignored): ec = f.space.getexecutioncontext() pypyjitdriver.can_enter_jit(frame=f, ec=ec, next_instr=jumpto, pycode=f.getcode()) return jumpto - 13.
- 14.
- 15.