言語ゲーム

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

Twitter: @propella

P2P 蟻塚 毛玉 ウェブ

締め切りに追われる逃避メモ。

複数のプロセスが協調して平行に動作する。プロセス間でやり取りされる情報は少なければ少ない程良いという平行プログラミング。たまーにこういう条件が必要になることはあるけれど、どちらかと言うと当たり前といういう程の物でもない。プログラムを書く時間の大部分は一つのプロセスの動作に集中していて、複数のプロセスが必要なのは特殊な場合だというのが普通だと思う。そう思って今まで僕らは幸せにプログラムを書いてきた。しかし、もしも平行プログラミングが必須になってしまったら、その幸せな状況は一変してしまう。

プログラミング言語の発達とは、大雑把に言ってメモリ空間をどのように構造化するかという話だ。ラベルによって意味づけし、サブルーチンとスタックによって木構造を作って、オブジェクト指向カプセル化する。メモリの扱いがこれだけスマートになった割りに、プロセスの扱いは到って原始的なままなんじゃないかな。21世紀にもなるのに、排他制御デッドロックを勝手に直してくれないし、稼働中のプロセスのガベコレもしてくれない。

予想めいた事を書くと、もう少しすると、平行プログラミングが当たり前になる。全体を予想しながら一つ一つは信頼出来ないノードを上手く協調させる曲芸のような能力が普通に必要になる。関数は戻り値を返さないし、サブルーチンからは戻って来れない。そこに何か大きな壁がある気がする。ウェブの画面遷移もプロセスと考えると既にもうその曲芸は日常と化している。

今やっと HREF Considered Harmful (by AVI) の意味が分かった。多分。P2P、蟻塚、ウェブ、マルチコアCPU は同じ課題を持つ。プロセスは本質的に長さを決定できない(計算が終了するかどうかを知る方法は無い)事が、メモリの構造化とは違う点だ。この新しい GOTO 問題は一体どう解決されるのだろうか。