Игнорирование (серьезных) ошибок поддержать программу?

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

  • Эта "парадигма" имеет имя? Я имею в виду, ожидают для
  • Как плохо это должно сделать вышеупомянутое?
  • Есть ли программы, используемые там, которые просто следуют: "Эй, это - фатальная, неожиданная ошибка - но Вы знаете что?Мне все равно!"?
9
задан SQuirreL bites 26 April 2010 в 16:40
поделиться

6 ответов

При именовании вы можете говорят, что язык демонстрирует «упрямство».

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

Вы можете реализовать подобное поведение на большинстве современных языков с помощью обработчиков исключений catch all.

4
ответ дан 4 December 2019 в 23:05
поделиться

Я использовал метод обработки ошибок «военная топология».

Ошибки следует классифицировать по степени серьезности, а затем либо обрабатывать, либо передавать вышестоящему руководителю для устранения.

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

Если на плацу высадился взвод вражеских солдат, ему, вероятно, следует рассказать об этом своему начальству.

Пожалуйста, отметьте меня в разделе «snark» вашей книги, когда вы богаты и знамениты.

1
ответ дан 4 December 2019 в 23:05
поделиться

Для продолжения работы вашей программы вам необходимо иметь базовое состояние, которое, как вы знаете, является хорошим, а затем каждый запрос обрабатывается независимо. Например:

  • Клиент-серверное приложение. Каждый новый запрос, поступающий на сервер, обрабатывается независимо, и если один запрос катастрофически терпит неудачу, сервер перехватывает его и либо делает вид, что этого не произошло, либо сообщает клиенту, что он потерпел неудачу.
  • Локальное приложение. Есть некоторая базовая форма, и все, что пытается сделать пользователь, создается оттуда. Если процесс завершается катастрофическим отказом, экземпляр этого процесса (возможно, форма MDI) уничтожается, и пользователю остается исходная форма оболочки приложения, и он может попробовать еще раз или сделать что-нибудь еще.

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

2
ответ дан 4 December 2019 в 23:05
поделиться

Не знаю насчет имени.

Насколько это плохо? Я не знаю; для чего ты это используешь? Обычно лучше иметь сбой, чем тихую ошибку. Сбои очевидны и обычно могут быть исправлены, но скрытые ошибки, скорее всего, останутся незамеченными, поэтому не имеет значения, насколько легко их исправить.

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

0
ответ дан 4 December 2019 в 23:05
поделиться

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

Вы упоминаете «Синтаксис, имя, тип». Если вам известны общие синтаксические ошибки, которые можно объективно исправить, не вызывая проблем, включите их в спецификацию и позвольте компилятору обработать их (после этого они больше не будут синтаксическими ошибками).Я не знаю, к чему относится «Имя». Чтобы избежать ошибок типа, нужно иметь систему динамической типизации. Опять же, это часть спецификации, а не обработка ошибок.

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

0
ответ дан 4 December 2019 в 23:05
поделиться

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

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

0
ответ дан 4 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: