著作一覧 |
(SGML。かっこつきなのはおれがこれっぽっちも当事者じゃないから)、HTML、XMLとくる流れってのは、一貫性がある。データはデータであり、そのデータにメタデータ(属性って言ってもいいけど)が付く。何か操作したければ、その外部に別の何かを持ってくる。ふつうはXSLT。データ+属性というのは、伝統的に筋が良い。おれが当事者であったものを考えても3270(6686)データストリーム、vt100(エスケープシーケンスを表示属性=メタデータとして考えた場合)、JCAとか全銀とか。これらがデータだというのは操作を含まないからだ。もちろん無理やり、vt100のエスケープシーケンスを操作(たとえば「下線をここから開始」とか)とみなすことも可能だけど、それよりはメタデータ(ここから始まるデータには下線が付くよ)と考えたほうが端末の透過性が高い=データとしての価値が高まる。
そうでないものの例として、XML-RPCがある。明示的に操作が意識されている。しかしそれでもメタデータを超えるものではない(ともいえないかな。位置によるデータ属性とみなせるかも)
別の流れがある。S式はご存知のとおり。データ=プログラムだ。リストとして考えればデータそのものかも。でもこのリストはいつだってプログラムと可換だ。これって、ノイマン式コンピュータに実はふさわしい。データもプログラムもデータだ。
その中間にDCE-RPCとかDCOMのMEOWとかのRPCのパケットがある。このパケットの中身はByValであればオブジェクトそのもの、ByRefであればオブジェクトに対する操作の指示。あるいは、HTMLのscript要素とか。jar+MANIFESTなんてのもある。ここにSILのように操作そのものというのを含めることもできるだろう。
美しいのはどちらだろうか? コンピュータが扱うものはすべてデータでありそれはプログラムたりえるのであれば、後の2者。データはデータで独立し、言語から完全に独立で、ハードウェアやソフトウェアに依存するものではないと考えるのなら、データは永遠だがプログラムは一過性と考えるなら、前者。
でもS式は実際にはLISPとは独立している。SILやJavaScriptやその他の移動コードやRPCパケットは微妙ではある。でも、その操作をネイティブに解釈する必要って別にないよね。本来ターゲットとしている言語の仕様が明確であれば。
すると最初のは実はいらぬ苦労をしていたのかも知れない。
でも待て、読めるぞ、人間が。
そこでバイナリー(可読文字以外のコードを含む)を除こう。すると
・XMLに代表されるデータ+メタデータによる言語独立したデータ記述言語のみによって構成されたデータ
・S式
・プログラムテキスト(HTMLのscript要素からSILまで幅広く含む。ではJavaのJarにしたってクライアントにJDKというかJavacが存在する前提であれば実はバイナリで送る必要はコードサイズとかを除けば無いことになり、実はここに含まれる。でも、RPCパケットのうちByRefなものは除外される) というあたりから移動コードとコードそのものの移動として考える。と、S式もやはりここに含まれるのか。
ここでS式も移動コードとしてくくってしまうと結局次の2種類となる。
・データそのもの
・移動コード
こうやって2元論に還元してしまうとなんのことはない、いつもおなじみの対立に落ち着く。
で、永遠なのはいつだって後者だ。LISPを見よ。でも永遠は実際にはそれほどは望まれているわけでもない。とりあえずの10年もてばよいの法則がなあなあで発動されるからだ。とりあえず10年、その時点で一番みんな(という幻想)がすきなのがなんとなく一番。適当ならその分弾力性だってあるわけだし。
つまりJSONってことだな。
ジェズイットを見習え |