Хто розробляв винятки?


22

Звідки взялися винятки та обробка виключень?

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

Чи є С ++ першою мовою, яка ним користується? Я не знаю жодного іншого, який є старшим.


7
Мабуть, Планкалкюль мав обробку винятків у 40-х роках, хоча перший компілятор існував приблизно через 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 ++, які забезпечили належне очищення під час розмотування стека?
supercat

Винятки у FORTRAN? Давай ...
Michał Kosmulski

6

Хоф, Мессенбёк і Піркельбауер (у своїй роботі " Нульовий накладний облік виключень з використанням метапрограмування" у 1997 р.) Стверджують, що концепція винятків була запропонована в сімдесятих роках, посилаючись на поводження з винятками Джона Б. Гуденноу 1975 року : Проблеми та запропонований документ із нотацій у статті повідомленнях ОСББ . У ньому він пов'язує сучасну обробку винятків із загальною ідеєю реєстрації зворотних дзвінків, і запропонована ним нотація більше нагадує сучасні специфікації метаданих Attribute, ніж це try/catch, але це (або принаймні його розділ 2) є прекрасним оглядом стану обробки винятків у середина сімдесятих.

Можливо, слід зазначити також raise/rescueмеханізм в Алефі , який можна розглядати як примітивну форму catchблоків, щоб ми не думали, що вони сплинули повністю сформованими з чола Струстрогрупи, як Афіна від Зевса.


3
Ви читали попередню відповідь ? Він датує виключення 1967: вісім років раніше , ніж дата ви посилаєтеся
комар

4
Я це робив, але я намагався простежити деяку історію між появою винятків у C ++ та твердженнями ON CONDITION в PL / I. Я думаю, моє додавання було небажаним?
Wtrmute

1
Насправді багато робіт з поводження з винятками посилаються на достатньо для огляду, обговорення та його впливу на сучасний механізм винятку - розумно вважати це напівавтоматичним. З іншого боку, "поводження з винятками" має виразну семантику у багатьох мовах, і я би очікував, що це буде особливо вірно перед публікацією Гуденф. Зважаючи на це, консервативна відповідь на це запитання могла б так само простежити його до умовного стрибка.
Тіаго Сільва

@gnat: Ви читали коментар, який простежує ідею до 40-х років? Навіть якщо цього коментаря не існувало, питання "звідки взялися винятки?", А не "називайте найдавнішу дату, коли використовувались виключення".
Майкл Шоу

@MichaelShaw відповідь, на яку я посилаюся, була розміщена одночасно з коментарем, який ви згадали, а також намагається вирішити поставлене питання ("будучи першим"). На противагу цьому, цей пост не визнав очевидно видимих ​​раніших доказів і навіть не намагався вирішити питання
gnat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.