Kto zaprojektował wyjątki?

22

Skąd pochodzą wyjątki i obsługa wyjątków?

Podoba mi się, jak .NET go używa, podoba mi się, jak C ++ go obsługuje (ale biblioteki niestety używają kodu powrotu lub są napisane w C). Znam jego standard we wszystkich nowych językach, ale kto go zaprojektował jako pierwszy lub skąd się wziął?

Czy C ++ jest pierwszym językiem, który go używa? Nie znam żadnego, który byłby starszy.

komar
źródło
7
Najwyraźniej Plankalkül miał obsługę wyjątków w latach czterdziestych, choć pierwszy kompilator nie istniał aż około 50 lat później. ( en.wikipedia.org/wiki/Plankalk%C3%BCl )
FrustratedWithFormsDesigner
Można powiedzieć, że C ++ był pierwszym językiem, który nie był kością słoniową, który wprowadził wyjątki dla mas. Ale ta koncepcja istnieje od samego początku (lub długo, wybierz coś dla siebie).
Martin York
11
Szukasz kogoś do uduszenia?
Żartuję
1
Czy powinniśmy brać pod uwagę wpływy wyjątków sprzętowych?
rwong 27.01.11
1
@FrustratedWithFormsDesigner: Moja szczęka po prostu uderzyła o podłogę. Wiedziałem o Konradzie Zuse, ale nie wiedziałem o tym. On jest ojcem nas wszystkich.
Bob Murphy

Odpowiedzi:

20

Zgłaszanie wyjątków i wychwytywanie wyjątków istnieje już od dłuższego czasu. Ta strona mówi, że wyjątki zostały wprowadzone w PL / I: http://www.math.grin.edu/~rebelsky/Courses/CS302/98S/Outlines/outline.02.html

według tej strony (w 1967 r. zawiera obszerną, ale nie wyczerpującą tabelę języków i funkcji komputera): http://community.borland.com/article/0,1410,22741,00.html

Wiele języków wybrało tę technikę - ADA, ALGOL, FORTRAN, ML [...]

Cytowano stąd .

Wikipedia zawiera więcej szczegółów na temat obsługi wyjątków w PL / 1 . Ta strona odnosi się również do PL / 1 jako pierwszej. Oczywiście nie jest to dowód naukowy :-)

Co do tego, kto osobiście zaprojektował PL / 1, w artykule nie wspomniano żadnych nazwisk, tylko różne komitety w IBM.

Péter Török
źródło
Egzekucje w PL / I były naprawdę specyficznymi rodzajami zdarzeń. Możesz zdefiniować i podnieść własne zdarzenia oraz napisać procedury obsługi zdarzeń, aby je złapać. ISTR było pewne wsparcie dla tego w niektórych urządzeniach systemowych (VTAM?), Więc można było pisać programy sterowane zdarzeniami.
TMN
Czy potrafisz wymyślić jakieś języki wcześniejsze niż C ++, które zapewniały możliwość uporządkowanego czyszczenia podczas rozwijania stosu?
supercat
Wyjątki w FORTRAN? Chodź ...
Michał Kosmulski
6

Hof, Mössenböck i Pirkelbauer (w swoim artykule z 1997 r. Zero-Overhead Exception Handling using Metaprogramming ) potwierdzają, że koncepcja wyjątków została zasugerowana w latach siedemdziesiątych, odnosząc się do obsługi wyjątków Johna B. Goodenougha w 1975 r . : Problemy i proponowany dokument notacyjny w komunikatach ACM . W nim łączy nowoczesną obsługę wyjątków z ogólną ideą rejestrowania wywołań zwrotnych, a jego proponowana notacja bardziej przypomina nowoczesną specyfikację metadanych atrybutu niż try/catch, ale to (lub przynajmniej jej sekcja 2) jest świetnym przeglądem stanu obsługi wyjątków w połowa lat siedemdziesiątych.

Godnym uwagi jest również raise/rescuemechanizm w Alefie , który można postrzegać jako prymitywną formę catchbloków, abyśmy nie myśleli, że wyskoczyli w pełni uformowani z czoła Stroustroup jak Athena z Zeusa.

Wtrmute
źródło
3
czy przeczytałeś wcześniejszą odpowiedź ? Datuje wyjątki 1967: osiem lat wcześniej niż data, do której się odwołujesz
gnat
4
Zrobiłem to, ale starałem się prześledzić część historii między pojawieniem się wyjątków w C ++ a instrukcjami ON CONDITION w PL / I. Chyba mój dodatek był niepożądany?
Wtrmute,
1
W rzeczywistości wiele artykułów na temat obsługi wyjątków odnosi się do dobrej opinii, dyskusji i jej wpływu na nowoczesny mechanizm wyjątków - uzasadnione jest uznanie go za przełomowy. Z drugiej strony „obsługa wyjątków” ma wyraźną semantykę w wielu językach i spodziewałbym się, że będzie to szczególnie prawdziwe przed publikacją Goodenough. Mając to na uwadze, konserwatywna odpowiedź na to pytanie może równie dobrze prześledzić ją z powrotem do skoku warunkowego.
Thiago Silva,
@gnat: Czy przeczytałeś komentarz, który prześledził ten pomysł do lat 40.? Nawet jeśli ten komentarz nie istniał, pytanie brzmi: „skąd pochodzą wyjątki?”, A nie „podać najwcześniejszą datę, w której zastosowano wyjątki”.
Michael Shaw
@MichaelShaw odpowiedź, o której mówię, została opublikowana w tym samym czasie, w którym wspomniałeś komentarz, a także próbuje odpowiedzieć na zadane pytanie („być pierwszym”). W przeciwieństwie do tego, ten post nie potwierdził widocznie widocznych wcześniejszych dowodów i nawet nie próbował odpowiedzieć na to pytanie
gnat