* [[a21]]に関する雑記#1 -(by [[K]], 2021.01.26) ** 2021.01.25(月) -今日は[[a21_txt01_3]]のTL-3を書きました。我ながらシンプルにわかりやすく書けた気がします。 -ラベル名をうまく使って、分岐先のpc値を高速に求められるようにしたので、結構高速に動いてくれそうな気がします。 -でもなあ、goto命令だからなあ。やっぱり嫌がられてしまうかなあ・・・。 ** 2021.01.26(火) -うーん、この先の拡張を考えると、トークンコードの処理は別の関数に切り出しておくほうがよさそうだなあ・・・。じゃあさかのぼってTL-2から修正するかな。 -TL-4で高速化して、TL-5で「式」を扱えるようにして、TL-6で型を導入したらいいかなあ・・・。 ** 2021.01.27(水) -TL-4での高速化はやっぱりやめます。それはTL-5でやることにします。 -TL-4でやるべきは「REPLの導入」だと思いなおしました。・・・TLシリーズはせっかくのスクリプト言語(インタプリタ)なので、そのメリットを生かさないともったいないです。だからREPLの導入はぜひやるべきだと確信しました! -その後の予定としては、TL-5で少し高速化して、TL-6でもっと高速化して、TL-7でwihleループやブロックifなどを導入して、TL-8かそれ以降でグラフィック命令を導入します。 -そのあたりまでできたら、次はTJシリーズに移行して、JITコンパイラかな・・・。 ~ -TL-4ができました。REPLできるのはすごく楽しいです。これがたった7.5KBのアプリで実現できるなんて! →[[a21_txt01]] ** 2021.01.28(木) -TLシリーズでどこまでやるかで少し悩んでいます。たぶんやりすぎないほうがいいんです。道半ばにしておいて、「自分だったらこうするのに」をいくつか残しておくほうが、その後の開発にチャレンジする人が増えると思うのです。 -ということで型も浮動小数点演算も配列も構造体も関数もローカル変数も全部見送ろうかなと思っているのですが、どうかなあ。 -具体的な改造コードを提示しないまでも、こうすればできそうだよね?くらいの話は書くかなあ。 ~ -[memo]あとでどこか別のところにまとめるつもりだけど、インタプリタ言語のメリット: --[1] 実行ファイルがいらない。ソースコードだけあればよい。あとで、実行ファイルだけになって、「ソースは失われてしまった」みたいな事故が起きない。 --[2] インタプリタ言語のソースコードは(たいてい)機種依存しないので、移植しなくていい。将来新しいCPUとかOSが出ても無修正で対応できる。 --[3] JITコンパイラとかであれば、それぞれの環境に応じた実行コードを生成して実行してくれる(可能性がある)。 --[4] インタプリタはREPLができる。 -対応するデメリット: --[1] ソースがあっても処理系がないと動かない(どのバージョンで動かすかわからなくなったとか)。 ~ -現在手元で開発中のTL-6ですが、どうせやるならJITコンパイルしない範囲での最速を目指してやろうということで、ちょっと頑張ってみました。結果はgcc比で13.7倍。我ながら、これはなかなかいいんじゃないかなと思いました。 --その後さらに頑張って、11.3倍まで速くできました。 ** 2021.02.02(木) -現在、TL-7で、演算子をどこまでサポートするかで悩んでいます。 -たくさんサポートすると、それだけでプログラムはかなり長くなってしまいます。 -でも少なすぎると、おんぼろすぎて、TL-7が魅力的には見えなくなってしまいます。 * こめんと欄 #comment