Введение

Язык программирования, основанный на макросах. Web – это компьютерная система программирования, созданная Дональдом Э. Кнутом как первая реализация того, что он назвал «литературным программированием»: идея о том, что программное обеспечение можно создавать как литературные произведения, внедряя исходный код в описательный текст, а не наоборот (как принято в большинстве языков программирования), в порядке, удобном для представления материала читателю, а не в порядке, требуемом компилятором. Web состоит из двух вспомогательных программ: TANGLE, которая генерирует компилируемый код на Паскале из исходных текстов, и WEAVE, которая создает красиво отформатированную, готовую к печати документацию с использованием TeX. CWEB – это версия Web для языка программирования C, а noweb – отдельный инструмент литературного программирования, вдохновленный Web (что отражено в названии) и не зависящий от конкретного языка. Наиболее значимыми программами, написанными на Web, являются TeX и Metafont. Современные дистрибутивы TeX используют другую программу, Web2C, для преобразования исходного кода Web в C.

Философия

В отличие от большинства других генераторов документации, которые ограничивают документацию комментариями, подход WEB заключается в написании статьи, описывающей процесс создания исходного кода. Подобно статьям в TeX, исходный код разделен на разделы в соответствии с логикой изложения. Например, в CWEB разделы кода органично вплетены в ход рассуждений.

Особенности

Может вводить код TeX как вручную, так и автоматически. Форматирует C-код для удобного чтения. Позволяет определять разделы и содержать документацию и код, которые затем можно включать в другие разделы. Код заголовка и основной C-код можно писать в одном файле, повторно использовать одни и те же разделы, а затем "распутать" в несколько файлов для компиляции. Используются директивы #line, чтобы все предупреждения и ошибки относились к исходному коду. Поддерживает подключение файлов. Файлы изменений, которые могут автоматически объединяться с кодом при компиляции или печати. Создает индекс идентификаторов и названий разделов в выходном документе.