Строка 1: |
Строка 1: |
| '''Литературное программирование''', '''Грамотное программирование''' (ГП; {{lang-en|Literate Programming}}) — концепция, [[методология программирования]] и документирования, в которой программа состоит из прозы на естественном языке вперемешку с макроподстановками и кодом на [[Язык программирования|языках программирования]]<ref>Иногда методологию образно называют «литературным программированием»</ref>. Термин и саму концепцию предложил [[Дональд Кнут]] в 1981 году при разработке системы компьютерной вёрстки {{TeX|link=1}}. | | '''Литературное программирование''', '''Грамотное программирование''' (ГП; {{lang-en|Literate Programming}}) — концепция, [[методология программирования]] и документирования, в которой программа состоит из прозы на естественном языке вперемешку с макроподстановками и кодом на [[Язык программирования|языках программирования]]<ref>Иногда методологию образно называют «литературным программированием»</ref>. Термин и саму концепцию предложил [[Дональд Кнут]] в 1981 году при разработке системы компьютерной вёрстки {{TeX|link=1}}. |
| | | |
− | Грамотное программирование подобно объяснениям на лекциях по программированию, использующим фразы на «[[Псевдокод (язык описания алгоритмов)|псевдокоде]]» на естественном языке. Они вносят ясность в сложный код и скрывают под одной фразой множество других вложенных абстракций и программного кода, на формальном языке программирования.
| + | Литературное программирование подобно объяснениям на лекциях по программированию, использующим фразы на «[[Псевдокод (язык описания алгоритмов)|псевдокоде]]» на естественном языке. Они вносят ясность в сложный код и скрывают под одной фразой множество других вложенных абстракций и программного кода, на формальном языке программирования. |
| | | |
− | ГП в некотором смысле есть «программирование на псевдокоде» произвольными фразами, которые затем раскрываются как макросы с помощью утилиты из исходного файла, который включает в себя одновременно документированные текстовые объяснения концепций, сам код и псевдокод.
| + | ЛП в некотором смысле есть «программирование на псевдокоде» произвольными фразами, которые затем раскрываются как макросы с помощью утилиты из исходного файла, который включает в себя одновременно документированные текстовые объяснения концепций, сам код и псевдокод. |
| | | |
| == Сущность подхода == | | == Сущность подхода == |
− | * ГП есть цельный метаподход к написанию программ, применимый на метауровне к любой ([[Императивное программирование|процедурной]], [[Функциональное программирование|функциональной]], [[Декларативное программирование|декларативной]], [[Объектно-ориентированное программирование|объектно-ориентированной]]) программе на любом языке программирования; | + | * ЛП есть цельный метаподход к написанию программ, применимый на метауровне к любой ([[Императивное программирование|процедурной]], [[Функциональное программирование|функциональной]], [[Декларативное программирование|декларативной]], [[Объектно-ориентированное программирование|объектно-ориентированной]]) программе на любом языке программирования; |
− | * ГП есть система макросов, создаваемая из фраз на человеческом языке, которые становятся [[метаязык]]ом над конкретным [[Язык программирования|языком программирования]]. Пользование этими фразами подобно объяснению [[алгоритм]]ов на «псевдокоде», но в случае ГП они становятся точными «новыми операторами» метаязыка; | + | * ЛП есть система макросов, создаваемая из фраз на человеческом языке, которые становятся [[метаязык]]ом над конкретным [[Язык программирования|языком программирования]]. Пользование этими фразами подобно объяснению [[алгоритм]]ов на «псевдокоде», но в случае ЛП они становятся точными «новыми операторами» метаязыка; |
| * Программа и документация более не пишутся как код на языке программирования с примечаниями. Само конструирование программы идёт в порядке, определяемом логикой мысли (или объяснений), где макросы псевдокода играют роль абстракций; | | * Программа и документация более не пишутся как код на языке программирования с примечаниями. Само конструирование программы идёт в порядке, определяемом логикой мысли (или объяснений), где макросы псевдокода играют роль абстракций; |
− | * Технически ГП осуществляется с помощью утилиты, которая одной командой запускает препроцессор, раскрывает все макросы и «спутывает», «запутывает» («tangle») логическое изложение в код на языке программирования, который потом можно откомпилировать или интерпретировать как обычно. Другая команда «сплетает» («weave») из этого общего для программы и объяснений файла отформатированную документацию (для печати, веба и т. д.). | + | * Технически ЛП осуществляется с помощью утилиты, которая одной командой запускает препроцессор, раскрывает все макросы и «спутывает», «запутывает» («tangle») логическое изложение в код на языке программирования, который потом можно откомпилировать или интерпретировать как обычно. Другая команда «сплетает» («weave») из этого общего для программы и объяснений файла отформатированную документацию (для печати, веба и т. д.). |
| | | |
− | Другими словами, программа строится не как восходящая или нисходящая иерархия, а как «взаимозависимая сеть концепций» (отсюда название первой системы ГП — «Web») и создается как «поток мысли», проходящий по этой сети в связном, логичном виде, что внешне делает форму описания похожей на литературное эссе. Порядок изложения оказывается независим от требований транслятора языка. | + | Другими словами, программа строится не как восходящая или нисходящая иерархия, а как «взаимозависимая сеть концепций» (отсюда название первой системы ЛП — «Web») и создается как «поток мысли», проходящий по этой сети в связном, логичном виде, что внешне делает форму описания похожей на литературное эссе. Порядок изложения оказывается независим от требований транслятора языка. |
| | | |
| {{начало цитаты}} | | {{начало цитаты}} |
Строка 18: |
Строка 18: |
| | | |
| == Принятие == | | == Принятие == |
− | Система ГП, которую Кнут предлагал как альтернативу «[[Структурное программирование|структурному программированию]]» 1970-х годов, несмотря на благоприятные отзывы, не получила широкого распространения из-за отсутствия инструментальной поддержки и их интеграции{{sfn|Sametinger|1997|loc=18. Literate programming}}.
| + | СистемаЛП, которую Кнут предлагал как альтернативу «[[Структурное программирование|структурному программированию]]» 1970-х годов, несмотря на благоприятные отзывы, не получила широкого распространения из-за отсутствия инструментальной поддержки и их интеграции{{sfn|Sametinger|1997|loc=18. Literate programming}}. |
| | | |
| Другой проблемой явилась ориентация ГП на [[Пакетное задание|пакетную обработку]], тогда как системы программирования всё больше стали ориентироваться на средства с [[WYSIWYG]]{{sfn|Sametinger|1997|loc=18. Literate programming}}. | | Другой проблемой явилась ориентация ГП на [[Пакетное задание|пакетную обработку]], тогда как системы программирования всё больше стали ориентироваться на средства с [[WYSIWYG]]{{sfn|Sametinger|1997|loc=18. Literate programming}}. |
| | | |
− | Кроме того, распространению ГП помешали ложные представления о том, что «грамотные программы» должны быть монолитными и что ГП — противоположность гипертекста{{sfn|Sametinger|1997|loc=18. Literate programming}}. | + | Кроме того, распространениюЛП помешали ложные представления о том, что «грамотные программы» должны быть монолитными и что ЛП — противоположность гипертекста{{sfn|Sametinger|1997|loc=18. Literate programming}}. |
| | | |
− | Многие полагают, что ГП — лишь система документирования или система форматирования обычных комментариев. На самом деле, программа практически без комментариев может быть написана с применением подхода ГП, равно как и многословные примечания сами по себе не создают ГП-подхода. | + | Многие полагают, что ЛП — лишь система документирования или система форматирования обычных комментариев. На самом деле, программа практически без комментариев может быть написана с применением подхода ЛП, равно как и многословные примечания сами по себе не создают ГП-подхода. |
| | | |
| Самое частое непонимание относится к роли системы макросов, позволяющей строить произвольные системы абстракций над абстракциями и к изменению порядка следования кусков от машинно-ориентированного к тому, который требует мышление. Так, абсолютно неверно считать ГП-программированием использование систем документирования интерфейсов вроде JavaDoc, doxygen, DOC++, autoduck, POD. | | Самое частое непонимание относится к роли системы макросов, позволяющей строить произвольные системы абстракций над абстракциями и к изменению порядка следования кусков от машинно-ориентированного к тому, который требует мышление. Так, абсолютно неверно считать ГП-программированием использование систем документирования интерфейсов вроде JavaDoc, doxygen, DOC++, autoduck, POD. |