yarv-dev:473
From: Shiro Kawai <shiro lava.net>
Date: Sun, 24 Apr 2005 22:27:29 -1000 (HST)
Subject: [yarv-dev:473] Re: Multi-VM instance
From: SASADA Koichi <ko1 atdot.net> Subject: [yarv-dev:471] Re: Multi-VM instance Date: Mon, 25 Apr 2005 16:49:57 +0900 > > 確かTclは共有してませんよね。 > > というモデルを考えていました. > > で, > > > あるVMで作成したデータへの参照を別のVMにそのまま渡せるかどうか > > という点で,渡せちゃったら面白いことになりそうな気がする, > と考えておりました. クラス定義などのメタ言語要素がランタイムに存在していじれちゃう言語の 場合、ここの設計は結構微妙だと思います。 ひとつのVM (VM-A)でStringクラスを再定義したとして、そのVM内のString インスタンス(s)が別のVM (VM-B)に渡された場合、s.classは再定義 されたStringクラスのインスタンスなのか、オリジナルのStringのインスタンス なのか。再定義されたStringクラスだとすると、VM-B上で String === s は falseになるのか、等。 Gaucheの場合、関数や変数の再定義は原則として名前空間の問題ととらえて moduleで対応することにしていますが、オブジェクトシステムの部分では CLOSにひきずられてmoduleでは説明できないところもあります。なかなか すっきり設計するのは難しいです。 > > C関数の中でもScm_VM()で一意に現在のVMが取れる(thread local storageを使っています) > > のプリミティブって何を使ってますか? gcc 拡張の tls? > それとも,pthread_getspecific()? > 私は tls を使おうと思ってたんですが,その辺のオーバヘッド > (x86 なら,セグメント指定が入るため)が気になっています. 今はpthread_getspecific()です。とりあえずそれが一番ポータブルだと 思うんで。いずれ__GNUC__ の場合にtlsも試してみようとは思ってます。 pthread_getspecificより重いってことは多分無いですよね? ちなみにGaucheでは、pthread_getspecificのオーバヘッドは、 ほとんどの場合0.1%以下、悪いケースでたかだか2%くらいです。それよりは GCとかクロージャをオプティマイズする方がずっと効果が高いので、 たぶん当分はpthread_getspecificのままにしておくと思います。 --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 ]