OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 16 Октябрь, 2019 13:19

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




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

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1213
Откуда: Украина, Киев
Info21 писал(а):
Но для этого нужен гуманный язык программирования. Вроде Оберона.
Подход Кнута -- это еще и подход фаната ассемблера.
У Кнута изначально был использован язык Паскаль.


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8184
Откуда: Троицк, Москва
Ярослав Романченко писал(а):
Info21 писал(а):
Но для этого нужен гуманный язык программирования. Вроде Оберона.
Подход Кнута -- это еще и подход фаната ассемблера.
У Кнута изначально был использован язык Паскаль.
Но его программистские предрассудки сложились еще до Паскаля.


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

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Сергей Прохоренко писал(а):
Комментировать нужно те элементы программной структуры, которые в ней уже есть: модули, классы, функции и т.п.
Не могу согласиться. Нужно комментировать именно те элементы структуры, которых в синтаксисе языка нет: они заданы неявно, а комментарий помогает понять их быстро и снижает ошибочность восприятия. Ну и комментировать, конечно, семантику. Может, Вы всё-таки имели в виду именно это?


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

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Комментировать нужно прежде всего смысл: зачем? Во вторую очередь способ: как? (Особенно крайние случаи: предусловия, постусловия.) Далее причины: почему именно так? В последнюю очередь: что делается? Это должно быть ясно из самого текста, если язык программирования читабельный. Сюда же инварианты.


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

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Valery Solovey писал(а):
Сергей Прохоренко писал(а):
Комментировать нужно те элементы программной структуры, которые в ней уже есть: модули, классы, функции и т.п.
Не могу согласиться. Нужно комментировать именно те элементы структуры, которых в синтаксисе языка нет: они заданы неявно, а комментарий помогает понять их быстро и снижает ошибочность восприятия. Ну и комментировать, конечно, семантику. Может, Вы всё-таки имели в виду именно это?


Я написал именно то, что имел в виду. Например, для конкретной функции можно написать в комментарии: для чего предназначена, какой алгоритм реализует, достоинства и недостатки, в каких случаях следует использовать, а в каких - нет. Классификация, данная выше Александром Ильиным, мне нравится. После обсуждения, доработки и конкретизации (для функций - одно, для циклов - несколько иное) её можно сделать стандартом в семантическом редакторе, чтобы облегчить написание комментариев. Разумеется, комментарии не должны относиться к абстрактным синтаксическим конструкциям, вырванным из контекста (типа, для чего вообще предназначены любые функции).

А зачем комментировать то, что даже не удостоилось чести быть воплощенным в синтаксическую конструкцию? Это и не составной оператор (цикл и т.п.), и не функция, и не параметр, и не указатель, и не переменная, и не класс, и не модуль, и не подсистема, а лишь набор чего-то с общим комментарием.


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

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Сергей Прохоренко писал(а):
А зачем комментировать то, что даже не удостоилось чести быть воплощенным в синтаксическую конструкцию?
Возможно, имеются в виду такие метаконструкты как паттерны проектирования (MVC, CRM и т.п.). Они имеют свойство быть "размазанными" по модулям, объектам и процедурам, но дают достаточно чёткий и связный смысл происходящего, если их иметь в виду при чтении. Следовательно, надо где-то их задокументировать.


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8184
Откуда: Троицк, Москва
Александр Ильин писал(а):
Комментировать нужно прежде всего смысл: зачем? Во вторую очередь способ: как? (Особенно крайние случаи: предусловия, постусловия.)
Хочется отнести пред- и пост-условия к "зачем".

Но по степени критичности инварианты я бы гораздо раньше поставил. Вместе с пред- и пост- в самое начало.
Инварианты, например, объектов -- существенная часть прочих объяснений, того же зачем.


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

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Александр Ильин писал(а):
Сергей Прохоренко писал(а):
А зачем комментировать то, что даже не удостоилось чести быть воплощенным в синтаксическую конструкцию?
Возможно, имеются в виду такие метаконструкты как паттерны проектирования (MVC, CRM и т.п.). Они имеют свойство быть "размазанными" по модулям, объектам и процедурам, но дают достаточно чёткий и связный смысл происходящего, если их иметь в виду при чтении. Следовательно, надо где-то их задокументировать.


Про паттерн CRM я ничего не знаю, в отличие от Customer Relationship Management.

Что касается паттерна MVC, то в моем понимании это просто выделение специализированных модулей, играющих три разные роли: ввод данных в систему пользователем (C), хранение и обеспечение целостности введенных данных (M) и отображение данных для пользователя (V) - с целью повышения гибкости и надежности программы. То есть, речь идет о модулях, к которым можно делать комментарии. В семантическом редакторе роли модулей могут явным образом указываться и зрительно выделяться (например, цветом значка или обозначением типа в таблице) - без необходимости делать текстовые комментарии о ролях модулей.


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9147
Откуда: Россия, Орёл
В современной компонентной системе уйма динамический связей между компонентами, вот в чём сложность.
Т.е. нет никакой статической сущности (места в программе), где спецификацию таких связей можно было бы прилепить.

Например, визуальный редактор типа САПР может содержать для работы с одним чертежом компоненты 7 независимых уровней, на каждом из которых что-то обеспечивается. Уровни могут связываться друг с другом абстрактно, через интерфейсы и шину сообщений. Проблемы с расчётной и визуализационной логикой при разделении на уровни вообще снимаются (поскольку если найдено удачное разделение с изоляцией, то логика сильно упрощается), но начинаются проблемы с взаимодействием - хотя бы порядок распространения обновлений-пересчётов между слоями и т.п. Просто на пределе возможностей головы иногда. И на пределе возможностей, которые даёт компонентное ООП (т.е. чувствуется, что ещё чуть-чуть - и адекватный контроль над событиями в системе можно потерять).

Вот очень нужны способы фиксировать такие связи в системе.


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

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


Цитата:
"Вы хочете песен - их есть у меня!"
(Неизвестный автор)


В традиционной текстовой программе, конечно, динамические связи прилепить некуда. Просто вместо текста нужен мощный GUI, например, https://sites.google.com/site/purebuilder/#TOC-11 . Щелкаешь по линии, изображающей связь, - и специфицируй себе, сколько хочешь. А существующие связи должны отображаться автоматически.


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9147
Откуда: Россия, Орёл
Вот у меня есть группа динамических объектов в куче, каким-то образом связанных и взаимодействующих. Между чем же будет устанавливать связи редактор? Редактор даже не может знать, куда же ведёт виртуальный вызов obj.Method, ибо это будет зависеть от динамического типа obj во время выполнения программы.

Проблема серьёзна, она в разнице между временем разработки-компиляции и временем выполнения. Любой язык описывает сущности времени разработки и связи между ними. Сущности времени выполнения появляются в процессе исполнения. И их жизнь и взаимодействие описываются иногда сложной системой связей-правил. Вот эту систему приходится восстанавливать в голове из статической программы. Как бы её описывать? Тут есть над чем крупно подумать.


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

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 151
Илья Ермаков писал(а):
..Как бы её описывать?
Есть пара предпосылок:
1. "отмазка":
    по аналогии с тройкой "синтаксис - абстрактный синтаксис - метаиодель". Можно посмотреть на подстановки в obj.Method как на операции, заданные определённым синтаксисом, который может находиться в рамках "некоего DSL". В рамках метамодели которого можно проверить правильность используемых подстановок или сгенерить все возможные подстановки. Но семантику процесса этот метод не покроет.

2. "костыль":
    динамические связи маршрута выполнения алгоритма можно отобразить на статические связи по данным. Проще говоря - можно попытаться сопоставить подстановкам obj.Method некий набор состояний и правил перехода между ними. В декларативной области. Сейчас модно использовать TGG(triple graph grammars) для установления и анализа подобных соответствий.

Всё это весьма криво, но необходимость в таких представлениях есть, поскольку некоторый опыт показывает - вещи, спроектированные на грани мозгового выверта("пределе возможностей головы.."), морально стареют раньше своих прототипов.


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

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


А в каком виде Вы "эту систему" восстанавливаете в голове? Это таблица, граф, семантическая сеть, полный граф, дерево, блок-схема, круги Эйлера-Венна, план-график или что-то еще? Можете это изобразить на рисунке? Элементы на схеме все одинаковые, или имеется несколько типов элементов? Может быть, достаточно Вашу схему формализовать и перенести в компьютер. Может быть, это будет не статический рисунок, а что-то типа видеоролика, в котором связи возникают и исчезают с течением времени, с возможностью остановки, прокрутки назад и замедленного воспроизведения.

Что касается "системы ... правил", то ведь существуют декларативные языки, таблицы истинности и проч. Почему бы этим не воспользоваться?


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9147
Откуда: Россия, Орёл
Сергей Прохоренко писал(а):
А в каком виде Вы "эту систему" восстанавливаете в голове? Это таблица, граф, семантическая сеть, полный граф, дерево, блок-схема, круги Эйлера-Венна, план-график или что-то еще? Можете это изобразить на рисунке?


Пока нет, но ищу. Ближе всего к этому n-диагональные схемы.


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

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


Google такого не знает. Можете прислать ссылку или описание или рисунок?


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9147
Откуда: Россия, Орёл
Пардон, n-прямоугольные схемы.
Описаны у Басса-Клементса-Кацмана, с. 239.

viewtopic.php?p=53725#p53725


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

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Илья Ермаков писал(а):
Пардон, n-прямоугольные схемы.
Описаны у Басса-Клементса-Кацмана, с. 239.

viewtopic.php?p=53725#p53725


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

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

Я где-то читал про такую матрицу, что интенсивность межмодульных связей обозначается цветом с целью выделения укрупненных модулей (подсистем) с минимальным обменом данных между собой. Вообще же такие таблицы (оба варианта) в качестве GUI семантического редактора неудачны, так как очень громоздки, и к ним никак не применить фолдинг (разве что прокрутку для матрицы). Гораздо удобнее граф (например, полный граф) или квадратная матрица, отображающая лишь связи модулей (без демонстрации данных), и дополнительная таблица, отображающая состав данных, соответствующих выделенной связи. Может быть и еще одна таблица - с характеристиками модулей.

А как n-прямоугольные схемы используете Вы?


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9147
Откуда: Россия, Орёл
Да, недостатки Вы правильно отметили.

Я рисую всё же матрицу, и размещаю разные компоненты по разным сторонам, без дублирования, насколько возможно (чтобы не было нужды рисовать размера n по диагонали схему), а в центре - поле клеток со связями. Типа того.


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

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Конечно, на безрыбье и рак - рыба. Можно и Excel'евской табличкой обойтись, и отслеживать все связи вручную. Но это трудоемко и чревато ошибками.

Для семантического редактора хочется иметь нормальный инструмент. Самый компактный вариант - это что-то типа вкладки "Зависимости объектов" в Microsoft Access. Он безусловно должен использоваться, и не только для модулей, но и для функций, объектов, переменных и т.д. Но кроме него надо иметь граф, одновременно отображающий связи между всеми модулями - с автоматической прорисовкой связей и с автоматической модификацией значков модулей в зависимости от их типов (ролей, содержания).


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9147
Откуда: Россия, Орёл
Да, не забывайте про важнейшую возможность: все "ракурсы" системы редактор должен уметь выводить на "твёрдую копию". Понимаемость документа на бумаге гораздо выше, чем с экрана - проверено.


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

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


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

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


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

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