- Chez
- Guile
- ikarus
- IronScheme
- Larceny
- Mosh
- mzscheme (Racket)
- Sagittarius
- vicare (ikarusの後継)
- Ypsilon
以前このライブラリで定義されているマクロがうまく動かないことがあったこともあり、マクロ展開器のバグを直すたびくらいにテストを走らせていたのだが、ふと他の処理系ではどうなのかと思い試してみた。依存しているSRFIとCygwinという関係上、テストを走らせることが出来たのは以下の3つ。
- Sagittarius (0.5.7 HEAD)
- Mosh (0.2.7)
- Racket (6.0.1 Windows x86_64)
#!/bin/sh
usage() {
echo "run-test.sh CONFIG"
echo " CONFIG argument must be a shell script file"
echo " contains $program and $load_flag"
}
if [ -f $1 ]; then
. `pwd`/$1
if [ "$?" != "0" ]; then
echo "source command failed"
exit -1
fi
else
usage;
exit -1
fi
load_path=`pwd`
init $load_path
cd tests
for f in *.sps
do
echo "Testing $f"
# hack for Windows racket...
temp_file=$f.tmp.scm
echo -n ';;' | cat - $f > $temp_file
echo "$program $load_flag $f"
"$program" $load_flag $temp_file
rm $temp_file
done
っで、以下の設定ファイルをそれぞれ用意。
# sash.conf
#!/bin/sh
# -*- mode:shell; coding:utf-8; -*-
program=/opt/bin/sash
load_flag=
init() {
load_flag=-L$1
}
# mosh.conf
#!/bin/sh
# -*- mode:shell; coding:utf-8; -*-
program=mosh
load_flag=
init() {
load_flag='--loadpath='$1
}
# racket.conf
#!/bin/sh
# -*- mode:shell; coding:utf-8; -*-
program='/cygdrive/c/Program Files/Racket/plt-r6rs'
load_flag=
init() {
load_flag="++path ../"
}
後は以下のようなコマンドで走らせる。
$ ./run-tests.sh sash.confテストを走らせた結果、意外にもSagittariusだけが全てのテストをパスするということが起きた。(これを書きたかった。)
Moshはpsyntaxのエラーがあったり、行末文字に起因すると思われるエラーがあったりでいくつかのテストが失敗する。またSRFI-25をサポートしていないのでライブラリがないというエラーも見受けられた。NMoshで走らせた場合はマクロ展開に起因するエラーは発生しないものの、通常のMoshと同様のエラーは発生する。
Racketは恐らく行末文字に起因するエラーが一つといくつかのテストが走ることさえなく落ちていくという現象が起きていた。
また、テスト完了までの時間もSagittariusが最速であった。以下がtimeコマンドを用いたテストケースの起動結果。(Cygwin 32 bit on Windows 7 64 bit Core 7i)
% time ./run-tests.sh sash.conf > sash.log 2>&1 [~/work/industria] ./run-tests.sh sash.conf > sash.log 2>&1 68.94s user 6.14s system 103% cpu 1:12.23 total % time ./run-tests.sh mosh.conf > mosh.log 2>&1 [~/work/industria] ./run-tests.sh mosh.conf > mosh.log 2>&1 111.95s user 2.98s system 99% cpu 1:55.56 total % time ./run-tests.sh racket.conf > racket.log 2>&1 [~/work/industria] ./run-tests.sh racket.conf > racket.log 2>&1 0.21s user 0.71s system 0% cpu 5:56.48 total以外なのはRacketが5倍近く遅かったことである。
この結果を受けて着実に使える処理系になっていっているということと勝手に解釈することにする。
No comments:
Post a Comment