* 川合のプログラミング言語自作のためのテキスト第三版#10
-(by [[K]], 2021.03.29)

** (1) ここまでのまとめ
-ということで、HL-9aで言語の自作としてはいったん一区切りにしたいと思います(よい区切りなので)。続きもありますが、それは続編でやります。
-WindowsのHL-9aは、UPX圧縮をかけると11.5KBになります。つまり、この11.5KBさえあれば、gccなどのコンパイラを一切持っていなくても、
-Windows版のHL-9aは、UPX圧縮をかけると11.5KBになります。つまり、この11.5KBさえあれば、gccなどのコンパイラを一切持っていなくても、[[a21_txt01_9a]]に示したサンプルプログラム程度ならすべて動いてしまうのです。・・・それはなかなかインパクトがある気がします。772行でこれだけできるのですから、やっぱり言語自作は楽しいなと思います。

|ページ名|名前|行数|.exeの大きさ|説明|速度のめやす|
|[[a21_txt01]]|HL-1|RIGHT:49行|RIGHT:6.0KB|初めの一歩、たった49行のシンプルすぎる言語処理系|RIGHT:計測不能|
|[[a21_txt01_2]]|HL-2|128行|RIGHT:6.5KB|変数名は1文字じゃなくてもOK、見やすいスペースやインデントもOKに|RIGHT:計測不能|
|[[a21_txt01_3]]|HL-3|148行|RIGHT:7.0KB|条件分岐などをサポートしてループ処理が可能に|RIGHT:1520倍|
|[[a21_txt01_4]]|HL-4|186行|RIGHT:7.5KB|REPLの導入(これは楽しい!)|RIGHT:1520倍|
|[[a21_txt01_5]]|HL-5|214行|RIGHT:7.5KB|少し高速化|RIGHT:260倍|
|[[a21_txt01_6]]|HL-6|284行|RIGHT:8.0KB|もっと高速化(がんばった!)|RIGHT:13.2倍|
|[[a21_txt01_6a]]|HL-6a|297行|RIGHT:8.5KB|さらに高速化!(これをやるかどうかは好みが分かれるかも)|RIGHT:5.5倍|
|[[a21_txt01_7]]|HL-7|445行|RIGHT:9.5KB|式の導入(なんか急にかっこよくなった!)|RIGHT:5.5倍|
|[[a21_txt01_8]]|HL-8|557行|RIGHT:11.0KB|forやブロックifの追加|RIGHT:5.5倍|
|[[a21_txt01_8a]]|HL-8a|635行|RIGHT:12.0KB|配列や文字列リテラルの導入|RIGHT:5.5倍|
|[[a21_txt01_9]]|HL-9|754行|RIGHT:19.5KB|グラフィック命令の追加|RIGHT:5.5倍|
|[[a21_txt01_9a]]|HL-9a|772行|RIGHT:20.0KB|C言語っぽく改造|RIGHT:5.5倍|

-この表を眺めながら、どんな機能の追加が大規模な改造になるのか、そんなことを振り返れば、自分で言語を作るときの参考になるのではないかと思います。

** (2) 残された課題
-実行速度をもっと速くしたいとか、コンパイラに改造してプログラムを実行するのではなく実行ファイルを生成するにはどうしたらいいか、という大きなテーマがまずあります。それ以外にどんな発展があるかを考えてみます。

--[1]関数を作って呼び出せるようにする。
---HL-9aは関数が作れません。関数の呼び出しも組み込み関数に限られています。これはかなり残念な仕様なので、まずここをどうにかしたいです。

--[2]ローカル変数に対応する。
---HL-9aの変数はすべてグローバル変数で、ローカル変数がありません。関数が作れるようになったら、この点も何とかしたいところです。

--[3]整数型以外にも対応する。
---HL-9aは符号付きの整数型のみに対応しています。でも符号なし整数や浮動小数点型にも対応したいでしょう。さらには構造体やクラスにも対応したいところです。

--[4]プリプロセッサにも対応する。
---#defineや#includeなどができるようになれば、かなりC言語に近づく気がします。

-あれ?もっとたくさんの課題が残っている思っていましたが、実際に書き並べてみると意外と少ないなと感じました。もちろんより上を目指すならやることはさらに増えますが、C言語に追いつくだけならそんなに大変ではないかもしれません。



** 次回に続く
-次回: ''a21_txt01_9a''

*こめんと欄
#comment


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS