プログラミング環境への妄想を書きなぐる

http://d.hatena.ne.jp/textfile/20070612/manを見た。コードを書くのは好きだが、マニュアルやドキュメントを書くのはめんどくさい。いいきっかけなので、今かかえてる妄想を吐きだしておく。

  • 実行可能なコードでありながら、
  • 記述の抽象度が高く、
  • UML程度(あんま詳しくないけど)に把握可能な粒度の記述も可能な言語仕様であって、
  • そこにひとことふたことコメントを記述すれば、
  • そのままマニュアルとしても通用する

なんていう言語は実現可能だろうか?

まず、(今よくあるような)関数定義を羅列するスタイルだけでは、ちょっとのコメントだけでマニュアルとして通用するものにはならないだろう。少くとも、ぱっと見て期待する外部仕様がわかるようなもんじゃないといけない。例えばテストも同時に記述しないといけない、とか?あ、事前条件、事後条件とかを記述する言語もあったな。Eiffelだっけ?Satherだっけ?*1。なんかそんな雰囲気で。

あと、さすがにUMLくらいの抽象度粒度の記述だけから実行可能になるとは思えないので、その下っかわの実装も書くことになるんだろう。実際に動作するコードは、抽象化のレベルが何層も積み重なってるもんだ。で、大抵はコードに手を加え続けていくと最初は綺麗だった抽象化の層もいつの間にか混沌としてしまう。
設計が悪い、といってしまえばそれまでなんだけども、「プログラミングは設計である」という言葉もあるわけだし、がちゃがちゃ手を動かしてコーディングしている間でも、抽象化の層がわかりやすくなるような仕組みが言語側にあってもいいと思う。クラスとかモジュールとか名前空間とかはまさにそういう仕組みだけど、個人的にはまだ重たい印象があって「もっとさくさくはったり、付けなおしたりできる薄い膜」みたいなのが欲しい。
マニュアルやドキュメントに関しては、JavaDocやRDocみたいにソースから生成するやつはあるけど、ソースとは別物になってしまうのは嫌だ。少くとも、その「見易いドキュメント」上でソースそのものを編集したい。
ただし、テストや外部仕様なんかは見たくない場合もあるわけで、「どんな場合にでも常に見易い形式」が存在するとは思えない。とするとこれはもう文字列としてのソースの仕様だけの話じゃなくて、環境の話になってるわけだ。その時々で最適なビューを切りかえつつ、でもどのビューの上でもソース自体の編集は可能。さらに関数の型みたいに、推測できる所は推測して適当に補完や自動生成してくれるとなお良い。完全じゃなくていいから。でもって、emacsキーバインディングで全て操作できると嬉しいな。今時のIDESqueakのクラス/オブジェクトブラウザの表現力を高めたイメージ。
今時のIDEのどこが不満かというと、文字通り字面しか判断してくれないところ。もうすこし、書いてるコードの意味を理解してくれてもいいような気がする。抽象度の層をズームイン/ズームアウトするようにいったり来たりできたり、コールグラフをグラフィカルに図示してくれたりとか。インテリセンスによる補完や、eclipseリファクタリング機能(特に変数のリネームとか)はそれに近いけど、まだまだ全然足りない。

うーん、そうすると、これはつまりあれか、見た目はテキストエディタだがネットワークやツリー構造なんかも図示する高い表現力とemacsキーバインドで操作可能な柔軟な環境を作った上で、その環境がコードのみからプログラマの意図を汲み取りやすいような言語仕様の言語を動かせばいいのか?

…なんか途中から話があらぬ方向にねじまがってしまった気もするけど、これくらいにしておこう。結局、僕にとってプログラミングというのは自分の頭の回転の遅さと記憶力の無さをカバーしてくれる道具なので、もっともっと支援してくれる賢い環境が欲しいんだけなんだけど。

*1:両方そうだった