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

30
9/12/1998 SMAF Workshop 1 移移移移移移移移移移移移移 Code Mobility Support for Stock Programmin g Languages 移移移移 JAIST

description

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

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

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

9/12/1998 SMAF Workshop 1

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

渡部卓雄JAIST

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

9/12/1998 SMAF Workshop 2

バックグラウンド

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

けで移動コードにできる,簡単な機構

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

9/12/1998 SMAF Workshop 3

“go” によるマイグレーション

• スレッドの全状態(=継続)の転送• 通常,移動する範囲は制限された範囲

で十分では? → 部分継続

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

9/12/1998 SMAF Workshop 4

call/ppc ( call-with-placed-partial-continuation )

• (call/ppc place function)– 現時点における部分継続を place に置き,

それに function を適用する.– function の適用自体は call/ppc の呼び出

しと同じ場所において行われる.

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

9/12/1998 SMAF Workshop 5

% : 同期プロンプト

(f (g a))

(f (% (g (call/ppc p

(lambda (k) (k a))))))

f

g

f

ga

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

9/12/1998 SMAF Workshop 6

& : 非同期プロンプト

(f (& (g (call/ppc p

(lambda (k) (k a))))))

f

gadummy

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

9/12/1998 SMAF Workshop 7

go

(define (go place)

(call/ppc place

(lambda (k) (k (current-place)))))

• (% (begin A (go p1) B (go p2) C))

• (& (begin A (go p1) B (go p2) C))

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

9/12/1998 SMAF Workshop 8

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

f

g

h

A B C

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

9/12/1998 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))))) )))))))))))

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

9/12/1998 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))))

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

9/12/1998 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 の使い方との違いは?

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

9/12/1998 SMAF Workshop 12

f

g

h

A B C

go の場合

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

9/12/1998 SMAF Workshop 13

f

g

h

A B C

@ の場合

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

9/12/1998 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))))

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

9/12/1998 SMAF Workshop 15

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

9/12/1998 SMAF Workshop 16

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

9/12/1998 SMAF Workshop 17

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

9/12/1998 SMAF Workshop 18

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

9/12/1998 SMAF Workshop 19

実装 !?

• λ クロージャのある言語– 引数フレームは無限エクステントを持つ.– 制御スタックの増減と同期しない.– Java の場合, inner class で代用できる.

• call/cc (call/pc)– 制御フレームも無限エクステントを持つの

で, setjmp などでは代用できない.– プログラム変換によって消去可能

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

9/12/1998 SMAF Workshop 20

実装 !?

• 制御フレーム・引数フレーム– オブジェクトとして実現 → Actor

• 制御フレームから辿れるオブジェクトをシリアライズして転送 (HORB)

• CPS 変換もどきで Java のクラスを生成– 高階関数 → 無名クラス– 関数呼び出し → メッセージ送信

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

9/12/1998 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))

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

9/12/1998 SMAF Workshop 22

プロトタイプ

• Java -> Java のソースコード変換– 継続・部分継続をオブジェクトにする

• serialize して転送

– 現在は手で変換– 自動化:

• 素直に CPS 変換を行うと変換後のコードが莫大になる.そこで Friedman, Haynes, Danvy らによる最適化手法を用いる.

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

9/12/1998 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); }}

継続・部分継続オブジェクト

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

9/12/1998 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); }});}

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

9/12/1998 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())); }}); } }

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

9/12/1998 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))))

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

9/12/1998 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));

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

9/12/1998 SMAF Workshop 28

動的な名前空間の実現

• 一級環境オブジェクト(クロージャ)– ライブラリ・位置に依存するコード– 疑似静的スコープ (Lee & Friedman) ,動的

環境 (Queinnec) ,一級文脈 (Lee, 橋本)• 移動先で未定義

– 代用品( disconnected operation)– 移動元に要求

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

9/12/1998 SMAF Workshop 29

関連研究

• Sekiguchi & Yonezawa (semantics)• Communication Passing Style (CmPS)

– Jagganathan (NEC Research) 1997– Linda 風の Cooordination Language

• put/read/get するたびにスレッドが移動• 移動の範囲をプロンプトで指定

• Facile (ECRC) 1995

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

9/12/1998 SMAF Workshop 30

他の研究テーマ

• 移動コードの形式的仕様• フォールトトレランスのためのアブス

トラクション– エージェントを監視するレベル(デーモ

ン)の導入– AgentSpace 上に実装(しようとしてい

る)• 動的コード生成による高速化