DRAKON.SU

Текущее время: Четверг, 28 Март, 2024 13:44

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




Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: Понедельник, 13 Январь, 2020 23:05 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Дмитрий Бардынин писал(а):
события могут быть не в одном потоке, а в нескольких, например: событие операционной системы, событие программного окружения, событие внутри программы, события интерфейса. Думается, что полезно было бы их как-то разделять

Потоки нас не интересуют. Операционная среда защищает нас от потоков.
Требуется явно показать логику: алгоритм приостанавливается, пока не произойдёт событие.
В языке Erlang это конструкция receive.
В языке Go это конструкция select.

Дмитрий Бардынин писал(а):
Приведенный Вами в предыдущем сообщении пример отлично описывается Синхронизатором (как предлагалось мною и LKom), или Вопросом (традиционный вариант).

Да, неплохо.
Хотя традиционный вариант меня страшит. Может зря пугаюсь, ведь такой "цикл с коротким замыканием" -- легко узнаваемая идиома на дракон-схемах.


Дмитрий Бардынин писал(а):
Но почему вдруг оценка стала происходить в иконе "Ввод" мне не очень понятно.

Да, когда передача сообщения происходит путём установки флага, выражение в иконе "Ввод" действительно смотрится странно.
Синхронизатор, пожалуй, в данном конкретном случае смотрится лучше.

Хотелось бы иметь в ДРАКОНе универсальное средство, чтобы отображать ожидание событие вне зависимости от деталей реализации.
Вызов метода или установка флага извне -- это ведь детали реализации.
Как быть?

В Drakon.Tech для события применяется икона "Ввод". После иконы Ввод можно располагать любые другие иконы,
например, Выбор.
В этом примере алгоритм приостанавливается, пока не произойдёт событие onButtonClicked.
Автоматически сгенерированный обработчик события onButtonClicked записывает в переменную self.button код кнопки, которую нажали.
Затем обработчик продолжает выполнение алгоритма.
Изображение
Это работает, но выглядит громоздко.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Январь, 2020 17:08 

Зарегистрирован: Пятница, 08 Декабрь, 2017 18:24
Сообщения: 439
Откуда: Астрахань-Сочи
Степан Митькин писал(а):
Это работает, но выглядит громоздко.


Если мы говорим о нововведениях, то можно предложить чуть менее громоздкий вариант:
Вложение:
вариант2.png
вариант2.png [ 22.62 КБ | Просмотров: 7979 ]


Это "Ввод с выбором". Причем характер ввода (ожидает данных или нет) зависит от соответствующего источника этих данных, который либо перехватывает управление, либо нет.

Однако, мне не очень нравится неопределенность поведения устройства ввода, поэтому, как вариант, предлагаю дополнять иконку ввода обратной стрелкой. Тем более, что это близко к узнаваемой идиоме.
Вложение:
вариант3.png
вариант3.png [ 2.27 КБ | Просмотров: 7978 ]

Логику такой схемы просто понять: нет данных - ждем пока поступят, есть данные - продолжаем работу алгоритма


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Январь, 2020 11:07 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Дмитрий Бардынин писал(а):
Изображение
Логику такой схемы просто понять: нет данных - ждем пока поступят, есть данные - продолжаем работу алгоритма

Логику такой схемы понять не просто, потому что её можно понять двумя способами:
1. Ждать ввод данных, пока не придёт входное слово.
2. Продолжать ввод данных, пока поступают входные слова.

Дмитрий Бардынин писал(а):
Если мы говорим о нововведениях, то можно предложить чуть менее громоздкий вариант:
Вложение:
wait-bad2.png
wait-bad2.png [ 10.47 КБ | Просмотров: 7966 ]


А теперь взгляните на рисунок ниже:
Вложение:
wait-good.png
wait-good.png [ 2.44 КБ | Просмотров: 7966 ]

1. Ничего лишнего.
2. Намерение (ожидать одно из нескольких событий) выражено однозначно, ни с чем не перепутаешь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Январь, 2020 13:40 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Степан Митькин писал(а):
2. Намерение (ожидать одно из нескольких событий) выражено однозначно, ни с чем не перепутаешь.
А "синхронизатор" тогда зачем? В чём разница?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 09:50 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Alexey_Donskoy писал(а):
А "синхронизатор" тогда зачем? В чём разница?

Сходство
И икона "Синхронизатор", и макроикона "Ожидание события" останавливают алгоритм на какое-то время.

Различия
- Икона "Синхронизатор" останавливает алгоритм до момента, пока не пройдёт некоторый промежуток времени. Промежуток времени отсчитывается от иконы "Таймер".
- Макроикона "Ожидание события" останавливает алгоритм до тех пор, пока не произойдёт одно из указанных событий.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 10:17 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Maas-Maarten Zeeman (автор Erlang-модуля в DRAKON Editor) независимо от данной дискуссии связался со мной и указал на то, что в языке Дракон требуется поддержка событий.
Это совпадение говорит о том, что проблема с событиями давно назрела.

Затем Maas ознакомился с данной дискуссией. Он склоняется к следующему варианту, предложенному Дмитрием Бардыниным:
Вложение:
maas.png
maas.png [ 10.47 КБ | Просмотров: 7941 ]


Кроме того, Maas напоминает, что в практическом программировании надо учитывать таймауты.

Я предлагаю указывать таймауты так:
Вложение:
timeout-1.png
timeout-1.png [ 1.84 КБ | Просмотров: 7941 ]


Если требуется указывать длительность таймаута, то так:
Вложение:
timeout-2.png
timeout-2.png [ 5.85 КБ | Просмотров: 7941 ]


От какого момента отсчитывается таймаут? От кружочка.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 15:25 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Что такое таймаут?
Это новое понятие?
Его надо определить.
Цитата:
Если требуется указывать длительность таймаута, то так:
Значит, таймаут:
— может иметь длительность;
— может не иметь длительности.
Степан, правильно?
Или нет?

Как можно определить таймаут в рамках языка ДРАКОН?

Просьба указать сходство и отличие таймаута с иконой Пауза.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 15:29 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Владимир Паронджанов писал(а):
Что такое таймаут?

См. https://ru.wikipedia.org/wiki/Тайм-аут_(телекоммуникации)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 15:42 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Цитата:
Тайм-аут (телекоммуникации)

Материал из Википедии — свободной энциклопедии

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

Тайм-аут позволяет более эффективно использовать ограниченные ресурсы, не требуя дополнительного взаимодействия с объектом, заинтересованым в потреблении этих ресурсов.

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


Содержание

1 Литература
1.1 Применение
1.1.1 Специализировано
1.2 Часовая основа времени

Литература

Федеральный Стандарт 1037C и MIL-STD-188 [1] (1996)

Применение

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

Специализировано

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

Часовая основа времени

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

Интернет протокол в верхнем колонтитуле имени TTL (Time to live) — время жизни или действия, начальное время которому (при IPv4 в большем случае множество от 32), которое считывается с передатчика (роутер), до момента пока пакет данных не удаляется сведением TTL к нулю.

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

См. англовики https://en.wikipedia.org/wiki/Timeout_(computing)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 15:53 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Мне кажется, что для таймаута желательно приспособить икону Пауза.
Степан, ваше мнение?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 16:06 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Степан Митькин писал(а):
Maas-Maarten Zeeman (автор Erlang-модуля в DRAKON Editor) ознакомился с данной дискуссией. Он склоняется к следующему варианту, предложенному Дмитрием Бардыниным:
Изображение

Возражаю. Новая двухэтажная икона: Простой ввод + Выбор вносит путаницу, так как она почти неотличима от иконы Ввод.

В нижнем этаже возникает новая зрительная задача — нужно отличать прямоугольник (как в иконе Ввод) от параллелограмма (как в новой иконе Бардынина-Мааса).

Заставлять пользователя проводить такое различие считаю неоправданным — это дополнительная нагрузка на зрительную систему человека.

Это слишком сложно для человеческого глаза.

Язык ДРАКОН и так слишком сложен. Это ненужное переутяжеление.

Надо стремиться к простоте.
Кружок Степана Митькина — это простое и хорошее решение.

Кружок нельзя спутать ни с прямоугольником, ни с параллелограммом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 16:27 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Владимир Паронджанов писал(а):
Мне кажется, что для таймаута желательно приспособить икону Пауза.
Степан, ваше мнение?

В Драконе все давно решено:
Присоедините икону Синхронизатор к иконе Выбор блока Переключатель.
В иконе Синхронизатор впишите условия. К примеру - "Ждать событие в течении 20 сек.".
Установите иконы Вариант на каждое ожидаемое событие, на "Иное событие", на "20 сек. прошло".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 16:48 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
LKom писал(а):
В Драконе все давно решено:
Присоедините икону Синхронизатор к иконе Выбор блока Переключатель.
В иконе Синхронизатор впишите условия. К примеру - "Ждать событие в течении 20 сек.".
Установите иконы Вариант на каждое ожидаемое событие, на "Иное событие", на "20 сек. прошло".

Интересное предложение. Но есть проблема.

Икона Синхронизатор уже перегружена различными задачами.
Расширять ее функциональность недопустимо.

Поэтому для обозначения события выбрана новая икона — Икона Событие в виде кружка на палочке, которую вы одно время остроумно называли "флюгером".
viewtopic.php?p=104260#p104260


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 17:23 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Владимир Паронджанов писал(а):
Но есть проблема.

Икона Синхронизатор уже перегружена различными задачами.
Расширять ее функциональность недопустимо.

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

Разные же Булавки, Флюгера присоединенные к линиям связи, Выноски, гнутые линии разрушают строгие принципы построения схем и вводят пользователей в заблуждение. Создаётся зоопарк ... .

Насколько помню, у Митькина нет икон с боковым присоединением ЛевыйКомментарий, ПравыйКомментарий, Синхронизатор, Период?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 18:52 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Степан Митькин писал(а):
Макроикона "Ожидание события" останавливает алгоритм до тех пор, пока не произойдёт одно из указанных событий.
То есть делает точно то же самое, что и синхронизатор, только с бесконечным временем ожидания.
LKom совершенно прав, это один и тот же домен, вводить новые визуальные конструкции не следует.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 22:46 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Владимир Паронджанов писал(а):
Мне кажется, что для таймаута желательно приспособить икону Пауза.
Степан, ваше мнение?

Вложение:
events-timeout.png
events-timeout.png [ 5.99 КБ | Просмотров: 7898 ]

Мне нравится.
А где может быть расположена Пауза, только справа?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2020 23:16 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Вот оригинальная дракон-схема из книги "Жизнеритмы..."
Вложение:
dvig-orig.png
dvig-orig.png [ 64.75 КБ | Просмотров: 7898 ]


Вот тот же алгоритм с иконой "Ожидание событий" и таймаутом в виде Паузы:
Вложение:
dvig3.png
dvig3.png [ 26.74 КБ | Просмотров: 7898 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 10 Февраль, 2020 19:53 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 396
Дмитрий Бардынин писал(а):
И меня беспокоит схожесть нового символа с иконкой Соединитель. Не пострадает ли визуальная простота схем?

Более того, и прежде всего, возникает неоднозначность в "стандарте" икон за 2020 г. По-видимому, в "стандарте" исторически икона "Соединитель" формально декларировалась почему-то без указания примыкающей линии/линий (единственная среди всех икон, а также и "Выноска", но причина отсутствия линий в последнем случае очевидна). Теперь, если к "Соединителю" добавить линию, то возникает "Событие". В реальности ведь "Соединители" имеют примыкающую линию на схеме. Впечатление, что формальные графические определения икон "Соединитель" и "Событие" выпадают из общих принципов построения икон, имеют какие-то иные специализированные обоснования.


В блок-схемах, к слову, связь с внешней средой отражается однородно -- применяется один и тот же символ "терминатор" (менее компактный, чем "кружок", конечно же) -- как для начала/конца алгоритма, так и для прочих выходов/входов во внешнюю среду, включая и события:
http://www.pntd.ru/19.701.htm
Вложение:
bs_termin.png
bs_termin.png [ 120.63 КБ | Просмотров: 7719 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 10 Февраль, 2020 20:02 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 396
Степан Митькин писал(а):
Требуется явно показать логику: алгоритм приостанавливается, пока не произойдёт событие.
В языке Erlang это конструкция receive.
В языке Go это конструкция select.

На примере упомянутых выше конструкций receive и select можно отметить следующее:
- оператор select в Go не имеет "таймаутов" (аналог after в конструкции receive в Erlang), но обладает секцией default (срабатывает при отсутствии событий при попытке исполнить оператор select);
- в качестве событий в операторе select могут быть факты как получение данных из канала связи, так и их отправка (чтение или запись в канал);
- оператор receive в Erlang может иметь защитные выражения для событий (конструкция when).

А такие операторы как select в Ada или конструкции как в Concurrent ML (на основе специализированных комбинаторов-функций) предполагают в дополнение возможность иметь одновременно и "таймауты", и секции "default" или "иначе". Плюс "защитные выражения" в общем случае могут быть сложными или комплексными, в т.ч. и с побочными эффектами (фактически, перед событием могут возникать произвольные упреждающие действия, которые даже могут задавать сам факт события. А также, к примеру, в Ada оператор select предполагает и асинхронную форму в виде "select ... then ..." и пр. навороты...).

Предложенный выше в теме вариант обработки событий (на основе новой иконы "Событие") имеет, всё же, ограниченную применимость как для "стандарта", нежели предельно широкую универсальность. Вероятно, вместе с иконой "Событие" кроме икон "Ввод" и "Пауза" (таймаут) потребуются и "Вывод", а также возможно и "Вариант" (применяемый сейчас после "Выбора") для указания "иначе" и, видимо, для "защитных выражений" (располагая "Вариант" выше "Ввода/Вывода"). Однако, логические условия принято декларировать в "Вопросах", тем более комплексные (через композицию "Вопросов")... :(


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 11 Февраль, 2020 16:00 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
PSV100 писал(а):
Дмитрий Бардынин писал(а):
И меня беспокоит схожесть нового символа с иконкой Соединитель. Не пострадает ли визуальная простота схем?

Более того, и прежде всего, возникает неоднозначность в "стандарте" икон за 2020 г.
Спутать Соединитель и Событие невозможно.
Внутри Соединителя есть цифра, а икона Событие пустая.
Невозможно привести пример дракон-схемы, подтверждающий возможность путаницы.

PSV100 писал(а):
По-видимому, в "стандарте" исторически икона "Соединитель" формально декларировалась почему-то без указания примыкающей линии/линий (единственная среди всех икон
. Спасибо. Вы правы. Это недостаток, который следует устранить.

PSV100 писал(а):
Теперь, если к "Соединителю" добавить линию, то возникает "Событие".
Внутри Соединителя есть цифра, а икона Событие пустая.
Невозможно привести пример дракон-схемы, подтверждающий возможность путаницы.


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

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


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

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


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

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