OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 02:07

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Литературное программирование
СообщениеДобавлено: Воскресенье, 18 Апрель, 2010 18:23 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Воскресенье, 18 Апрель, 2010 18:36 

Зарегистрирован: Четверг, 23 Апрель, 2009 18:01
Сообщения: 219
В своё время думал над таким подходом. Пришёл к выводу, что не надёжно. Код меняется. Если использовать свёртывание (folding), то при каждой правке нужно менять текст всей иерархии объектов.

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Воскресенье, 18 Апрель, 2010 19:46 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Программы слишком часто меняются.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Воскресенье, 18 Апрель, 2010 21:45 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Мне кажется, гораздо более подходяще будет говорить "грамотное" программирование, а не "литературное".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Воскресенье, 18 Апрель, 2010 22:34 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Да, вы правы, более правильно говорить "грамотное программирование".
Что вы можете сказать насчет самой сути данного метода?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Понедельник, 19 Апрель, 2010 06:41 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Уже в историческое время это где-то обсуждалось. Может, кто вспомнит.


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

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
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.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Вторник, 31 Август, 2010 08:00 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Не знаю, уместна ли здесь эта ссылка. Если нет, то пусть модераторы удалят сообщение.
Literate Programming by Donald E. Knuth


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Четверг, 02 Сентябрь, 2010 08:45 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Интересное чтение.
Кнут убедительно показывает, что цикл вида
Код:
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)
Жалко, что раньше не было возможности ознакомиться с этой работой Кнута.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Четверг, 02 Сентябрь, 2010 08:51 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Peter Almazov писал(а):
фундаментальной конструкцией.
Мало ли через что можно выражать всё остальное.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Четверг, 02 Сентябрь, 2010 10:51 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
А уж если вспомнить о многоветочном цикле, то убедительность Кнута тут же куда-то испаряется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Четверг, 02 Сентябрь, 2010 11:47 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Да ничего никуда не испаряется. Тем более, что сам Кнут не делает акцент на одноветочности, а как раз наоборот. Приведенная конструкция - не догма, а просто "first real solution to the n+1/2 problem." Надо читать оригинал, а не мои домыслы.
Короче, у кого есть мозги, тот прочтет и сделает выводы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Четверг, 02 Сентябрь, 2010 13:33 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Peter Almazov писал(а):
"first real solution to the n+1/2 problem." Надо читать оригинал
Да уж начитались Кнута, thank you very much :)

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Четверг, 02 Сентябрь, 2010 21:33 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Peter Almazov писал(а):
Кнут
Именно такой loop реализован в языке Ада. И при чём же здесь Кнут?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Четверг, 02 Сентябрь, 2010 22:00 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Четверг, 02 Сентябрь, 2010 23:16 

Зарегистрирован: Воскресенье, 03 Февраль, 2008 12:50
Сообщения: 249
Peter Almazov писал(а):
Даже самые экзотические конструкции где-нибудь, да реализованы.

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


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Peter Almazov писал(а):
многим знакомы ситуации
Ситуёвин много разных бывает, эттточно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Суббота, 06 Ноябрь, 2010 19:24 

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


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

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


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

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


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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Литературное программирование
СообщениеДобавлено: Воскресенье, 07 Ноябрь, 2010 13:06 
Аватара пользователя

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

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

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

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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB