OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 20 ] 
Автор Сообщение
 Заголовок сообщения: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Вторник, 14 Июнь, 2011 10:21 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4392
Откуда: Россия, Орёл
Когда идёт последовательный отбор всех предполагаемых вариантов IF ... ELSIF ... и ветка ELSE в них не входит, нужно вручную ставить стопор, типа HALT(100).
Код:
ASSERT((a IN {0..1}) & (b IN {0..1}), 20);
IF (a = 1) & (b = 1) THEN
  ...
ELSIF (a = 0) & (b = 1) THEN
  ...
ELSIF (a = 1) & (b = 0) THEN
  ...
ELSE (* прочие варианты не предполагаются по логике программы *)
  HALT(100)
END
15.06.11: уточнил пример по обсуждению ниже

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

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

Теперь буду везде ставить. Собственно, это ничем (кроме ручной писанины) не отличается от CASE и WITH без ELSE.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Вторник, 14 Июнь, 2011 11:01 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7616
Откуда: Троицк, Москва
Евгений Темиргалеев писал(а):
Теперь буду везде ставить. Собственно, это ничем (кроме ручной писанины) не отличается от CASE и WITH без ELSE.
Да, у меня давно свербит на эту тему.
Трактовка ELSE у IF должна быть единообразной.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Вторник, 14 Июнь, 2011 12:03 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Может лучше HALT(126)?

Programming Conventions писал(а):
Free 0 .. 19 use for temporary breakpoints
Preconditions 20 .. 59 validate parameters at procedure entry
Postconditions 60 .. 99 validate results at procedure end
Invariants 100 .. 120 validate intermediate states (detect local error)
Reserved 121 .. 125 reserved for future use
Not Yet Implemented 126 procedure is not yet implemented
Reserved 127 reserved for future use


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Вторник, 14 Июнь, 2011 12:14 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4392
Откуда: Россия, Орёл
Сергей Губанов писал(а):
Может лучше HALT(126)?
Не согласен. Тут именно нарушение инварианта, а не недореализованность.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Вторник, 14 Июнь, 2011 16:07 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Нарушение инварианта из-за недореализованности?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Вторник, 14 Июнь, 2011 17:13 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4392
Откуда: Россия, Орёл
Нарушение инварианта из-за ошибки в программе.
Код:
CASE x OF
1:
2:
3:
END
Тоже самое, если тут трэпанёт invalid case при x=4


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Вторник, 14 Июнь, 2011 17:27 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1362
А разве в CASE это не компилерная заморочка? Там это ошибка, т.к. таблица переходов...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Вторник, 14 Июнь, 2011 17:33 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4392
Откуда: Россия, Орёл
Это охрана от логической ошибки. Когда программист думает, что предусмотрел все случаи, а на деле выходит не так.

С проверкой индексов ровно тоже.

viewtopic.php?f=6&t=2284


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Среда, 15 Июнь, 2011 01:41 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 226
Евгений Темиргалеев писал(а):
Это охрана от логической ошибки. Когда программист думает, что предусмотрел все случаи, а на деле выходит не так.

Напомнило философское рассуждение авторов известного написанного на ББ прикладного пакета OpenBUGS о сложностях дебаггинга в сложных ОО-системах: Lunn, D., Spiegelhalter, D., Thomas, A. and Best, N. (2009) The BUGS project: Evolution, critique and future directions

Цитата:
One downside of object-orientation in systems as complex as BUGS is that it can make debugging
somewhat difficult. In more traditional programming settings, there would typically be some kind
of master program specifying a list of commands to be executed in sequence. A debugger can
then be implemented to step through each command in turn and provide current information on
parameters of interest. In contrast, objects are generally designed only to make/respond to various
requests of/from other objects—they have little or no concept of the order in which external events
occur. Consequently, an object-oriented program typically behaves as a complex chain-reaction
and the path back to the source of any error may be extremely convoluted. This can make for
indecipherable error messages, error messages that have nothing to do with the actual error, and
impenetrable ‘trap’ windows, all of which even the developers of the software sometimes struggle
to understand. For example, an ‘undefined real result’ trap lists the sequence of ‘function calls’ that
led to some impossible calculation, such as the square root of a negative number. The calculation
in question may have been attempted by an updater object trying to evaluate some function of
interest. To figure out what the updater was trying to do, which node it was dealing with at the time,
what the current values of that node and those in its Markov blanket are, and why these might have
led to some inconsistency (even if it were that simple), just from a list of function calls and the
current values of some ‘internal’ parameters, is a challenge indeed. As developers of the software
we have access to special tools for probing these ‘traps’ for more information but it can still be
difficult sometimes. It has been particularly difficult to fix any of these traps, or replace them with
more meaningful error messages, since they represent unanticipated errors—things that were not
meant to go wrong—it is virtually impossible to get hold of enough contextual information to
provide a message that might be of some use to the user.

Возникает подспудное подозрение, что проблеме охраны от нарушения инвариантов авторы таки уделили недостаточно внимания:-(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Среда, 15 Июнь, 2011 13:08 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7616
Откуда: Троицк, Москва
QWERTYProgrammer писал(а):
Возникает подспудное подозрение, что проблеме охраны от нарушения инвариантов авторы таки уделили недостаточно внимания:-(
Почему подспудное?

Громоздить объектные иерархии -- очень естественное и увлекательное ("приматическое") занятие, опережающее всё остальное, откуда и проблемы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Четверг, 16 Июнь, 2011 19:44 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Евгений Темиргалеев писал(а):
Нарушение инварианта из-за ошибки в программе.
Код:
CASE x OF
1:
2:
3:
END
Тоже самое, если тут трэпанёт invalid case при x=4
Интересно, это как-нибудь коррелирует с проверкой на y2=4 в схеме Автомата 1 на этом рисунке? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Четверг, 16 Июнь, 2011 19:50 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 2846
Откуда: Астрахань
Кстати, еще один обязательный паттерн. Наряду с паттернами циклов - это паттерн ветвления. Буду первачкам втулять... :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Пятница, 09 Декабрь, 2011 13:44 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4392
Откуда: Россия, Орёл
Для статистики: второпях клепания, поставленный на автомате стопор помог обнаружить логическую ошибку при первом промежуточном тестировании.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Пятница, 09 Декабрь, 2011 18:01 
Аватара пользователя

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


Ценная вешь! В структурном редакторе она должна быть "по умолчанию".

PureBuilder писал(а):
Ветвь else обязательна. По умолчанию она генерирует сигнал отказа... Программист при желании может заменить генерацию сигнала отказа на иное действие.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Пятница, 09 Декабрь, 2011 21:42 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4392
Откуда: Россия, Орёл
Сергей Прохоренко писал(а):
PureBuilder писал(а):
Ветвь else обязательна. По умолчанию она генерирует сигнал отказа...
Есть один момент: пока я на практике сталкивался с необходимостью ставить стопор в многоветочном IF (есть ELSIF).

Если же речь идёт о простом одноветочном типа IF x < 0 THEN x := -x END, обязательный ELSE может быть излишен...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Пятница, 09 Декабрь, 2011 22:13 
Аватара пользователя

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

Если же речь идёт о простом одноветочном типа IF x < 0 THEN x := -x END, обязательный ELSE может быть излишен...


Согласен. Речь идет о многоветочном IF.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Суббота, 10 Декабрь, 2011 09:37 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 900
Валерий Лаптев писал(а):
Кстати, еще один обязательный паттерн.

Ну да. К "циклу Дейкстры" добавился "выбор Дейкстры".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Суббота, 10 Декабрь, 2011 11:16 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 2846
Откуда: Астрахань
Trurl писал(а):
Валерий Лаптев писал(а):
Кстати, еще один обязательный паттерн.

Ну да. К "циклу Дейкстры" добавился "выбор Дейкстры".

Собственно, у него он и был в Дисциплине программирования определен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Понедельник, 12 Декабрь, 2011 08:48 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Это имеется в виду "if-fi" (как в Promela)?..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: HALT-стопор при отсутствующем ELSE
СообщениеДобавлено: Понедельник, 12 Декабрь, 2011 08:57 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 2846
Откуда: Астрахань
Владислав Жаринов писал(а):
Это имеется в виду "if-fi" (как в Promela)?..

Да.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ] 

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


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

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


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

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