Литературное программирование

Литературное, или грамотное программирование (ЛП; англ. Literate Programming) — концепция, методология программирования и документирования. Термин и саму концепцию разработал Дональд Кнут в 1981 году при разработке системы компьютерной вёрстки TeX.

Способ понять ЛП — вспомнить объяснения в курсах программирования, написанные фразами на «псевдокоде» на «человеческом языке». Они понятны, когда сам код труден, и скрывают под одной фразой-«оператором» множество других вложенных абстракций и/или программного кода на непосредственно машинном языке.

ЛП в некотором смысле есть «программирование на псевдокоде» произвольными фразами, которые затем раскрываются как точные макро с помощью утилиты из файла-текста, который включает в себя одновременно документированные текстовые объяснения концепций, сам код и псевдокод.

Содержание

Сущность подхода

  • ЛП есть цельный мета-подход к написанию программ, то есть «парадигма», применимая на мета-уровне к любой (процедурной, функциональной, декларативной, объектно-ориентированной) машинной программе на любом машинном языке;
  • ЛП есть система макро, создаваемая из фраз на человеческом языке, которые становятся «метаязыком» над конкретным языком программирования. Пользование этими фразами подобно объяснению алгоритмов на «псевдокоде», но в случае ЛП они становятся точными «новыми операторами» метаязыка;
  • программа и документация более не пишутся как машинный код с примечаниями. Само конструирование программы идет в порядке, определяемой логикой мысли (или объяснений), где макро на «псевдокоде» играют роль абстракций (над абстракциями и/или кодом) для ясности мысли. Меняется кардинально порядок следования в программе, он не машинный, а тот, который требует логика;
  • технически ЛП делается с помощью утилиты, которая одной командой запускает препроцессор, раскрывает все макро и «спутывает», «запутывает» («tangle») логическое изложение в машинный код, который потом можно компилировать или запускать как обычно. Другая команда «сплетает» («weave») из этого общего для программы и объяснений файла сформатированную документацию (для печати, веба и т. д.).

Другими словами, программа мыслится не как иерархия, top-down или bottom-up, но как «взаимозависимая сеть концепций» (отсюда название первой системы ЛП — «Web») и создается как «поток мысли», проходящий по этой сети в связном, логичном виде, что внешне делает форму описания похожей на литературное эссе. Программист, таким образом, отказывается от привязки к предписанному машиной порядку.

Ошибочные представления

Система ЛП, которую Кнут предлагал как альтернативу «структурному программированию» 1970-х годов, несмотря на доказанную эффективность[источник не указан 634 дня], мало распространена из-за непонимания: многие думают, что ЛП — лишь система документирования или система форматирования обычных комментариев. На самом деле, программа практически без комментариев может быть ЛП, равно как и многословные примечания сами по себе не создают ЛП-подхода.

Самое частое непонимание относится к роли системы макро, позволяющей строить произвольные системы абстракций над абстракциями и к изменению порядка следования кусков от машинно-ориентированного к тому, который требует мышление. Так, абсолютно неверно считать ЛП-программированием использование систем документирования интерфейсов вроде JavaDoc, doxygen, DOC++, autoduck, POD.

Пример ЛП

Давайте изменим традиционные приоритеты в создании программ: вместо представления о нашей задаче как о создании инструкций «Что делать?» для компьютера сконцентрируемся на объяснении другим людям описаний нашего видения того, что под управлением программы должен делать компьютер.

— http://community.livejournal.com/ru_perl/249441.html

Существующие инструменты

  • WEB — система программирования для языка Паскаль
  • CWEB — версия WEB, разработанная для документирования С, C++ и Java
  • FWEB — система программирования для языка Фортран
  • Rambutan — система программирования для языка Java
  • Noweb
  • FunnelWeb
  • nuweb
  • CLiP, cnoweb

См. также

Ссылки

  • отрывок из примера из работы Кнута (пере-размеченного для «noweb» utility)
  • «Грамотное программирование» Андрей Зубинский, 22 мая 2002 г
  • Literate programming  (англ.)
  • Книга, полностью объясняющая философию Literate programming  (англ.)
  • Interview with Donald Knuth, Apr 25, 2008 (перевод на русский)


Литературное программирование.

© 2021–2023 sud-mal.ru, Россия, Барнаул, ул. Денисова 68, +7 (3852) 74-95-52