sam

Snow leopardでp9pも動いたことだし、samを触ってみた。samはacme以前にRob PikeがPlan9用に書いたエディタだが、私が物心ついた頃(笑)にはすでにacmeが存在したので、samを使ったことはなかった。samはacmeの前身というイメージがあったので、漠然と似たようなコンセプトのエディタかと思ったんだけど、viとemacsぐらいの違いがあるかも。まぁ、acmeemacsと全然違うのだけど、samはviというかedに強い影響を受けている。

ここでちょっと歴史の話を。edはKen ThompsonがQEDというラインエディタに影響を受けて作ったもの*1。この際にマルチバッファ機能をミニマリスト的観点から意図的に削るなどの単純化を行っている。UNIX正規表現が使われたのもedが最初だ。viはBill Joyがedのコマンドセットをベースに作ったスクリーンエディタ。正確にはedから派生したexというラインエディタのvisual modeをデフォルトにしたコマンド。Linuxなどでは素のviがインストールされていることはまれで、vimがデフォルトになっていることが多い*2

閑話休題。samはGUIベースのフルスクリーンエディタなのだが、vi以上にedの影響を受けているともいえる。まずスクリーンショットを見てもらおう。

ぱっと見、rioみたいなウィンドウシステムのようにも見えるが、一番上の青いウィンドウがコマンドウィンドウで、それ以外がテキストウィンドウである。テキストウィンドウではマウス操作でカット・アンド・ペーストができる。一方、コマンドウィンドウはed+αのコマンドを受け付けて、フォーカスされているテキストウィンドウに送ることができる。このため、viのようにモード切り替えを必要としない。また、vimのコマンドは何百個あるのか知らないが、samのコマンドはすべてで32個である。ベル研のミニマリズムはここでも発揮されている。

コマンドウィンドウというのは今まで見たことのないコンセプトだけど、これがacmeのタグになっていくのかな。また、samはオーバラップウィンドウだったのに、acmeでタイリングウィンドウになったところも興味深い。

実装に関して言うと、samはGUI操作を処理するフロンドエンドsamtermとファイル操作を処理するバックエンドsamから構成される。例えば、手元のマシンでsamtermを動かして、処理の重いファイル操作はリモートマシンで処理することも可能だ。

Eric Raymondは、著書TAOUPの中の「ソフトウェアの複雑さ」を取り上げた章で、ケーススタディとしてテキストエディタを取り上げている。Plan9日記ではミニマリズムな設計を支持する立場を取っているが、Eric Raymondの意見はバランスのとれたものだと思うので(viに関してはやや辛めか)、興味のある方は一読を。

クリーンなミニマリズムは、さまざまな水準でよいという感じを与えるものだし、放っておくとつまらない機能でごてごてとしたものになりがちなソフトウェアシステムの傾向に歯止めをかけるための効果的な手段であることは間違いない。しかし、富と同様に、計算資源や人間の思考時間も、死蔵されることではなく、消費されることによって初めて意味を持つ。他の形態の美学と同様に、設計のミニマリズムが自己規制の価値ある形態であることをやめ、単なる自己満足になってしまうのがどこかということは考えてみなければならない。設計のミニマリズムが、富を有効活用する代わりに、美学を実践している感覚に溺れる手段となることもあるのだ。
ーー Eric Raymond

The Art of UNIX Programming

The Art of UNIX Programming

*1:QEDはSDS940という世界初の商用タイムシェアリングマシン上でButler LampsonとPeter Deutschによって開発された。Ken ThompsonはQEDをCTSSに移植する際、正規表現の機能を追加したりしている。

*2:オリジナルに近いviについてはProject Heirloomが参考になるかも。