Кто разработал исключения?

22

Откуда возникли исключения и их обработка?

Мне нравится, как это использует .NET, мне нравится, как это поддерживает C ++ (но библиотеки, к сожалению, используют код возврата или написаны на C). Я знаю его в значительной степени стандарт на всех новых языках, но кто его спроектировал первым или откуда он появился?

Является ли C ++ первым языком для его использования? Я не знаю ни одного другого, который старше.

комар
источник
7
По всей видимости, в 1940-х годах Планкалкюль обрабатывал исключения, хотя первый компилятор существовал лишь около 50 лет спустя. ( en.wikipedia.org/wiki/Plankalk%C3%BCl )
FrustratedWithFormsDesigner
Можно сказать, что C ++ был первым языком не из слоновой кости, который ввел исключения для масс. Но концепция была вокруг с самого начала (или долгое время, выбирайте).
Мартин Йорк
11
Ищете кого-нибудь задушить? Я шучу ...
Марк Канлас
1
Должны ли мы учитывать влияние аппаратных исключений?
rwong
1
@FrustratedWithFormsDesigner: Моя челюсть только что упала на пол. Я знал о Конраде Цузе, но не знал этого. Он отец всех нас.
Боб Мерфи

Ответы:

20

Возбуждение и отлов исключений существует уже довольно давно. На этом сайте говорится, что исключения были введены в PL / I: http://www.math.grin.edu/~rebelsky/Courses/CS302/98S/Outlines/outline.02.html.

согласно этой странице, которая была в 1967 году (включает в себя обширную, но не исчерпывающую таблицу компьютерных языков и возможностей): http://community.borland.com/article/0,1410,22741,00.html

Многие языки освоили эту технику - ADA, ALGOL, FORTRAN, ML [...]

Цитируется здесь .

В Википедии есть больше деталей об обработке исключений в PL / 1 . Эта страница также относится к PL / 1, который является первым. Конечно, это не научное доказательство :-)

Что касается того, кто лично разработал PL / 1, в статье не упоминаются имена, только различные комитеты в IBM.

Петер Тёрёк
источник
Исключения в PL / I были действительно конкретными типами событий. Вы можете определять и вызывать свои собственные события и писать обработчики событий, чтобы перехватывать их. ISTR в некоторых системных средствах (VTAM?) Поддерживал это, поэтому вы могли писать программы, управляемые событиями.
TMN
Можете ли вы вспомнить какие-либо языки до C ++, которые обеспечивали возможность упорядоченной очистки при разматывании стека?
Суперкат
Исключения в Фортране? Давай ...
Михал Космульский
6

Hof, Mössenböck и Pirkelbauer (в своей статье 1997 года « Обработка исключений с нулевыми накладными расходами с использованием метапрограммирования» ) утверждают, что концепция исключений была предложена в семидесятых годах, ссылаясь на обработку исключений 1975 года Джона Б. Гуденоу : проблемы и предлагаемую нотацию в сообщениях ACM . В нем он объединяет современную обработку исключений с общей идеей регистрации обратных вызовов, и его предложенная нотация больше похожа на современные спецификации метаданных атрибутов, чем на try/catchнее, но она (или, по крайней мере, ее раздел 2) является отличным обзором состояния обработки исключений в в середине семидесятых годов.

Возможно, следует отметить также raise/rescueмеханизм в Алефе , который можно рассматривать как примитивную форму catchблоков, чтобы мы не думали, что они полностью сформировались из лба Страуструпа, как Афина из зевса.

Wtrmute
источник
3
вы читали предыдущий ответ ? Он датирует исключения 1967: на восемь лет раньше, чем дата, на которую вы ссылаетесь
gnat
4
Я сделал, но я пытался проследить некоторую историю между появлением исключений в C ++ и операторами ON CONDITION в PL / I. Я думаю, что мое добавление было нежелательным?
августа
1
На самом деле, многие статьи по обработке исключений ссылаются на достаточно подробный обзор, обсуждение и его влияние на современный механизм исключений - его разумно считать оригинальным. С другой стороны, «обработка исключений» имеет четкую семантику во многих языках, и я ожидаю, что это будет особенно верно до публикации Гуденоу. Имея это в виду, консервативный ответ на этот вопрос может также проследить его до условного скачка.
Тьяго Сильва
@gnat: Вы читали комментарий, который прослеживает идею до 1940-х годов? Даже если этот комментарий не существует, вопрос заключается в том, «откуда возникли исключения?», А не «назвать самую раннюю дату, когда были использованы исключения».
Майкл Шоу
@MichaelShaw ответ, на который я ссылаюсь, был опубликован в то же время, что и упомянутый вами комментарий, и он также пытается ответить на заданный вопрос («быть первым»). В противоположность этому, этот пост не смог подтвердить явно видимые ранее доказательства и даже не пытался ответить на этот вопрос
комнат