Изменения

нет описания правки
Строка 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.