OberonCore https://forum.oberoncore.ru/ |
|
HALT-стопор при отсутствующем ELSE https://forum.oberoncore.ru/viewtopic.php?f=82&t=3484 |
Страница 1 из 2 |
Автор: | Евгений Темиргалеев [ Вторник, 14 Июнь, 2011 10:21 ] |
Заголовок сообщения: | HALT-стопор при отсутствующем ELSE |
Когда идёт последовательный отбор всех предполагаемых вариантов IF ... ELSIF ... и ветка ELSE в них не входит, нужно вручную ставить стопор, типа HALT(100). Код: ASSERT((a IN {0..1}) & (b IN {0..1}), 20); 15.06.11: уточнил пример по обсуждению нижеIF (a = 1) & (b = 1) THEN ... ELSIF (a = 0) & (b = 1) THEN ... ELSIF (a = 1) & (b = 0) THEN ... ELSE (* прочие варианты не предполагаются по логике программы *) HALT(100) END Это как-то порекомендовал Info21 --- решил попробовать. Не могу сказать, чтобы ставил везде, но в важных местах ставил. Сегодня один стопор сработал. От момента исключения (вываливания трапа) до исправления ошибки прошло 30 минут. Без него не известно, сколько бы пришлось возиться и искать --- от чего то, что должно делаться, в определённый момент --- не делается. И то, только после того, как факт неделания обнаружился бы при использовании --- сразу бы этого не произошло. Теперь буду везде ставить. Собственно, это ничем (кроме ручной писанины) не отличается от CASE и WITH без ELSE. |
Автор: | Info21 [ Вторник, 14 Июнь, 2011 11:01 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Евгений Темиргалеев писал(а): Теперь буду везде ставить. Собственно, это ничем (кроме ручной писанины) не отличается от CASE и WITH без ELSE. Да, у меня давно свербит на эту тему. Трактовка ELSE у IF должна быть единообразной. |
Автор: | Сергей Губанов [ Вторник, 14 Июнь, 2011 12:03 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Может лучше 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 |
Автор: | Евгений Темиргалеев [ Вторник, 14 Июнь, 2011 12:14 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Сергей Губанов писал(а): Может лучше HALT(126)? Не согласен. Тут именно нарушение инварианта, а не недореализованность.
|
Автор: | Сергей Губанов [ Вторник, 14 Июнь, 2011 16:07 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Нарушение инварианта из-за недореализованности? |
Автор: | Евгений Темиргалеев [ Вторник, 14 Июнь, 2011 17:13 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Нарушение инварианта из-за ошибки в программе. Код: CASE x OF Тоже самое, если тут трэпанёт invalid case при x=4
1: 2: 3: END |
Автор: | ilovb [ Вторник, 14 Июнь, 2011 17:27 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
А разве в CASE это не компилерная заморочка? Там это ошибка, т.к. таблица переходов... |
Автор: | Евгений Темиргалеев [ Вторник, 14 Июнь, 2011 17:33 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Это охрана от логической ошибки. Когда программист думает, что предусмотрел все случаи, а на деле выходит не так. С проверкой индексов ровно тоже. viewtopic.php?f=6&t=2284 |
Автор: | QWERTYProgrammer [ Среда, 15 Июнь, 2011 01:41 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Евгений Темиргалеев писал(а): Это охрана от логической ошибки. Когда программист думает, что предусмотрел все случаи, а на деле выходит не так. Напомнило философское рассуждение авторов известного написанного на ББ прикладного пакета 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. Возникает подспудное подозрение, что проблеме охраны от нарушения инвариантов авторы таки уделили недостаточно внимания:-( |
Автор: | Info21 [ Среда, 15 Июнь, 2011 13:08 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
QWERTYProgrammer писал(а): Возникает подспудное подозрение, что проблеме охраны от нарушения инвариантов авторы таки уделили недостаточно внимания:-( Почему подспудное?Громоздить объектные иерархии -- очень естественное и увлекательное ("приматическое") занятие, опережающее всё остальное, откуда и проблемы. |
Автор: | Владислав Жаринов [ Четверг, 16 Июнь, 2011 19:44 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Евгений Темиргалеев писал(а): Нарушение инварианта из-за ошибки в программе. Интересно, это как-нибудь коррелирует с проверкой на y2=4 в схеме Автомата 1 на этом рисунке?
Код: CASE x OF Тоже самое, если тут трэпанёт invalid case при x=41: 2: 3: END |
Автор: | Валерий Лаптев [ Четверг, 16 Июнь, 2011 19:50 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Кстати, еще один обязательный паттерн. Наряду с паттернами циклов - это паттерн ветвления. Буду первачкам втулять... |
Автор: | Евгений Темиргалеев [ Пятница, 09 Декабрь, 2011 13:44 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Для статистики: второпях клепания, поставленный на автомате стопор помог обнаружить логическую ошибку при первом промежуточном тестировании. |
Автор: | Сергей Прохоренко [ Пятница, 09 Декабрь, 2011 18:01 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Евгений Темиргалеев писал(а): Для статистики: второпях клепания, поставленный на автомате стопор помог обнаружить логическую ошибку при первом промежуточном тестировании. Ценная вешь! В структурном редакторе она должна быть "по умолчанию". PureBuilder писал(а): Ветвь else обязательна. По умолчанию она генерирует сигнал отказа... Программист при желании может заменить генерацию сигнала отказа на иное действие.
|
Автор: | Евгений Темиргалеев [ Пятница, 09 Декабрь, 2011 21:42 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Сергей Прохоренко писал(а): PureBuilder писал(а): Ветвь else обязательна. По умолчанию она генерирует сигнал отказа... Если же речь идёт о простом одноветочном типа IF x < 0 THEN x := -x END, обязательный ELSE может быть излишен... |
Автор: | Сергей Прохоренко [ Пятница, 09 Декабрь, 2011 22:13 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Евгений Темиргалеев писал(а): Сергей Прохоренко писал(а): PureBuilder писал(а): Ветвь else обязательна. По умолчанию она генерирует сигнал отказа... Если же речь идёт о простом одноветочном типа IF x < 0 THEN x := -x END, обязательный ELSE может быть излишен... Согласен. Речь идет о многоветочном IF. |
Автор: | Trurl [ Суббота, 10 Декабрь, 2011 09:37 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Валерий Лаптев писал(а): Кстати, еще один обязательный паттерн. Ну да. К "циклу Дейкстры" добавился "выбор Дейкстры". |
Автор: | Валерий Лаптев [ Суббота, 10 Декабрь, 2011 11:16 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Trurl писал(а): Валерий Лаптев писал(а): Кстати, еще один обязательный паттерн. Ну да. К "циклу Дейкстры" добавился "выбор Дейкстры". Собственно, у него он и был в Дисциплине программирования определен. |
Автор: | Владислав Жаринов [ Понедельник, 12 Декабрь, 2011 08:48 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Это имеется в виду "if-fi" (как в Promela)?.. |
Автор: | Валерий Лаптев [ Понедельник, 12 Декабрь, 2011 08:57 ] |
Заголовок сообщения: | Re: HALT-стопор при отсутствующем ELSE |
Владислав Жаринов писал(а): Это имеется в виду "if-fi" (как в Promela)?.. Да. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |