それは正解か、それとも逃げなのか

と、まあ、コードも書かないのにあんまりうんちくばっかり書いてるのもどうかと思うので、コード書こう。
でも、特にネタも思い付かないので、結局ILogに手を入れるしかやることがない。


とりあえず、前の計画を実現するために、4.0に移植。あと、前、CFGをCall Flow Graphとか書いたんだけど、あれは、Control Flow Graphの間違いなので注意。というか、ちゃんと調べてから書きましょう > 自分。


4.0の話。
これまで、何回か、「RTLを生成するのには、expand_hogehoge関数を使う」と、書いてるんだけど、4.0以降では、それは使わないようだ。
4.0では、GIMPLE→SSA→RTLってなってるので、フロントエンドは、RTLではなく、GIMPLEというのを生成する必要がある、と。
GIMPLEというのは、gcc/tree.defの中で定義されたtreeだけで作られた中間形式のことだ。多分。
よーするに、これまでは、自分で定義したtreeを直接RTLに変換しても大丈夫だったけど、4.0からはいったん決められたtreeに変換しろよ、というわけだ。
まあ、これまでの動作でもRTLを生成する部分で単純な表現に変換する必要があったので、そこらへんをちょろちょろ弄ればいいだけだから、大きく構造が変わることはないだろうけど。


そんな感じ。コンパイルは通るようになった。構造としては、綺麗になるんじゃないかなー。
で、まあ、そこらへんは個人の問題なので、いいとして、ネタが無いからって言語処理系に手を出す、というのは正解か、それとも逃げか、という話。


言語処理系というのは、プログラマにとって、一番基本的なツールと言っていいだろう。メーラは無くても仕事できるけど、コンパイラが無くては仕事ができない。(エディタは微妙なところではあるが)
だからこそ、暇さえあれば、その基本的なツールについての理解を深め、そして、手を入れる、というのは、職人として当たり前である、というような考えかたができる。だから、他にネタが無いから処理系を弄る、というのは、正解である、といえる。


しかし、処理系というのは、作ったとしても何も問題を解決しない、という問題がある。
プログラムというのは、本来問題があって、それを解決するために作られるべきものである。
プログラムを書くためには問題がいる、というわけだ。で、プログラマにとってはその「解決しないといけない問題を探す」、というのは、また、難しいもので、プログラマにとってはそれがある意味一番の問題であると、いえないこともない。
しかし、処理系を弄る、というのは、「解決しないといけない問題」が大して無くてもそれなりのものを作るのが可能なのである。というか、そこらへんを、利用者に丸投げしてしまっているのである。
つまり、一番難しい問題を先送りにしている、という意味で処理系を弄る、というのは逃げである、ともいえる。


えーと、何が言いたいんだ。
いや、僕はもちろん正解だと思ってますよ。
言語をどう設計するか、というのはライブラリをどう設計するか、とかと同じぐらいのレベルで検討されるべきだ、と思ってるので。