ЛЛИТЕРАТУРНОЕ ПРОГРАММИРОВАНИЕ объяснение на одном примере
Предыдущий мой пост (в ru_programming) был, наверно, слишком общим и заставил читателей гадать и представлять себе зверя, которого никто раньше не видел (вспомните средневековые рисунки бегемотов)
Для примера давайте рассмотрим HTML-документ созданный из одного классического примера - микро-программы для подсчета букв, слов и строчек в файле, юникс "wc" utility. Пример создан на программе "noweb".
An Example of noweb
Norman Ramsey
Dept. of Computer Science, Princeton University
Princeton, NJ 08544
The following short program illustrates the use of noweb,
a low-tech tool for literate programming.
The purpose of the program is to provide a basis for
comparing WEB and noweb, so I have used a program that has
been published before;
the text, code, and presentation are taken
from Chapter 12 of D. E. Knuth,
Literate Programming
(volume 27 of Center for the Study of
Language and Information Lecture Notes,
Stanford Univ., 1992).
Выпустим кусок текста, который написан как эссе, или объяснение, или "мысли во время программирования" - вскрывая логику, т.е. не документ пытающийся после создания программы как-то преставить её той или иной аудитории.
Интересное начинается ниже.
Заметьте, как авторы программы пишут кусок программного текста вставляя в него строчки-заголовки, на самом деле строчки, описывающие смысл выпущенного куска, и "сворачивающие" текст программы, позволяя читателю увидеть главное, о котором речь идет сейчас.
Строчки, служащие заголовками будут раскрыты в другом месте, они - ссылки, а ссылки "используется" и "определение" под отрывком дают возможность читателю увидеть целое.
Не надо понимать так, что это обычные гиперссылки в документации. НЕТ. Главная идея в том, что вы программируете в логическом, выбранном вами порядке, а utilities создадут из него верный исходник, правильный для компилятора или интерпретатора.
Другими словами, программу можно писать в логической последовательности, а не в последовательности предписанной правилами языка.
Now we come to the general layout of the main
function.
If the first argument begins with a `-', the
user is choosing the desired counts and specifying
the order in which they should be displayed.
Each selection is given by the
initial character (lines, words, or characters).
For example, `-cl' would cause just the
number of characters and the number of lines to
be printed, in that order.
We do not process this string now; we simply remember where it is.
It will be used to control the formatting at output time.
Теперь - следующая важная черта. Слишком часто приходится держать в уме слишком много. Например, на языке Ц определения переменных или includes приходится дописывать в начало файла.
"Литературное программирование" позволяет добавлять к уже существующим секциям, из любых мест в файле, где по логике добавления возникают. Заметьте "плюсики" в заголовках в отрывке ниже: мы дописываем в уже существующие и определенные куски те части, которые по логике возникли только сейчас
Now we scan the remaining arguments and try to open a file, if possible.
The file is processed and its statistics are given.
We use a do ... while loop because we should read from the standard
input if no file name is given.
Here's the code to open the file. A special trick allows us to handle
input from stdin when no name is given.
Recall that the file descriptor to stdin is 0; that's what we use
as the default initial value.
И, наконец, программа автоматически создает индекс всех ваших "заголовков" (т.е. логических кусков текста которые вы выделили и в собственном порядке описали в "литературной программе"),
а также - тех переменных, которые вы пометили как нужные для индексирования.
Я привел лишь 4 отрывка из всего текста, поэтому не все ссылки будут работать - но те, которые включены в эти отрывки будут. Можете попробовать. "D" изначает "определение", definition, а "U" - использование, usage.