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.


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.