Оригинальный автор(ы) | Норман Рэмси |
---|---|
Первоначальный выпуск | 1989, 35–36 лет назад |
Стабильный релиз | 2.12 / 28 июня 2018 г. ( 2018-06-28 ) [1] |
Репозиторий |
|
Написано в | C , AWK и значок |
Операционная система | Кроссплатформенный |
Доступно в | Английский |
Тип | Грамотное программирование |
Лицензия | Лицензия BSD-2-Clause |
Веб-сайт | www.cs.tufts.edu/~nr/noweb/ |
Noweb , стилизованный под строчные буквы как noweb , — это инструмент для грамотного программирования , созданный в 1989–1999 годах Норманом Рэмси [1] и разработанный так, чтобы быть простым, легко расширяемым и независимым от языка. [2] [3]
Как и в WEB и CWEB , основными компонентами Noweb являются две программы: « notangle », которая извлекает «машинный» исходный код из исходных текстов, и « noweave », которая создает красиво отформатированную печатную документацию.
Noweb поддерживает TeX , LaTeX , HTML и бэк-энды troff и работает с любым языком программирования. Помимо простоты, это главное преимущество перед WEB , которому нужны разные версии для поддержки языков программирования, отличных от Pascal . (Отсюда необходимость CWEB , который поддерживает C и подобные языки.)
Текст ввода Noweb содержит исходный код программы, перемежаемый документацией. Он состоит из так называемых кусков , которые являются либо кусками документации , либо кусками кода .
Кусок документации начинается со строки, которая начинается со знака @, за которым следует пробел или новая строка. Кусок документации не имеет имени. Куски документации обычно содержат LaTeX, но Noweb также используется с HTML, простым TeX и troff.
Фрагменты кода имеют названия. Фрагмент кода начинается с
<<имя фрагмента>>=
на отдельной строке. Двойная левая угловая скобка (<<) должна быть в первом столбце.
Каждый фрагмент завершается началом другого фрагмента. Если первая строка в файле не отмечает начало фрагмента, предполагается, что это первая строка фрагмента документации.
Инструменты Noweb не обрабатывают фрагменты кода особым образом — они могут быть размещены в любом порядке и, при необходимости, просто объединяются. Ссылки на фрагменты в коде разыменовываются, и весь запрошенный исходный код извлекается.
Это пример программы «Hello World» с документацией:
\section { Привет, мир }Сегодня я проснулся и решил написатьнемного кода, поэтому я начал писать Hello World на \textsf C.<<привет.c>>=/* <<лицензия>>*/#include <stdio.h>int main(int argc, char *argv[]) { printf("Привет, мир! \n "); вернуть 0;}@\noindent \ldots затем я сделал то же самое в PHP.<<привет.php>>=<?php /* <<лицензия>> */ echo "Привет, мир! \n ";?>@\раздел { Лицензия }Позже в тот же день какой-то юрист напомнил мне о лицензиях.Итак, вот оно:<<лицензия>>=Данная работа находится в общественном достоянии.
Предполагая, что приведенный выше код помещен в файл с именем «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 определяет определенный формат файла, и файл, скорее всего, будет чередовать три разных формата (Noweb, LaTeX и язык, используемый для программного обеспечения). Это не распознается другими инструментами разработки программного обеспечения, и, следовательно, использование Noweb исключает использование инструментов UML или документирования кода.