[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:469

From: Shiro Kawai <shiro lava.net>
Date: Sun, 24 Apr 2005 21:33:12 -1000 (HST)
Subject: [yarv-dev:469] Re: Multi-VM instance

From: SASADA Koichi <ko1 atdot.net>
Subject: [yarv-dev:466] Multi-VM instance
Date: Mon, 25 Apr 2005 16:10:35 +0900

>  現在の Ruby はアプリケーション組み込み用途では,たとえば
> 初期化ができない,複数のインタプリタを扱えないなどの制限か
> ら使いづらいものになっています.
[...]
>  scheme だったら,scheme-report-environment みたいなのを
> 用意することで,すでに実現しているんでしょうか.

Schemeの規格レベルでは何もありません。例えば次の式の評価値は
実装依存で、1になる処理系もあれば「xなんてscheme-report-environment
にはないよ」というエラーにする処理系もあるでしょう。

 (begin
  (eval '(define x 1) (scheme-report-environment 5))
  (eval 'x (scheme-report-environment 5)))

複数のVMを持たせる場合、考慮するポイントがいくつかあると思います

A. グローバル環境をVM間で共有するかどうか。確かTclは共有してませんよね。
   Gaucheは共有してます。共有しなければ、複数のVMインスタンスを言語レベルでは
   完全に独立したものとして扱えるので、例えばsandbox環境とかはやりやすいかも
   しれません。ただ、複数のVM間で通信する場合は特殊なプリミティブが必要に
   なるでしょう。共有する場合は逆に、通信は楽ですが独立性の確保は難しく
   なります。

B. スレッドとVMの関係
   Gaucheは1ネイティブスレッド=1VMの原則で作ってあります。VMローカルな
   データかそうでないかで排他処理が必要かどうかを分けられるので実装がわかり
   やすいこと、C関数の中でもScm_VM()で一意に現在のVMが取れる(thread 
   local storageを使っています)のでvmへのポインタを常に渡して行く必要が
   無いこと、等がメリットです。ただ用途によってはネイティブスレッドと
   VMとをばらばらに扱いたい場合もあるかもしれません。言語スレッド=VMという
   考えはわりと自然だと思いますが。

C. VM間のデータのポータビリティ
   あるVMで作成したデータへの参照を別のVMにそのまま渡せるかどうか、という
   点です。VMローカルでしか意味を持たないデータへの参照があると話がややこしく
   なるでしょう (例えば、VMスタックの丸コピーを含む構造とか、VM毎にメモリ
   管理をやっている場合など)。Gaucheでは全てのデータは共有アドレス空間に
   あるので受渡し自由ですが、言語レベルでの排他制御はSchemeプログラム側の
   責任としています (言語レベルより下の層では排他制御を行っていて、Scheme値
   として不正な状態がSchemeレベルに漏れ出さないようにはなっています)。

言語レベルへの見せ方については、GaucheではThread=VMのため、(current-thread)
で帰って来るthreadオブジェクトがVMそのものです。

--shiro

--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       466 2005-04-25 16:10 [ko1 atdot.net       ] Multi-VM instance                       
       467 2005-04-25 15:47 ┣[shudo computer.org  ]                                       
       468 2005-04-25 15:49 ┃┗[shudo computer.org  ]                                     
       470 2005-04-25 16:39 ┃ ┗[ko1 atdot.net       ]                                   
->     469 2005-04-25 16:33 ┣[shiro lava.net      ]                                       
       471 2005-04-25 16:49 ┃┗[ko1 atdot.net       ]                                     
       473 2005-04-25 17:27 ┃ ┗[shiro lava.net      ]                                   
       476 2005-04-25 17:38 ┃  ┗[ko1 atdot.net       ]                                 
       477 2005-04-25 17:51 ┃   ┗[shiro lava.net      ]                               
       481 2005-04-25 19:13 ┃    ┗[ko1 atdot.net       ]                             
       472 2005-04-25 17:02 ┗[ko1 atdot.net       ]