1063 shaares
28 private links
28 private links
あなたが難しい問題を解こうとしているなら、 問われているのはパワフルな言語を使うか使わないか、ではない。 (a)パワフルな言語を使うか (b)パワフルな言語と等価なインタプリタを書くか (c)自らがパワフルな言語の人間コンパイラとなるか、という選択なのだ。 Pythonの例の中に既にこの選択を見て取ることができる。あの例で我々は、 コンパイラがレキシカルな変数を扱う際に生成するようなコードをシミュレートしていたのだ。
コンパイラがやるべきことを人間がシミュレートするという慣行は ただ広まっているというだけでなく、思考を型にはめる作用がある。 例えば、OOの世界では非常に良く「パターン」というのを耳にするだろう。 この「パターン」は多くの場合、(c)のケース、 すなわち人間コンパイラが実際に動作している証拠なんじゃないかと私は思う。 私が自分のプログラムにパターンを見付けたら、それはどこかがおかしいというサインだ。 プログラムの形は、それが解くべき問題のみを反映すべきだ。 その他の繰り返しがコード中に現れるということは、少なくとも私にとっては、 十分な抽象化を行っていないということを意味する。大抵の場合、それは マクロを書くべきコードを手で拡張して書いているということになる。
(強調は引用者による)