OberonCore
https://forum.oberoncore.ru/

Литературное программирование
https://forum.oberoncore.ru/viewtopic.php?f=27&t=2567
Страница 1 из 3

Автор:  Rifat [ Воскресенье, 18 Апрель, 2010 18:23 ]
Заголовок сообщения:  Литературное программирование

Наткнулся на статью, где применяется "литературное программирование" на языке Оберон: http://www.literateprogramming.com/rlp.pdf (english)
Хотел бы узнать, кто как считает, насколько переспективен данный метод "литературного программирования"?
Как вы считаете, удобно ли будет работать с такими исходниками, которые написаны в данном стиле?

Автор:  Александр Шостак [ Воскресенье, 18 Апрель, 2010 18:36 ]
Заголовок сообщения:  Re: Литературное программирование

В своё время думал над таким подходом. Пришёл к выводу, что не надёжно. Код меняется. Если использовать свёртывание (folding), то при каждой правке нужно менять текст всей иерархии объектов.

Код:
FOR i:=1 TO ...
<вывести символ>
END;


А не важно, что там внутри уже Read, а не Write символ? Содержимое контейнера изменилось, название дезинформирует. Пример примитивный, но если представить себе сложный код, то вполне реальный. Вдобавок, folding легко преобразуется в подпроцедуру с читаемым именем и той же функцией.

Автор:  Info21 [ Воскресенье, 18 Апрель, 2010 19:46 ]
Заголовок сообщения:  Re: Литературное программирование

Программы слишком часто меняются.

"Самодокументированный код".

Автор:  Валерий Лаптев [ Воскресенье, 18 Апрель, 2010 21:45 ]
Заголовок сообщения:  Re: Литературное программирование

Мне кажется, гораздо более подходяще будет говорить "грамотное" программирование, а не "литературное".

Автор:  Rifat [ Воскресенье, 18 Апрель, 2010 22:34 ]
Заголовок сообщения:  Re: Литературное программирование

Да, вы правы, более правильно говорить "грамотное программирование".
Что вы можете сказать насчет самой сути данного метода?

Автор:  Info21 [ Понедельник, 19 Апрель, 2010 06:41 ]
Заголовок сообщения:  Re: Литературное программирование

Уже в историческое время это где-то обсуждалось. Может, кто вспомнит.

Автор:  Валерий Лаптев [ Понедельник, 19 Апрель, 2010 08:00 ]
Заголовок сообщения:  Re: Литературное программирование

Rifat писал(а):
Да, вы правы, более правильно говорить "грамотное программирование".
Что вы можете сказать насчет самой сути данного метода?

Да вот в аннотации же написано:
Цитата:
Knuth’s Literate Programming system allows an author to design and
describe a program hierarchically according to the method of stepwise refinement. The
result is source code, which can be read sequentially like a book, section after section.

Метод пошагового уточнения... :)
Кстати, Роберт Мартин в новой книге "Чистый код" говорит о том же самом:
код должен читаться сверху вниз без возвратов вверх.

Автор:  Peter Almazov [ Вторник, 31 Август, 2010 08:00 ]
Заголовок сообщения:  Re: Литературное программирование

Не знаю, уместна ли здесь эта ссылка. Если нет, то пусть модераторы удалят сообщение.
Literate Programming by Donald E. Knuth

Автор:  Peter Almazov [ Четверг, 02 Сентябрь, 2010 08:45 ]
Заголовок сообщения:  Re: Литературное программирование

Интересное чтение.
Кнут убедительно показывает, что цикл вида
Код:
loop
  …
  exit when (exit-cond)
  …
end loop
является вполне корректной, фундаментальной конструкцией. Борьба с ним приведением к циклу while лишена смысла :).
Кнут приводит удачный синтаксис для записи таких циклов. Его предложил О.Дал:
Код:
loop: S; while ~B: T; repeat;
(в точке while происходит выход).
Эта конструкция покрывает и граничные случаи – циклы while и repeat, которые становятся ненужными.

Имеется простая аксиоматизация:
Цитата:
Пусть: {P}S{Q} {Q & B}T{P}
Тогда: {P} loop: S; while B : T; repeat; {Q & ~B } (стр. 49)
Жалко, что раньше не было возможности ознакомиться с этой работой Кнута.

Автор:  Info21 [ Четверг, 02 Сентябрь, 2010 08:51 ]
Заголовок сообщения:  Re: Литературное программирование

Peter Almazov писал(а):
фундаментальной конструкцией.
Мало ли через что можно выражать всё остальное.

Аксиоматизацию простой назвать нельзя.

Автор:  Info21 [ Четверг, 02 Сентябрь, 2010 10:51 ]
Заголовок сообщения:  Re: Литературное программирование

А уж если вспомнить о многоветочном цикле, то убедительность Кнута тут же куда-то испаряется.

Автор:  Peter Almazov [ Четверг, 02 Сентябрь, 2010 11:47 ]
Заголовок сообщения:  Re: Литературное программирование

Да ничего никуда не испаряется. Тем более, что сам Кнут не делает акцент на одноветочности, а как раз наоборот. Приведенная конструкция - не догма, а просто "first real solution to the n+1/2 problem." Надо читать оригинал, а не мои домыслы.
Короче, у кого есть мозги, тот прочтет и сделает выводы.

Автор:  Info21 [ Четверг, 02 Сентябрь, 2010 13:33 ]
Заголовок сообщения:  Re: Литературное программирование

Peter Almazov писал(а):
"first real solution to the n+1/2 problem." Надо читать оригинал
Да уж начитались Кнута, thank you very much :)

Реальный программер, ничё не скажешь :)

Автор:  Сергей Губанов [ Четверг, 02 Сентябрь, 2010 21:33 ]
Заголовок сообщения:  Re: Литературное программирование

Peter Almazov писал(а):
Кнут
Именно такой loop реализован в языке Ада. И при чём же здесь Кнут?

Автор:  Peter Almazov [ Четверг, 02 Сентябрь, 2010 22:00 ]
Заголовок сообщения:  Re: Литературное программирование

Не понял ссылки на реализацию в Аде. Даже самые экзотические конструкции где-нибудь, да реализованы. Но что это доказывает?
Тут дело в другом.
Я думаю, многим знакомы ситуации, когда логического выражения в заголовке цикла while не достаточно, требуется сделать еще что-то, хотя бы запомнить значения переменной. Тут начинаются муки выбора – оформить ли это вложенной функцией с побочным эффектом или испортить цикл конструкцией break/exit. Оба варианта кажутся плохими, приходится выбирать меньшее зло.
Так вот, эти мучения оказываются напрасными! Можно смело писать
Код:
цикл
  …
  … break
  …
конец цикла
При этом мы не теряем ни в строгости, ни в формализме. Аксиоматизация цикла приведена выше.

Автор:  kemiisto [ Четверг, 02 Сентябрь, 2010 23:16 ]
Заголовок сообщения:  Re: Литературное программирование

Peter Almazov писал(а):
Даже самые экзотические конструкции где-нибудь, да реализованы.

Это не такая уж экзотическая конструкция. Есть ещё и в Fortran. Я как-то интересовался этим вопросом.

Автор:  Info21 [ Пятница, 03 Сентябрь, 2010 06:31 ]
Заголовок сообщения:  Re: Литературное программирование

Peter Almazov писал(а):
многим знакомы ситуации
Ситуёвин много разных бывает, эттточно.

Автор:  Валерий Лаптев [ Суббота, 06 Ноябрь, 2010 19:24 ]
Заголовок сообщения:  Re: Литературное программирование

Просмотрел исходную статью еще раз.
В промышленном программировании такое пока представить сложно, но вот в обучающей среде для обучения программированию - на счет раз! Собственно, это именно то, что я сейчас и стряпаю в семантическом редакторе. Только обобщенный гипертекст сюда приплетать не нужно. А вот методу пошагового уточнения только так и обучать!

Автор:  Сергей Прохоренко [ Воскресенье, 07 Ноябрь, 2010 12:17 ]
Заголовок сообщения:  Re: Литературное программирование

Валерий Лаптев писал(а):
Просмотрел исходную статью еще раз.
В промышленном программировании такое пока представить сложно, но вот в обучающей среде для обучения программированию - на счет раз! Собственно, это именно то, что я сейчас и стряпаю в семантическом редакторе. Только обобщенный гипертекст сюда приплетать не нужно. А вот методу пошагового уточнения только так и обучать!


А что конкретно Вам понравилось в исходной статье?

И что такое "обобщенный гипертекст", и почему он плох?


Мне кажется, что литературное программирование в том виде, как его задумал Кнут, - уже устаревшая концепция. Она восходит к той эпохе, когда программная документация мыслилась как единая книга. Ради этого (по замыслу Кнута) программный код создавался как винегрет, чтобы из него затем автоматически формировались (1) документация в виде книги и (2) нормальный исходник без литературного словоблудия. В наш век документация в виде единой книги, оторванной от исходного кода и от интегрированной среды разработки, уже не актуальна. Учебник в виде книги удобен, но не документация. Не стоит тратить силы программистов на эту древнюю технологию формирования документации. Кнут, конечно, трудолюбивый писатель, но это не значит, что программисты должны превратиться в трудолюбивых писателей.

Поэтому мне нравится более современный подход Markus Knasmüller, который с первоначальным подходом Кнута имеет мало общего несмотря на схожее название "Reverse Literate Programming". Документация хранится вместе с исходным кодом и не извлекается в отдельную книгу. Читая исходный код можно сразу в том же месте обратиться к описывающей его документации.

В то же время, подход Markus Knasmüller является слишком текстоориентированным (тоже наследие прошлого). Глядя на код в семантическом редакторе, программист должен в первую очередь видеть структурную схему программы, а не plain text комментариев, пространные объяснения гиперссылок или словесный мусор макрокоманд препроцессора. Вот если что-то в схеме непонятно, то можно на соответствующий элемент или связь навести курсор и получить всплывающую подсказку.

К той же устаревшей текстоориентированности можно отнести и разбиение на секции, которые мыслятся как главы книги. Современная программа и без того хорошо структурирована, и незачем на эту естественную структуру накладывать еще и книжную структуру. Секции разрушают естественную и цельную структуру программы в сознании программиста, создают нечеткое представление об отношениях блоков кода и поэтому увеличивают риск ошибок. Комментировать нужно те элементы программной структуры, которые в ней уже есть: модули, классы, функции и т.п. Те задачи по разбиению программы на обозримые фрагменты, которые возлагались на секции, успешно решаются с помощью автоматического фолдинга, размещения функций на отдельных вкладках и т.п.

Автор:  Info21 [ Воскресенье, 07 Ноябрь, 2010 13:06 ]
Заголовок сообщения:  Re: Литературное программирование

Сергей Прохоренко писал(а):
Поэтому мне нравится более современный подход Markus Knasmüller, который с первоначальным подходом Кнута имеет мало общего несмотря на схожее название "Reverse Literate Programming". Документация хранится вместе с исходным кодом и не извлекается в отдельную книгу. Читая исходный код можно сразу в том же месте обратиться к описывающей его документации.
Горячо поддержу.
Но для этого нужен гуманный язык программирования. Вроде Оберона.
Подход Кнута -- это еще и подход фаната ассемблера.

Только почему Markus K.: разве понятие "самодокументированный код" не существовало давным-давно? Технологическое украшательство этой идеи, на мой взгляд, мало что добавляет.

Нужны еще, конечно, шаблонные циклы и т.п. в максимальном количестве :)

Сергей Прохоренко писал(а):
В то же время, подход Markus Knasmüller является слишком текстоориентированным (тоже наследие прошлого). Глядя на код в семантическом редакторе, программист должен в первую очередь видеть структурную схему программы, а не plain text комментариев, пространные объяснения гиперссылок или словесный мусор макрокоманд препроцессора. Вот если что-то в схеме непонятно, то можно на соответствующий элемент или связь навести курсор и получить всплывающую подсказку.

К той же устаревшей текстоориентированности можно отнести и разбиение на секции, которые мыслятся как главы книги. Современная программа и без того хорошо структурирована, и незачем на эту естественную структуру накладывать еще и книжную структуру. Секции разрушают естественную и цельную структуру программы в сознании программиста, создают нечеткое представление об отношениях блоков кода и поэтому увеличивают риск ошибок. Комментировать нужно те элементы программной структуры, которые в ней уже есть: модули, классы, функции и т.п. Те задачи по разбиению программы на обозримые фрагменты, которые возлагались на секции, успешно решаются с помощью автоматического фолдинга, размещения функций на отдельных вкладках и т.п.

Страница 1 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/