言語自作に関する思いを書く
(1)
- [Q] なぜインタプリタにこだわるのか?
- [A] インタプリタなら、実行しない部分をちゃんと書いておく必要はない。それがうれしい。
- 開発中に「とりあえずここまでで実行してみるか」って思ったときに、「宣言されていない関数を呼び出している部分があります」っていうエラーが出てくるのが本当にうっとうしい。「そこはどうせテスト実行しない部分なんだからどうでもいいだろ」って思うのに・・・。
- それでダミー関数を置いたりするわけだけど、それが効率のいいやり方だとは到底思えない。
- 他にも宣言していない変数を参照しているとか、そういうエラーもうっとうしい。だからそこは今回は実行しない部分だからどうでもいいって言っているのに!
- [Q] プリプロセッサは排除したいのはなぜか?
- [A] ただのテキスト置換で言語の機能を補うというのは、うまいやり方ではない。#defineで関数もどきを書くときに、演算子の優先順位を何とかするために引数をカッコでくくるとか、バッドノウハウにしかみえない。そんなのが正解なんだろうか。
- 同じことがしたいのならinline関数で代用できるべきだし、#defineでやったほうが効率がいいのなら、それはもはやinline関数のほうを改良すべきなのであって、プリプロセッサによるテキスト置換が正当化されるわけではない。
- ただ、#if 0 ~ #endif でコメントアウトするのはネストできるので有益だと思う。でもこの記法は適切だとは思えないので、ネストできる記法を考えたい。
(2)