モダンな箱庭 と 古典的だけどシームレスな世界

JavaBlackさんち経由、vimやEmacsを「使いこなす」なんてやっていいのは20世紀までだろ - Togetter

Software Design (ソフトウェア デザイン) 2011年 05月号 [雑誌]

Software Design (ソフトウェア デザイン) 2011年 05月号 [雑誌]

vimEmacsを『使いこなす』なんてやっていいのは20世紀までだろ」と言われましても、わたしは 21世紀になってから Emacs を覚えた口で、そういわれてしまうと悲しくなってしまいます。ちなみに一番最初に使えるようになった開発環境が C++ Builder で、その後細かいのを省くと 秀丸xyzzyEmacs という順番で、なんかさかのぼってる感じはたしかに(^^;

井戸端に咲いた華に突っこみを入れるのは野暮というものですし、的確なタイミングの突っ込みは JavaBlackさんが 入れているので 今更なにを語らんや、なのですが、反論のようであり、同じことを言っているようでもある*1、ちょっと違う切り口でおしゃべりしたいことを思いついたので、エントリーにしてみました。


* * *


わたしが Emacs を好むは、それが「テキスト」エディタだからです。

皆さんあんまり気がついてないかもですが、テキストエディタってすごいのですよ。わたしが今こうして日本語で文章を書くのと同等の感覚と同じ道具でプログラムを書くことが出来ちゃう。一見全然違う二つなのになのにそのどちらの使い勝手も妥協してないんです。わたしはただ、記述する言語を日本語からプログラミング言語に切り替えるだけ。それはとてもシームレスで快適なことです。だからテキストエディタがすきなのです。

また、テキストエディタはその心理的な軽さも魅力です。

IDE はとても日本語で文章を書く道具とはいえませんが、プログラム方面の ポストテキストエディタとしてのIDE の立ち位置を、日本語方面でたとえるならば Word でしょうか。件のつぶやき群は、そうですね、「いまどきテキストエディタで文章を書くなんてありえないよな、Word つかえよ Word。Outlineモードとか使いこなせないなんて 21世紀に ぶっちゃけありえな〜い!」と同じように感じるのです。


* * *


そんな「軽さ」とプログラムも文章も同じように扱える「シームレスさ」が魅力のテキストエディタですが、ことプログラムを書くことに注視するならば、IDEにはかないません。

IDE は プログラムを書くためだけに特化し進化し続けたツールです。インテリセンスやコード保管、デバッガやインスペクタと一体化した IDE は使いこなせば大きな武器です。コンピュータの普段使いとシームレスでなくなることくらい、甘受すべきものでしょう。特に年々の大規模になるプログラムに退治するためには ツールの重厚化も当然なのかもしれません。

でもそこは逆転の発想もありなんじゃないかな、とわたしは思います。開発環境側を言語の複雑さにあわせて進化させるではなく、シンプルな開発環境にあわせて言語側を設計していくのも一つの方法だと思うのです。IDEの支援がなくても、テキストエディタでテキストとしてプログラムを書き下すのが快適な言語があればいい。もったいぶってなんですが、ようするに Litghtweight Language (LL) のことです。

LLとは まつもとさんの定義によると

  • Lightweight Language は「脳力」をより少なく消費する言語である
  • 「脳力」はプログラミング活動中に消費される仮想的なパワーである
  • 消費「脳力」の総和が少ないことももちろん重要だが、瞬間最大「脳力」が大きすぎるのもよろしくない

となります。

LLは 言語文法が脳のリソースを専有しないように設計されています。LL の多くが スクリプティング言語を出自としているのも、そういうニッチに最適化したすると言語が「軽く」ということがあると思います。*2


* * *


さて、プログラムと文章をシームレスに扱うのに、なぜテキストを用いるのか ですが、それは やっぱり Unix の哲学 の影響かなぁ、と思っています。

Unixの哲学

  • 一つの機能を確実に実行するプログラムを書く。
  • ほかのプログラムと一緒に動作するプログラムを書く。
  • テキストストリームを処理するプログラムを書く。それが、汎用的なインターフェイスだから。

(強調はわたし)

UNIXの1/4世紀 (Ascii books)

UNIXの1/4世紀 (Ascii books)

Unix において、「一つの機能を確実にこなす小さなツールを組み合わせること」のほうが (特に vi vs Emacs の文脈では) 注目されがちですが、それよりもむしろ 何でもテキストなほうが重要だと思うのです。

一番の共通項としては、文字の入力と出力や、テキストがすべてであり、データはテキストストリームの羅列にしか過ぎないこと、それはアーカイブにも当てはまること

そして今のよく見るOS が Unix の影響を直接的/間接的に強く受けています。「何でも『ファイル』」な世界観と、テキストは「第一級のオブジェクト」として不思議なくらいひいきにされてます(「テキストファイル」と「それ以外」に二分とか)。それ以外を操作するときは「キャスト」が必須みたいな感じとか。

で、テキストを第一級として扱う世界だから、すべてをテキストで扱うのは楽だし心地良い。本当はテキストなんて「古い」ものじゃない新しいもの――たとえば「オブジェクト」とかで扱いたいと思うかもしれない。けれど「なんでもオブジェクト」はこの OS の世界でははっきり言って無理くさい。

つまりです、この話は、OS という広い世界の中でシームレスに振舞える(ただし代償として古臭いテキストと戯れなければならない)テキストエディタと、IDEという(プログラム開発に閉じているけれど)モダンな世界にひきこもるれる IDE 、という2軸のの組み合わせの話なんじゃないかな?――ということが言いたかったのです。


あの 一連のつぶやきを見てせっかくこういう面白い話をしているのに――しかも Unixの哲学みたいなところにニアミスしてるのに、ちょっと頭が固くなっていて「古い⇔新しい」という軸でしか話がすすんでいない(それに単純に「良い⇔悪い」を重ね合わせてしまっている)のはもったいないなぁ、と思ったのです。*3


* * *


え?「そんなアンビバレンツみたいな話納得出来ない」「モダンでシームレスな世界にすればいいじゃん」・・ですって。――それはですね、ふふん♪「それなんて Smalltalk」ですよっ!

(それが言いたかっただけじゃん、とは言わないお約束)

*1:元が、結論に向け組み立てられたモノじゃない、流れるままの井戸端話なので、所により寄ったり離れたりしてるだけですが

*2:ときどき「Java は LL」とおっしゃられる方がいるのですが、やっぱりそれは変だと思います。Eclipse のサポート付き Java は確かに軽いかもしれません。でもそれは、喩えるならば、暗算を楽にする計算テクニックを論じるシチュエーションで「ソロバンをつかっても暗算は暗算だ」と主張するかのような、ある意味正しく、でも斜め上をいく発言だと思います。Litghtweight ではあるけれど、それは「Language」かな??と疑問が残ります

*3:具体的には「テキストエディタにひきこもってる」みたいな発言にすごく違和感を覚えました/確かにEmacs は引きこもりエディタではあるけれど、それはEmacsテキストエディタの顔のほうじゃなくって、Emacs統合開発環境の方の顔が持つ属性で、Emacs の良さはどこまで引きこもって見せても結局テキストエディタの顔が開いてるところで、逆に後者だけを抽出して進化させた方向のEclipseを持ち上げつつ「ひきこもりいくない!」は、ちょっと変じゃない?と思ったり