文芸的プログラミング
[Wikipedia|▼Menu]
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%;font-size:90%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}html.client-js body.skin-minerva .mw-parser-output .mbox-text-span{margin-left:23px!important}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}

この記事は検証可能参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方
出典検索?: "文芸的プログラミング" ? ニュース ・ 書籍 ・ スカラー ・ CiNii ・ J-STAGE ・ NDL ・ dlib.jp ・ ジャパンサーチ ・ TWL(2021年9月)

文芸的プログラミング(ぶんげいてきプログラミング、: 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フォーマットのドキュメントを生成していた。しかし、文芸的プログラミングの概念は、特定の言語やフォーマットとは独立で、その後各種の言語に多くの移植が行われている。
関連項目

インテンショナルプログラミング

コメント (コンピュータ)

Javadoc

Coqdoc

形式手法 仕様記述言語VDM等によって可読性のある厳密な仕様定義を行い、コード生成までも可能とする。










ドナルド・クヌース
書籍

The Art of Computer Programming

The Complexity of Songs(英語版)

Computers and Typesetting(英語版)

Concrete Mathematics

Surreal Numbers(英語版)

Things a Computer Scientist Rarely Talks About

Selected papers series(英語版)

ソフトウェア

TeX

MIXAL

MIX

MMIX

GNU MDK(英語版)


フォント

AMS Euler(英語版)

Computer Modern

METAFONT

Concrete Roman(英語版)

文芸的プログラミング

WEB

CWEB(英語版)

アルゴリズム

クヌースのアルゴリズム X(英語版)

クヌース・ベンディックス完備化アルゴリズム

クヌース-モリス-プラット法

クヌースのシャッフル

ロビンソン-シュエンステッド-クヌース-対応(英語版)

タラブ・パルド-クヌース法(英語版)

ダイクストラ法の一般化

Trabb Pardo?Knuth algorithm(英語版)

その他

ダンシング・リンク(英語版)

クヌース賞金小切手

クヌース賞

Man or boy 評価法(英語版)

2i進数(英語版)

-yllion(英語版)

度量衡のポジテビア系(英語版)

クヌースの矢印表記

カテゴリ


記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:10 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef