インタプリタなら、実行しない部分をちゃんと書いておく必要はない。開発中に「とりあえずここまでで実行してみるか」って思ったときに、「宣言されていない関数を呼び出している部分があります」っていうエラーが出てくるのが本当にうっとうしい。「そこはどうせテスト実行しない部分なんだからどうでもいいだろ」って思うのに・・・。それでダミー関数を置いたりするわけだけど、それが効率のいいやり方だとは到底思えない。他にも宣言していない変数を参照しているとか、そういうエラーもうっとうしい。インタプリタなら、eval命令を容易に実現できる。プログラムでプログラムを生成し、それを直ちに実行できる。実行中に自分自身に関数や構造体を追加したり削除できたらどんなにいいだろう。いまでもC言語などでは機械語を出力して実行することはできる(JITコンパイラは基本的にそうやっている)。機械語を出力するので機種依存がある。機械語を出力するので、難易度が高い。EssenならEssenのプログラムを出力するだけでJITコンパイルをできるようにしてやろうではないか。ただのテキスト置換で言語の機能を補うというのは、うまいやり方ではない。#defineで関数もどきを書くときに、演算子の優先順位を何とかするために引数をカッコでくくるとか、バッドノウハウにしかみえない。そんなのが正解なんだろうか。同じことがしたいのならinline関数で代用できるべきだし、#defineでやったほうが効率がいいのなら、それはもはやinline関数のほうを改良すべきなのであって、プリプロセッサによるテキスト置換が正当化されるわけではない。コメントアウトするのはネストできるので有益だと思う。この記法は適切だとは思えないので、ネストできる記法を考えたい。