[Squeak-ja: 2885] VM全体のテストについて

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 2885] VM全体のテストについて

Takeshi MUTOH
むとうです。

以前、FreeBSDでLinux用のVMが動かなくなったというのは、単にOpenGLライブ
ラリ関連をインストールし忘れていただけでした(;-;)


今回の本題ですが、FreeBSD用のVMを作ったりしていると、本当にこのVMは正
しく動いているのかが気になります。

例えば、FFIプラグインだと、
        FFITester class >> testAll
でチェックすればいいのかと思うのですが、VM全体に渡ってテストをしてくれ
るようなものってありませんでしょうか?

VMにかかわっている方も多いと思いますので、教えていただければ幸いです。

では。
--
武藤 武士@「あおによし」自宅より
 E-mail:[hidden email] URL:http://610T.org/
 ・水面の泡のように、フラフラ揺れたり、沈んだり浮かんだり
 ・「責任を持てないうちは責任のある地位にならないのが責任のある態度」
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 2886] Re: VM全体のテストについて

Yoshiki Ohshima
  おおしまです。

> 今回の本題ですが、FreeBSD用のVMを作ったりしていると、本当にこのVMは正
> しく動いているのかが気になります。

  そういうことはありますね。

> 例えば、FFIプラグインだと、
> FFITester class >> testAll
> でチェックすればいいのかと思うのですが、VM全体に渡ってテストをしてくれ
> るようなものってありませんでしょうか?

  VM全体にわたってのテスト、というものは今のところないと思います。

  Squeak VMの成り立ちは、VMのほとんどの部分をSqueakで書いて、それを
ANSI Cに変換して、それをコンパイルしています。マシンおよびOSに期待され
ている部分は32ビットの演算ができることと32ビットアドレス空間が取れるこ
とだけで、endianの違いなどはCのヘッダファイルに書かれたマクロで吸収し
ています。つまり、VM記述のCへの変換そのものは完全に機種非依存です。

  というわけで、Cに変換したコードをコンパイルしてVMを作り、そのVMでイ
メージが立ち上がるところまで行ったとすれば、それはVMのほとんどの箇所は
期待したとおりに動いている、ということになります。

  問題は、機種・OS依存の部分、特に入出力に関わる部分ですが、これはやっ
ぱり自動化されたテストはやや難しいでしょうね。「期待されたとおりにコン
ピュータのスクリーンにビットマップが表示されたかどうか」ということは、
人間が目で見るのが最善でしょうし。

  コードでテストできるのは、Pluginに入っているプリミティブがちゃんと呼
べたかどうか、もし返り値などに意味があるなら正しい値が帰ってきたかどう
か、というところまでかもしれません。これは、primitiveのバックアップコー
ド(primitive呼び出しが失敗したときに自動的に実行されるコード)を適切に
書き換えてやることになるでしょうか。

> VMにかかわっている方も多いと思いますので、教えていただければ幸いです。

  というわけで、あまり役に立てなくてすみません。上記のように、
primitiveが失敗したかどうかを調べることには大いに意義があると思います。
Squeak 2.4のころも、Dan Ingallsがいつのまにかtext scanningのprimitive
に渡す定義を変えたために、通常のtext scanningがみなfailしていた、とい
うことがありました。バックアップコードが適切に書かれていたのでなかなか
誰も気にしていなかったのですが(遅い遅い機械でベンチマークを走らせてい
た僕のような人が文句を言うまで)、やっぱり人間見落としはありますからね。

  参考になれば幸いです。

-- Yoshiki
Reply | Threaded
Open this post in threaded view
|

[Squeak-ja: 2887] Re: VM全体のテストについて

Takeshi MUTOH
むとうです。

おおしまさま、詳細な解説ありがとうございます。

At Thu, 16 Mar 2006 10:13:48 -0800,
Yoshiki Ohshima <[hidden email]> wrote:
>   Squeak VMの成り立ちは、VMのほとんどの部分をSqueakで書いて、それを
> ANSI Cに変換して、それをコンパイルしています。マシンおよびOSに期待され
> ている部分は32ビットの演算ができることと32ビットアドレス空間が取れるこ
> とだけで、endianの違いなどはCのヘッダファイルに書かれたマクロで吸収し
> ています。つまり、VM記述のCへの変換そのものは完全に機種非依存です。

確かに、Squeak自体もSqueakで書かれているというのはあちこちで目にしてい
たはずなんですが、このレベルまで大丈夫なように記述されているのですね。

>   というわけで、Cに変換したコードをコンパイルしてVMを作り、そのVMでイ
> メージが立ち上がるところまで行ったとすれば、それはVMのほとんどの箇所は
> 期待したとおりに動いている、ということになります。

とりあえず、このレベルの確認は毎回やっているので、少し安心しました。

>   コードでテストできるのは、Pluginに入っているプリミティブがちゃんと呼
> べたかどうか、もし返り値などに意味があるなら正しい値が帰ってきたかどう
> か、というところまでかもしれません。これは、primitiveのバックアップコー
> ド(primitive呼び出しが失敗したときに自動的に実行されるコード)を適切に
> 書き換えてやることになるでしょうか。

Squeakで書かれたバックアップコードもあるので、primitiveとバックアップ
コードの両方がダメでないと顕在化しないのですね。
プラグイン回りのチェックの時には気を付けるようにします。

というか、

> Squeak 2.4のころも、Dan Ingallsがいつのまにかtext scanningのprimitive
> に渡す定義を変えたために、通常のtext scanningがみなfailしていた、とい
> うことがありました。バックアップコードが適切に書かれていたのでなかなか
> 誰も気にしていなかったのですが(遅い遅い機械でベンチマークを走らせてい
> た僕のような人が文句を言うまで)、やっぱり人間見落としはありますからね。

実際にあったんですね(^-^;)

> > VMにかかわっている方も多いと思いますので、教えていただければ幸いです。
>   というわけで、あまり役に立てなくてすみません。上記のように、
> primitiveが失敗したかどうかを調べることには大いに意義があると思います。

ちょっと、コードの中のprimitiveがある回りを見てみます。

>   参考になれば幸いです。

ありがとうございました。

では。
--
武藤 武士@「あおによし」自宅より
 E-mail:[hidden email] URL:http://610T.org/
 ・水面の泡のように、フラフラ揺れたり、沈んだり浮かんだり
 ・「責任を持てないうちは責任のある地位にならないのが責任のある態度」