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 является вполне корректной, фундаментальной конструкцией. Борьба с ним приведением к циклу while лишена смысла .… exit when (exit-cond) … end loop Кнут приводит удачный синтаксис для записи таких циклов. Его предложил О.Дал: Код: 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/ |