「10日くらいでできる!プログラミング言語自作入門」の続編#1-1
(1) はじめに
- このテキストは、「10日くらいでできる!プログラミング言語自作入門」(a21_txt01)の続編にあたります。ですからこの続編テキストのスタート地点は772行のHL-9aになります。
- このシリーズでは、言語に新規の命令を追加することは最小限に抑えて、主にJITコンパイラ化や普通のコンパイラとしての改造がメインです。
- 言語に独自の機能を加えていって言語を「進化」させていく話は、「a21_txt03」でやる予定です。そこでは言語がどうすれば便利になるかを考えていきます。
(2) HL-11
- ということで、HL-11について説明したいと思います。HL-1から読んでいる人は、HL-10がないじゃないかと思うでしょう。この続編では、HL-11~19を使いたいと思っているので、HL-10は欠番にしました。
- HL-11の基本方針はこうです。
- [1]compile()関数では、内部コード出力をやめて、代わりにx86の機械語を出力する。
- [2]exec()関数は不要なので削除。
- [3]機械語を出力するにあたって、putIc()のままでは全然便利ではないので、putIcX86()を新規に作る。
- [4]それにともない、putIc()関数は期待通りには動かなくなるので、これを呼び出したらエラー終了するようにしておく(将来的にはこの関数は削除する)。
- [5]とりあえず、単純代入命令とprint命令だけputIcX86()に対応させる。残りは後回し。
- こうすることで、HL-9aをJITコンパイラ型の言語に改造します。そうすると何がよくなるのかというと、実行速度がうんと速くなるはずなのです。・・・それだけです。
- この改造をすると、言語はCPUに依存するようになります。x86以外ではこのプログラムは動きません。それがデメリットです。・・・またもし自力で改造する場合は、機械語に対する知識も必要になります。今まではC言語で普通に書くだけでうまくできたので、それと比べればハードルは高いです。
- しかしそれでも、やるだけの価値はあります。それほど高速になります。
- 説明が前後していますが「JITコンパイラ」というのは「Just-In-Time コンパイラ」のことで、ソースファイルからコンパイルして実行ファイルを作る普通のコンパイラとは異なり、インタプリタで命令の実行を指示された瞬間に高速にコンパイルして実行するという仕組みのことです。ユーザからはコンパイル動作は全く意識されず、ただの速いスクリプト言語に見えます。
こめんと欄