何するわけでもないけどとりあえずその「遅さ」を体感してみた。
題材はretro-pcさんもご利用のmandelbrot風のasciiart
msx-basicでやってみた。手元に実機もないのでオンラインのエミュレータwebMSXで
(最初横の文字数が40文字しか出来ないと思って別バージョンを作ろうとしていたんだけどmsx-dosでmode 80って言うのがあるんで調べたらscreen 0でwidth 80でいいんだ)
最下行に所要時間を表示させてるけど実は何度も試すのに嫌気が差してスクロールで隠れる2行ほどを端折っているのでその分下駄を履かせた感じで時間が短くなっている。
本当の所要時間は838.217秒(13分58秒217)となる。
遅い原因はデフォのエミュレート機能はz80の3.58MHzクロックを忠実に再現しているからだと思う。(検証してないけどもしかしたらメモリーアクセス時のウェイトまで)
その上MSX-basicは10進計算で浮動小数が特に遅い。
同じWebMSXでcp/mの各言語でも同様の処理を走らせて比較してみると・・
mbasic 8分45秒
上記をBASCOMコンパイラにかけた実行ファイルだと 3分15秒弱
turbo pascal 3.01の生成する実行ファイルだと 4分11秒
hitech-c で生成したオブジェクトだと 2分9秒強
となる、最速のhitech-cを1とすると
hitech-c : bascom : tp3 : mbasic : msxbas =1 : 1.5 : 1.95 : 4 : 6.5
まだz88dkのcのオブジェクトとhitech-cのそれを比べてないけどcの優位性って凄いな
(まあ同じ処理を書ければだけどね)
ちょっと楽しいのでしばらくあれこれ実験をしてみようと思う。
(webMSXは[ALT]+[T]でCPUの[ALT]+[Y]でVDPのクロックを最大8倍までコントロールできるので実験段階やマンデルブロー集合描画のように結果が早く欲しいときは重宝しそうだ。)
ちなみに両方8倍にして昨日実験のhitech-c版のasciiartは15秒で書き終わる、素晴らしい
さらにz88dkのzccで作成したものとhitech-c版を比べてみたらzcc版は30秒ほどと2倍近くの時間がかかった 浮動小数を用いた演算が処理の大半だと思うのでライブラリーの差なのかな
hitech-cはプロンプトに対して c -v filename.cでfilename.comを生成してくれる。
(コンパイル環境に生成される実行ファイルが結構影響されるturbo pascalと違ってwindowsでcp/m playerを使ってコンパイルしてもcopyした先の環境ですぐに走る。)
z88dkの場合は
zcc +msx -subtype=msxdos filename.c -o filename.comって感じだ。
実行の名前は変えられるので同じソースをコンパイルするときはfilename.comの部分を変えればよし。