文芸的プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』
文芸的プログラミング(Literate Programming)とは、
ここでは前者の意味を説明する。
通常プログラミングでは、プログラムソースと関連するドキュメントを別々のファイルに記述するが、これには管理や更新内容の反映が負担となる。
この問題に対して、文芸的プログラミングではドキュメントとソースを併記したWEBと呼ばれるメタソースを記述し、そこからドキュメントとソースコードをそれぞれ生成させることで情報の一体性を高めている(これらのメカニズムをWEBシステムと呼ぶ)。
単にドキュメントとコードが併記されるだけであれば、通常のコメントやPerlなどに見られる埋め込みドキュメントと違いはないが、文芸的プログラミングではさらにマクロを利用することで、任意のコード断片にドキュメントを対応させる。これはいわゆるハイパーリンクに相当し、コードの実行順と関係なく自由な順序で内容を記述することができる。例えば、
1.中心アルゴリズム do_something()は中心となる処理内容である。 <a routine> == item.do_something(). 2.メインループ あるコレクションの全ての内容を<中心アルゴリズム>で処理する。 <main> == for item in collection <a routine>
のような形態である。これは最終的に
for item in collection item.do_something().
というコードを出力する。
内容への言及を純粋に関連する部分だけを取り出して行うために、コメントとは全く異なる意味作用と見るべきであろう。(特に実プログラム中に埋め込まれたコメントは必要以上に簡略になりがちであるが、記述が中心となる文芸的プログラミングならばその点は抑制される)
現実には、変化の激しいソース記述を全て文芸的プログラミングで行うのは無理がある。しかし複雑なアルゴリズムに関する内容や、配布を意識したオープンソースでは応用の可能性があるといえる。
クヌースによるオリジナルのWEBシステムでは、PascalコードとTeXフォーマットのドキュメントを生成していた。しかし文芸的プログラミングの概念は特定の言語やフォーマットとは独立で、その後各種の言語に多くの移植が行われている。