XMLパイプ

stdinからXMLを受けてstdoutにXMLを吐くプログラムを考えたことがある。GNU Toolsの多くが暗黙の前提としている行単位の処理をXML要素を単位として行えば良いのではないかというものだ。毎回パースするのは無駄なのでパース済みのXMLオブジェクトを標準では一緒に受け渡しした方が良いだろう。もちろん、シェルもXMLを理解して最後に利用者に返すときにpretty printする(XMLのまま吐き出すオプションも必要)。
利点はあらゆる既存のUnix的ソフトウェアに適合させることが出来るところだ。既存のパイプにも、ソケットの上にも載せて送ることが出来る。XMLを解釈出来ない既存のソフトウェアについてはパース・シリアライズするラッパーを通す必要があるが。
さらにはWindows的ソフトウェアへの拡張も考えられる。パイプの代わりにクリップボードを使うというのはどうか。例えば右クリックのメニューに「フィルターとして実行」というものを追加する。「フィルターとして実行」ではクリップボードの内容を標準入力として受け取って、最後に標準出力の内容をクリップボードに書き出すわけだ。Unixではコマンドラインの横方向に一次元で並んでいるコマンドを時間方向に並べたものに相当する。
パイプの拡張としてはid:m-hiyamaさんのJanusというのも読んだことがある。ちょっと申し訳ないがJanusは機動性が低すぎる。少なくとも私は使わないと思う。*1

*1:その理由。>Janusは、「テキスト(キャラクタ)型→より一般の型」「1本のポート→任意本数のポートセット」のような拡張を行う試みである。とあるのだが私にとってはどちらもUnixパイプからの退化に思える。型の制限は入力側が出力側の型を知らなければならないということに繋がる。それでは独立に作られたもの同士を組み合わせるのが大変だ。型変換のみのスクリプトをO(N)個も書く必要があるのではないか。ポートが任意本数というのは記述が面倒だ。GUIエディタを毎回立ち上げるなんてのは勘弁して欲しい。シェルに統合されればまだ良いけど。