Can A Python Go Beyond The Python
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Can A Python Go Beyond The Python

on

  • 2,288 views

 

Statistics

Views

Total Views
2,288
Views on SlideShare
2,285
Embed Views
3

Actions

Likes
0
Downloads
4
Comments
0

1 Embed 3

http://www.slideshare.net 3

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Can A Python Go Beyond The Python Presentation Transcript

  • 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> a = 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> a = 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. JIT
  • 7. ヘビはヘビを超えることはできるか ? ( 速度的な意味で )
  • 8. JIT?
    • JIT とは ?
    • PyPy に積まれてる JIT
    • Just In Timeコンパイラ
    • Sun JVMのHotSpotで使われている
      • コードのよく実行される箇所を高速化する
    • 最近だとTraceMonkeyやV8にも使われて話題に
  • 9. 余談(V8のJITについて) http://www.slideshare.net/dynamis/trace-monkey?type=presentation
  • 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 __exten d__(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. 結論 Psyco 最強