素人のインタプリタを速くするスレ
■ このスレッドは過去ログ倉庫に格納されています
http://www1.axfc.net/u/3334871
なんか遅い気がするので修正頼む。
知恵袋よりいいかなと思って立てました。
多分改善点はあると思います。
ここ間違ってるってあったら修正します(ほぼ毎日20:00-21:00頃います)
多分何してるかは見たらわかると思います。
ではよろしく。 以下Photoshop職人の手による匠のコラが始まります。 >>1
とりあえず、if/elseの化け物みたいなの止めろ
switchのが早くなるが、
バイトコードやりたいなら↓みたいな、関数ポインタ使ってランダムアクセスさせたほうが早い
typedef void(*tp10e_operator_t)(unsigned char *mem, REGS *regs);
static tp10e_operator_t operator_table[sizeof char] = {
/*NOP*/tp10e_nop,
/*MOV*/tp10e_mov,
/*ADD*/tp10e_add,
//(ry
};
getargs_one/getargs_twoはswitchに切り替えろ。
getargs_one/getargs_twoがおそらく速度のボトルネックになるから最適化の余地はあるな。
ARGS_ONE/ARGS_TWOは.hで公開する必要ないし構造体である必要もない気がするから、いまその構造体のメンバつかってるのはローカル変数でもええやろ
あと、こんだけかけるなら言う必要ねーかも試練が、unsigned charとかはtypedefしたほうが楽じゃね?ってかバイトコードなら変数が何ビットなのか固定させとかんといかんと思う。
あと、used1とused2ってなに?これローカル変数でよくね?速度だすならグローバル変数より若干速くなるような気がするがc言語5年ぶりだから覚えてない。
あと、このソース(.c)の外部に公開しない関数ならstaticつけたほうが無難かな。
.hってインクルードガードしなくてええの?
一応ぱっと見こんなところだとおもう。 >>3
なぜ今の時代にBASIC作ろうとしたしw
ってかどこの誰のソースだよw
あえていうと、まず速度出そうってプログラムじゃなさそうだから速くできるかは五分五分だな。
構文解析の部分は
Tokenizer.tokenize()で正規表現やめると早くなるだろう。
ってかbison使え。
実行部分は
まず、switchやめてMap使え。
あと
例外処理のtry-catchは使うな。
メソッド呼び出しが多すぎんだよ、速度出せってほうがもう無理だな 横からだが、例外処理入れなかったら、例外が発生した時にどうするんだ? 速度出せって要求だから例外処理はtry-catchはしない。
全部自前で処理しろ。 それは非常に難しい要求だなw
なんせ、Javaは例外処理を前提で作られたライブラリだからなw 例外処理やめろってのは言い過ぎたか。
まぁ、あっても速度が劇的にって期待できるわけでもねーしいいや
んじゃ全部のメソッドstaticにしようぜ ■ このスレッドは過去ログ倉庫に格納されています