言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

細胞とオブジェクトについて考える。

オブジェクト指向と細胞の比喩について考えるのが流行ってるみたいなので書いてみる。

僕が中学生か高校生の頃に先生から聞いた話では(ふるっ)、生き物の体というのは遺伝子の書いてある通りに出来るだけでは無いそうです。卵細胞から成長して死ぬまでしかるべき時間にしかるべき場所にあるたんぱく質が遺伝子を誘導してしかるべきたんぱく質が出来るという事です。つまり、

というだけじゃなくて、

  • 遺伝子 + 環境 -> 遺伝子からたんぱく質を作る何か + 遺伝子 + 環境 -> 遺伝子からたんぱく質を作るもっと凄い何か + ...

という風な連鎖のがあるわけで、遺伝子プラス先祖代々受け継いだ秘伝のたれのような細胞質と環境の結果、僕たちの体が出来ていると聞きました。

なんか、今のプログラミング言語というのは、遺伝子だけで全部作ろうとしている感じがするのです。

プログラムにおいて、細胞質や周りの環境とは何だろうかと考えると、もちろんデータもそうだし、入出力の文脈もそうだと仮定します。要するにプログラムをどのように使うかという事です。例えば printf() というと、コンピュータから見るとメモリを右から左へコピーするだけなんだけど、人間からすると何か意味のある文字を出して欲しいわけで、プログラマはその前提でコードを書くわけです。あれ?でもコンピュータの方は知ったことでは無いので、もしかしたら細胞質とは言えないのかも知れない。

でももうちょっと形式的な「お約束」はあります。つまり、一つのメソッドが一つの意味を表すのではなくて、複数のメソッドが纏まった意味空間を表すというのはどうでしょう。

例えばミクロな例では、足し算の演算子があると分配法則や結合法則が成り立つ物と普通は考えます。マクロな例では、パターン言語というのがあります。パターン言語というのはある決まった仕事の流れのパターンに名前をつけた物で、例えばオブザーバパターンでは状態を持つ側と観察する側のお約束がきちんと守られていて、違う事をするプログラマがいたらそれはこの素人がと言われるわけです。中間くらいの例では行列で三次元を表すとか。

こういった意味空間があると、そこが DSL を作る余地になるわけです。例えば画面設計で決まった処理の繰り返しがあれば、それに適した設定言語を作るなり XML にくくりだすなりすればよいです。こうして、小さなメソッドの集まりが一かたまりの意味空間を生み、そこからまた言語が生まれるという事で、何となく遺伝子と細胞質の比喩が生きてくるような気がします。

小さな Smalltalk パーサを書いて、それで大きな Smalltalk を書いてゆくというプロセスも、細胞が環境自体を変えながら成長する様に似ていると思います。似てないかも知れないけど、他にいい例が思いつかないからそういう事にします。今の僕の個人的な問題は、ある言語ではこれが出来て、ある言語では出来ない、例えば eToys では eToys が書けないし、HTML でウェブブラウザは書けないという、本質的な違いはなんだろうなという事です。Smalltalk のような立派な言語で処理系が書けるのはもう分かってるのです、問題は、どこまで簡単な、しかも人間から見て簡単な言語で書けるかです。チューリング完全だとかそういう話じゃなくて、なんか、あると思うのです。なんか思いついたらまた書きます。