学会発表の準備で文芸的プログラミングについて調べているうちに、自分でも一度、やってみないといけないと思いたち、ちょっとやってみました。
使用したツールは”nuweb”です。MacPorts でさくっとはいりました。まずは以下を見て下さい。
中央の「Hi!」ボタンはもちろんだけど、左上のリンクをクリックするのをお忘れずに。ここを見ないと文芸的の意味がないですから。
越塚先生から、[[わかりにくいよとのご指摘:http://twitter.com/noball2270/status/22514150601%5D%5Dを受けたので、もう少し解説します。
まず元となっているのは[[このhello.wという名前のファイル:http://ken-wakita.net/research/literate/hello.w%5D%5Dです。このファイルは一見すると LaTeX のように見えるかもしれませんが、ウェブアプリケーションのソースコード (HTML + CSS + JavaScript) にその説明が交ぜ書きしてあります。このファイルのなかの ”@{”と”@}” で区切られた個所がそれぞれのファイルに相当するセクションで、これらを適宜、寄せ集めたのが出力になっています。LaTeX も別に特別扱いというわけでなく、同じような理屈から寄せ集められたものです。
こんな感じで、ソフトウェアの各部に解説を交ぜ書きすることで、ソフトウェア構築とともに、きちんとした文書ができあがるという仕掛けになっています。
当然の突っ込みとして「ソース中のコメントがやたらに詳しいだけと違う」と聞きたくなりますよね。そこが、ちょっと違います。例を使って説明してみます。
@o hello.html
@{
@
@
- 文芸的「Hello!」
- アプリケーションとドキュメントの元になった文芸的ななにか
@}
これは例題で使った HTML 全体にあたりますが、CSSとJavaScriptを読み込む個所が省略されています。これはソースを断片化する機能を用いているためで、これによってシステムの複雑性を任意の抽象度から切り取ることができます。
ここでは二つの断片を使っているのですが、生成された文書を読むとわかるのですが、これらの説明は必ずしもプログラムの流れをなぞる必要はないのです。プログラムを頭から理解したい順番に説明文を書くことができます。
腹が減ってきて、説明が拙くてすみません。詳しくは ”hello.w” の中身をおっかけてみて下さい。
** 感想
まぁ、面白いです。ツールとしての完成度はもう少しですね。よく似たツールに noweb というのがあるのですが、それと比べて単純になっていますが、もっと LaTeX の力を有効に使えばさらに単純で使いやすくなるような気がします。まだ、現状ではいくつか不満が残ります。
といって、僕が作り直すと Objective Caml で作ってしまうのだけど、それだと誰も使ってくれないよなぁ。。。