1 / 30

移動コードのための言語機構 Code Mobility Support for Stock Programming Languages

移動コードのための言語機構 Code Mobility Support for Stock Programming Languages. 渡部卓雄 JAIST. バックグラウンド. オブジェクト,高階関数や再帰記述とも直交できる移動コード機構 reasoning 可能な記述を支援 現在の計算状態を含めて移動させる 既存の ( 逐次的な)プログラムに入れるだけで移動コードにできる,簡単な機構. “ go ” によるマイグレーション. スレッドの全状態(=継続)の転送 通常,移動する範囲は制限された範囲で十分では? → 部分継続.

melvyn
Télécharger la présentation

移動コードのための言語機構 Code Mobility Support for Stock Programming Languages

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 移動コードのための言語機構Code Mobility Support for Stock Programming Languages 渡部卓雄 JAIST SMAF Workshop

  2. バックグラウンド • オブジェクト,高階関数や再帰記述とも直交できる移動コード機構 • reasoning可能な記述を支援 • 現在の計算状態を含めて移動させる • 既存の(逐次的な)プログラムに入れるだけで移動コードにできる,簡単な機構 SMAF Workshop

  3. “go”によるマイグレーション • スレッドの全状態(=継続)の転送 • 通常,移動する範囲は制限された範囲で十分では? → 部分継続 SMAF Workshop

  4. call/ppc (call-with-placed-partial-continuation) • (call/ppc placefunction) • 現時点における部分継続を placeに置き,それに functionを適用する. • functionの適用自体は call/ppc の呼び出しと同じ場所において行われる. SMAF Workshop

  5. % : 同期プロンプト g f (f (g a)) (f (% (g (call/ppc p (lambda (k) (k a)))))) a g f SMAF Workshop

  6. & : 非同期プロンプト (f (& (g (call/ppc p (lambda (k) (k a)))))) dummy a g f SMAF Workshop

  7. go • (% (begin A (go p1) B (go p2) C)) • (& (begin A (go p1) B (go p2) C)) (define (go place) (call/ppc place (lambda (k) (k (current-place))))) SMAF Workshop

  8. A : (f (% (g (call/ppc B (lambda (k1) (& (k1 (h (call/ppc C (lambda (k2) (k2 a)))))))))) B C A h g f SMAF Workshop

  9. (f (g (h a))) (% (f (call/ppc A (lambda (k) (& (k (g (call/ppc B (lambda (k) (& (k (h (call/ppc C (lambda (k) (& (k a))))) ))))))))))) SMAF Workshop

  10. @マクロ (@ p e) ||| (call/ppc p (lambda (k) (& (k e))))) (f (g (h a))) ↓ (% (f (@ p1 (g (@ p2 (h (@ p3 a))))))) ∥ (% (f@p1 (g@p2 (h@p3 a)))) SMAF Workshop

  11. (% (f@A (g@B (h@C a)))) (% (begin (set! tmp a) (go C) (set! tmp (h tmp)) (go B) (set! tmp (g tmp)) (go A) (f tmp))) (% (f (prog1 (g (prog1 (h (prog1 a (go C))) (go B))) (go A))) 上のような go の使い方との違いは? SMAF Workshop

  12. goの場合 B C A h g f SMAF Workshop

  13. h g f @の場合 B C A SMAF Workshop

  14. (# (f@A (g@B (h (call/ppc C (lambda (k) (ntimes n k a))))))) (define (ntimes n f a) (if (= n 0) a (ntimes (- n 1) f (f a)))) SMAF Workshop

  15. SMAF Workshop

  16. SMAF Workshop

  17. SMAF Workshop

  18. SMAF Workshop

  19. 実装!? • λクロージャのある言語 • 引数フレームは無限エクステントを持つ. • 制御スタックの増減と同期しない. • Java の場合,inner classで代用できる. • call/cc (call/pc) • 制御フレームも無限エクステントを持つので,setjmpなどでは代用できない. • プログラム変換によって消去可能 SMAF Workshop

  20. 実装!? • 制御フレーム・引数フレーム • オブジェクトとして実現 → Actor • 制御フレームから辿れるオブジェクトをシリアライズして転送(HORB) • CPS変換もどきで Java のクラスを生成 • 高階関数 → 無名クラス • 関数呼び出し → メッセージ送信 SMAF Workshop

  21. CPS変換 f(x) = x+1 → f’(x,k) = k(x+1) f(x,y) = g(h(x),y) → f’(x,y,k) = h’(x, λv.g’(v,y,k)) f(x) = begin g(x); h(x) end → f’(x,k) = g(x,λv.h(x,k)) SMAF Workshop

  22. プロトタイプ • Java -> Java のソースコード変換 • 継続・部分継続をオブジェクトにする • serializeして転送 • 現在は手で変換 • 自動化: • 素直にCPS変換を行うと変換後のコードが莫大になる.そこでFriedman, Haynes, Danvyらによる最適化手法を用いる. SMAF Workshop

  23. 継続・部分継続オブジェクト interface Continuation { public void fire (Object value); } interface PartialContinuation { public Continuation compose (Continuation cont); } class FinalCont implements Continuation { public void fire (Object value) { System.out.println("value = " + value); } } SMAF Workshop

  24. (define (fact n k) (if (< n 1) (k 1) (fact (- n 1) (lambda (value) (k (* n value)))))) public void fact (int n, Continuation k) { if (n < 1) k.fire(new Integer(1)); else this.fact (n-1, new Continuation () { public void fire (Object value) { k.fire(n * (int)value); }}); } SMAF Workshop

  25. public void fact (int n, Continuation k) { if (n < 1) k.fire(new Integer(1)); else { final int nn = n; final Continuation kk = k; this.fact (n-1, new Continuation () { public void fire (Object value) { kk.fire(new Integer(nn * ((Integer)value).intValue())); }}); } } SMAF Workshop

  26. (+ 1 #(* 2 (call/pc (lambda (k) (k (k 3)))))) = (+ 1 (* 2 (* 2 3))) => ((k (k c0)) 3) where c0 = (lambda (v) (+ 1 v)) k = (lambda (c) (lambda (v) (c (* 2 v)))) SMAF Workshop

  27. PartialContinuation k = new PartialContinuation () { public Continuation compose (Continuation cont) { final Continuation _cont = cont; return (new Continuation () { public void fire (Object value) { _cont.fire(new Integer(2 * ((Integer)value).intValue())); }}); } }; final Continuation _cont0 = cont0; Continuation c0 = new Continuation () { public void fire (Object value) { _cont0.fire(new Integer(1 + ((Integer)value).intValue())); } }; (k.compose(k.compose(c0))).fire(new Integer(3)); SMAF Workshop

  28. 動的な名前空間の実現 • 一級環境オブジェクト(クロージャ) • ライブラリ・位置に依存するコード • 疑似静的スコープ(Lee & Friedman),動的環境(Queinnec),一級文脈(Lee,橋本) • 移動先で未定義 • 代用品(disconnected operation) • 移動元に要求 SMAF Workshop

  29. 関連研究 • Sekiguchi & Yonezawa (semantics) • Communication Passing Style (CmPS) • Jagganathan (NEC Research) 1997 • Linda 風の Cooordination Language • put/read/get するたびにスレッドが移動 • 移動の範囲をプロンプトで指定 • Facile (ECRC) 1995 SMAF Workshop

  30. 他の研究テーマ • 移動コードの形式的仕様 • フォールトトレランスのためのアブストラクション • エージェントを監視するレベル(デーモン)の導入 • AgentSpace上に実装(しようとしている) • 動的コード生成による高速化 SMAF Workshop

More Related