Code mobility support for stock programming languages
This presentation is the property of its rightful owner.
Sponsored Links
1 / 30

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


  • 43 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

移動コードのための言語機構 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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Code mobility support for stock programming languages

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

渡部卓雄

JAIST

SMAF Workshop


Code mobility support for stock programming languages

バックグラウンド

  • オブジェクト,高階関数や再帰記述とも直交できる移動コード機構

    • reasoning可能な記述を支援

    • 現在の計算状態を含めて移動させる

    • 既存の(逐次的な)プログラムに入れるだけで移動コードにできる,簡単な機構

SMAF Workshop


Code mobility support for stock programming languages

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

  • スレッドの全状態(=継続)の転送

  • 通常,移動する範囲は制限された範囲で十分では? → 部分継続

SMAF Workshop


Call ppc call with placed partial continuation

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

  • (call/ppc placefunction)

    • 現時点における部分継続を placeに置き,それに functionを適用する.

    • functionの適用自体は call/ppc の呼び出しと同じ場所において行われる.

SMAF Workshop


Code mobility support for stock programming languages

% : 同期プロンプト

g

f

(f (g a))

(f (% (g (call/ppc p

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

a

g

f

SMAF Workshop


Code mobility support for stock programming languages

& : 非同期プロンプト

(f (& (g (call/ppc p

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

dummy

a

g

f

SMAF Workshop


Code mobility support for stock programming languages

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


Code mobility support for stock programming languages

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


Code mobility support for stock programming languages

(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


Code mobility support for stock programming languages

@マクロ

(@ p e)

|||

(call/ppc p (lambda (k) (& (k e)))))

(f (g (h a)))

(% (f (@ p1 (g (@ p2 (h (@ p3 a)))))))

(% ([email protected] ([email protected] ([email protected] a))))

SMAF Workshop


F@ a g@ b h@ c a

(% ([email protected] ([email protected] ([email protected] 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


Code mobility support for stock programming languages

goの場合

B

C

A

h

g

f

SMAF Workshop


Code mobility support for stock programming languages

h

g

f

@の場合

B

C

A

SMAF Workshop


Code mobility support for stock programming languages

(# ([email protected] ([email protected] (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


Code mobility support for stock programming languages

SMAF Workshop


Code mobility support for stock programming languages

SMAF Workshop


Code mobility support for stock programming languages

SMAF Workshop


Code mobility support for stock programming languages

SMAF Workshop


Code mobility support for stock programming languages

実装!?

  • λクロージャのある言語

    • 引数フレームは無限エクステントを持つ.

    • 制御スタックの増減と同期しない.

    • Java の場合,inner classで代用できる.

  • call/cc (call/pc)

    • 制御フレームも無限エクステントを持つので,setjmpなどでは代用できない.

    • プログラム変換によって消去可能

SMAF Workshop


Code mobility support for stock programming languages

実装!?

  • 制御フレーム・引数フレーム

    • オブジェクトとして実現 → Actor

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

  • CPS変換もどきで Java のクラスを生成

    • 高階関数 → 無名クラス

    • 関数呼び出し → メッセージ送信

SMAF Workshop


Code mobility support for stock programming languages

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


Code mobility support for stock programming languages

プロトタイプ

  • Java -> Java のソースコード変換

    • 継続・部分継続をオブジェクトにする

      • serializeして転送

    • 現在は手で変換

    • 自動化:

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

SMAF Workshop


Code mobility support for stock programming languages

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

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


Code mobility support for stock programming languages

(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


Code mobility support for stock programming languages

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


Code mobility support for stock programming languages

(+ 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


Code mobility support for stock programming languages

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


Code mobility support for stock programming languages

動的な名前空間の実現

  • 一級環境オブジェクト(クロージャ)

    • ライブラリ・位置に依存するコード

    • 疑似静的スコープ(Lee & Friedman),動的環境(Queinnec),一級文脈(Lee,橋本)

  • 移動先で未定義

    • 代用品(disconnected operation)

    • 移動元に要求

SMAF Workshop


Code mobility support for stock programming languages

関連研究

  • Sekiguchi & Yonezawa (semantics)

  • Communication Passing Style (CmPS)

    • Jagganathan (NEC Research) 1997

    • Linda 風の Cooordination Language

      • put/read/get するたびにスレッドが移動

      • 移動の範囲をプロンプトで指定

  • Facile (ECRC) 1995

SMAF Workshop


Code mobility support for stock programming languages

他の研究テーマ

  • 移動コードの形式的仕様

  • フォールトトレランスのためのアブストラクション

    • エージェントを監視するレベル(デーモン)の導入

    • AgentSpace上に実装(しようとしている)

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

SMAF Workshop


  • Login