| 原作者 | ノーマン・ラムゼイ |
|---|---|
| 初回リリース | 1989年、34~35年前 |
| 安定版リリース | 2.12 / 2018年6月28日[1] |
| リポジトリ |
|
| 書かれた | C、AWK、Icon |
| オペレーティング·システム | クロスプラットフォーム |
| 利用可能 | 英語 |
| タイプ | リテラルプログラミング |
| ライセンス | BSD-2条項ライセンス |
| Webサイト | このサイトについて |
Noweb (小文字ではnowebと表記)は、 1989年から1999年にかけてノーマン・ラムゼイによって作成された文芸プログラミングツールであり、[1]シンプルで拡張性が高く、言語に依存しないように設計されています。[2] [3]
WEBやCWEBと同様に、 Noweb の主なコンポーネントは 2 つのプログラムです。ソース テキストから「マシン」ソース コードを抽出する「 notangle 」と、きれいにフォーマットされた印刷可能なドキュメントを生成する「 noweave」です。
Noweb はTeX、LaTeX、HTML、troffバックエンドをサポートしており、あらゆるプログラミング言語で動作します。シンプルさに加えて、これがPascal以外のプログラミング言語をサポートするために異なるバージョンを必要とするWEBに対する主な利点です。(そのため、 Cや同様の言語をサポートするCWEBが必要になります。)
Nowebの入力
Noweb 入力テキストには、ドキュメントがインターリーブされたプログラム ソース コードが含まれます。これは、ドキュメント チャンクまたはコード チャンクと呼ばれるチャンクで構成されます。
ドキュメント チャンクは、アット マーク (@) で始まり、その後にスペースまたは改行が続く行で始まります。ドキュメント チャンクには名前がありません。ドキュメント チャンクには通常 LaTeX が含まれますが、Noweb は HTML、プレーン TeX、troff でも使用されます。
コードチャンクには名前が付けられます。コードチャンクは
<<チャンク名>>=
1 行に 1 つだけ記述します。二重左山括弧 (<<) は最初の列に記述する必要があります。
各チャンクは、別のチャンクの開始によって終了します。ファイルの最初の行がチャンクの開始を示していない場合は、ドキュメント チャンクの最初の行であると見なされます。
コード チャンクはNoweb のツールによって特別に扱われるわけではなく、任意の順序で配置でき、必要な場合は連結されるだけです。コード内のチャンク参照は逆参照され、要求されたソース コード全体が抽出されます。
シンプルなNowebプログラムの例
これはドキュメント付きの「hello world」プログラムの例です。
\section {こんにちは世界}
今日、私は目を覚まし、書くことにしたコードがいくつかあったので、 \textsf C
で Hello World を書き始めました。
<<hello.c>>=
/*
<<ライセンス>>
*/
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello World! \n ");
0を返します。
}
@
\noindent \ldots次に、PHP でも同じことを行いました。
<<hello.php>>=
<?php
/*
<<ライセンス>>
*/
echo "こんにちは世界!\n ";
?>
@
\section {ライセンス}
同じ日の後ほど、ある弁護士が私にライセンスについて思い出させてくれました。
それで、ここにあります:
<<ライセンス>>=
この作品はパブリックドメインに置かれています。
上記のコードが「hello.nw」という名前のファイルに配置されていると仮定すると、人間が読めるドキュメントをHTML形式で抽出するコマンドは次のようになります。
noweave -filter l2h -index -html hello.nw | htmltoc > hello.html
... LaTeX形式 では:
noweave -index -latex hello.nw > hello.tex
マシンソースコードを抽出するには:
notangle -Rhello.c hello.nw > hello.c
notangle -Rhello.php hello.nw > hello.php
互換性
Noweb は特定のファイル形式を定義し、ファイルは 3 つの異なる形式 (Noweb、LaTeX、およびソフトウェアに使用される言語) を交互に使用する可能性があります。これは他のソフトウェア開発ツールでは認識されないため、Noweb を使用するとUMLまたはコード ドキュメント ツールが使用できなくなります。
参照
注記
- ^ ab 「Nowebホームページ」。2016年4月24日。 2018年3月21日閲覧。
- ^ Ramsey, N. (1994年9月). 「文芸プログラミングの簡素化」. IEEEソフトウェア. 11 (5): 97–105. doi :10.1109/52.311070. S2CID 18593796. 2018年12月3日閲覧。
- ^ Johnson, Andrew L.; Johnson, Brad (1997 年 10 月 1 日)。「Literate Programming Using Noweb | Linux Journal」。www.linuxjournal.com。2018年12 月 3 日閲覧。
外部リンク
- 公式サイト
- ノーマン・ラムゼイのホームページ
- notangle オンラインマニュアルページ
- noweb.py – Python で書かれたオープンソースの noweb クローン
- noweb.php – PHP での noweb クローン
