プログラマはBadlands((不毛地帯 or Mountain・Swamp))を目指す

1998年頃、スクリプトエンジンを書いていた私は、...

404 Not Found

2003年頃、携帯ゲーム機用スクリプトエンジンをMASMで書いていた僕は、もしかして(もしかしなくても)これは超めんどくさくないかということに気が付いた。
いわゆる仮想マシン(モジュール)に与えるための中間コードをバキバキ吐き出すような仕様だったが、functionを定義できない、グローバルな変数は決めうち、ローカルな変数はない、という散々たるものだった。(とはいえ携帯ゲーム機上で動かすスクリプトとしてはそれで十分だった)*1

また、他の人はCでスクリプトエンジンを作っていた。ちょっと構文を間違うと、エラーもなくメモリアクセス違反で音もなく落ちるようなものだった。
これは何とかしなければならないとFileアクセス可能なJavaScriptでスクリプトエンジンを作り始めた。
要するにハッシュがまともに使えるものなら何でも良かったが、面倒がなさそうなのでJavaScriptにした。
ここで、yaccとかにいっていればまだ違ったのだろうが、とりあえず命令で言うCALLや、VARらしきものが楽にできるようになり、エラーも簡単にわかるようになった。

で、JavaCCに出会い……、←いまここ*2

まだ自身としてはきちんとJavaのメタプログラミングには触れたことがないのですが、
言われるようにメタ的な視点でプログラミングを楽にしようと技術を広めていける人と、
そういったリフレクションに出会わずに静かにプログラマ人生を終えていく人がいる気がしますね。


こういう下回りって、華がなくて泥臭いですが、何だか好きです。

そう考えると、逆に、誰でもリフレクションな書き方ができる環境は恐い。1人で全部作るなら、ものすごく便利に使えるだろう。必要最小限のDI実装を自分で書けば、既存の実装を導入する場合に必要な学習コストは0だ。しかし、チームで作る場合に、誰でも好き勝手できるとなったら困る。全員が約束を守ってくれる保証がモラルだけだと恐い。そもそも不可能か、習得コストが高くて割に合わないという環境要因が欲しい。

404 Not Found

怖い、ということはよくわかります。
こうしたメタ的な視点が身近になることは好き勝手に手を出すようになれば未知なる苦労が待っている可能性でもありますし。
*3


そういう意味では「Javaでは、苦労すればメタプログラミングが可能だ」というのは素敵な気がします。
「不可能か、習得コストが高くて割に合わない」という並のプログラマには手が出せない高見にあるべきもの、という意味で。
とはいえ、
プログラマはいつかオレ言語に目覚める気がするので、
そういうときに単純に考えるとすれば気軽にメタ的な扱いができる色んな選択肢があるのは嬉しいとも思えてしまいますね。

*1:IF,SET,CASE,FORがあれば十分だった

*2:停滞中

*3:実際、プロジェクト上において波瀾万丈な事をするプログラマがいれば追放しかないんですが。