川合のプログラミング言語自作のためのテキスト第三版#10

  • (by K, 2021.03.29)

(1) ここまでのまとめ

  • ということで、HL-9aで言語の自作としてはいったん一区切りにしたいと思います(よい区切りなので)。続きもありますが、それは続編でやります。
  • Windows版のHL-9aは、UPX圧縮をかけると11.5KBになります。つまり、この11.5KBさえあれば、gccなどのコンパイラを一切持っていなくても、a21_txt01_9aに示したサンプルプログラム程度ならすべて動いてしまうのです。・・・それはなかなかインパクトがある気がします。772行でこれだけできるのですから、やっぱり言語自作は楽しいなと思います。
ページ名名前行数.exeの大きさ説明速度のめやす
a21_txt01HL-149行6.0KB初めの一歩、たった49行のシンプルすぎる言語処理系計測不能
a21_txt01_2HL-2128行6.5KB変数名は1文字じゃなくてもOK、見やすいスペースやインデントもOKに計測不能
a21_txt01_3HL-3148行7.0KB条件分岐などをサポートしてループ処理が可能に1520倍
a21_txt01_4HL-4186行7.5KBREPLの導入(これは楽しい!)1520倍
a21_txt01_5HL-5214行7.5KB少し高速化260倍
a21_txt01_6HL-6284行8.0KBもっと高速化(がんばった!)13.2倍
a21_txt01_6aHL-6a297行8.5KBさらに高速化!(これをやるかどうかは好みが分かれるかも)5.5倍
a21_txt01_7HL-7445行9.5KB式の導入(なんか急にかっこよくなった!)5.5倍
a21_txt01_8HL-8557行11.0KBforやブロックifの追加5.5倍
a21_txt01_8aHL-8a635行12.0KB配列や文字列リテラルの導入5.5倍
a21_txt01_9HL-9754行19.5KBグラフィック命令の追加5.5倍
a21_txt01_9aHL-9a772行20.0KBC言語っぽく改造5.5倍
  • この表を眺めながら、どんな機能の追加が大規模な改造になるのか、そんなことを振り返れば、自分で言語を作るときの参考になるのではないかと思います。

(2) 残された課題

  • 実行速度をもっと速くしたいとか、コンパイラに改造してプログラムを実行するのではなく実行ファイルを生成するにはどうしたらいいか、という大きなテーマがまずあります。それは真っ先にやるとして、それ以外にどんな発展があるかを考えてみます。
  • [1]関数を作って呼び出せるようにする。
    • HL-9aは関数が作れません。関数の呼び出しも組み込み関数に限られています。これはかなり残念な仕様なので、まずここをどうにかしたいです。
  • [2]ローカル変数に対応する。
    • HL-9aの変数はすべてグローバル変数で、ローカル変数がありません。関数が作れるようになったら、この点も何とかしたいところです。
  • [3]整数型以外にも対応する。
    • HL-9aは符号付きの整数型のみに対応しています。でも符号なし整数や浮動小数点型にも対応したいでしょう。さらには構造体やクラスにも対応したいところです。
  • [4]プリプロセッサにも対応する。
    • #defineや#includeなどができるようになれば、かなりC言語に近づく気がします。
  • あれ?もっとたくさんの課題が残っている思っていましたが、実際に書き並べてみると意外と少ないなと感じました。もちろんより上を目指すならやることはさらに増えますが、C言語に追いつくだけならそんなに大変ではないかもしれません。

(3) 私はこの言語をどうしようと思っているのか?

  • 私はこの「はりぼて言語」がかなり好きです。なぜなら、すごくシンプルで改造がしやすいからです。
  • あと、C言語に似ているところも気に入っています。
  • ということで、まずは「はりぼて言語」をJITコンパイラ化して高速化しようと思います。それを続編の最初の目標にします。
  • 私は実行が速い言語が好きなので。
  • 次に、私は「自分の生産性を上げるための言語」を作りたいと思っています。そう、独自の言語を作るからには、やっぱり既存言語よりも便利な言語にしたいのです。
  • さて便利かどうかはどうやって実感すればいいでしょうか。それはやはり、この言語でプログラムを書けば、他の既存言語よりも短くかけるよと確認できればいいのだと思います。
  • 私は理論的にあれこれと考えるのが得意ではないので、具体的にアプリケーションを想定して、それを複数の言語で書き分けることで、優劣を比較したいと思っています。
  • そうすると、ではどんなアプリケーションを想定するか考えなければいけません。・・・私がここしばらくメインで開発しているもののほうがいいだろうと思いました。・・・ああ、プログラミング言語の処理系だ・・・。
  • ということで、当面はプログラミング言語を作りやすくするための言語を作ることにします。
  • また、当面は「はりぼて言語」の開発ばかりすることになると思うので、つまり私ははりぼて言語ではりぼて言語を作るように進めていくのが正解のように思います。ということで、セルフホストを目指そうと思います。

次回に続く

  • 次回: a21_txt02

こめんと欄


コメントお名前NameLink

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-03-29 (月) 23:33:00 (15d)