Quem projetou exceções?


22

De onde vieram as exceções e o tratamento de exceções?

Gosto de como o .NET usa, gosto de como o C ++ suporta (mas as bibliotecas infelizmente usam código de retorno ou são escritas em C). Eu sei que é praticamente padrão em todos os novos idiomas, mas quem o criou primeiro ou de onde veio?

C ++ é o primeiro idioma a usá-lo? Não conheço outro que seja mais velho.


7
Aparentemente, Plankalkül teve tratamento de exceção na década de 1940, embora o primeiro compilador não existisse até 50 anos depois. ( en.wikipedia.org/wiki/Plankalk%C3%BCl )
FrustratedWithFormsDesigner

Você poderia dizer que o C ++ foi a primeira linguagem de torre não marfim que introduziu exceções às massas. Mas o conceito existe desde o início (ou há muito tempo, faça a sua escolha).
Martin York

11
Procurando alguém para estrangular? Estou brincando ...
Mark Canlas

1
Devemos levar em conta as influências das exceções de hardware?
rwong

1
@FrustratedWithFormsDesigner: Meu queixo caiu no chão. Eu conhecia Konrad Zuse, mas não sabia disso. Ele é o pai de todos nós.
22711 Bob Murphy

Respostas:


20

Levantar e capturar exceções já existe há bastante tempo. Este site diz que exceções foram introduzidas no PL / I: http://www.math.grin.edu/~rebelsky/Courses/CS302/98S/Outlines/outline.02.html

que foi em 1967, de acordo com esta página (inclui uma tabela extensa, mas não exaustiva, de linguagens e recursos de computador): http://community.borland.com/article/0,1410,22741,00.html

Muitas línguas adotaram essa técnica - ADA, ALGOL, FORTRAN, ML [...]

Citado aqui .

A Wikipedia possui mais detalhes sobre o tratamento de exceções no PL / 1 . Essa página também se refere ao PL / 1, sendo o primeiro. Claro, isso não é prova científica :-)

Quanto a quem pessoalmente projetou o PL / 1, o artigo não menciona nomes, apenas vários comitês da IBM.


As execuções no PL / I eram realmente tipos específicos de eventos. Você pode definir e criar seus próprios eventos e escrever manipuladores de eventos para capturá-los. No ISTR, havia suporte para isso em algumas instalações do sistema (VTAM?), Para que você pudesse escrever programas orientados a eventos.
TMN

Você consegue pensar em algum idioma anterior ao C ++ que fornecesse um recurso para limpeza ordenada durante o desenrolamento da pilha?
Supercat

Exceções em FORTRAN? Vamos lá ...
Michał Kosmulski

6

Hof, Mössenböck e Pirkelbauer (em seu trabalho de 1997, Zero-Overhead Exception Handling using Metaprogramming ) afirmam que o conceito de exceções foi sugerido nos anos setenta, referindo-se a 1975 de John B. Goodenough. tratamento de exceções de : questões e um documento de notação proposto nas Comunicações de o ACM . Nele, ele combina o tratamento moderno de exceções com a idéia geral de registrar retornos de chamada, e sua notação proposta se parece mais com as especificações modernas de metadados de Atributo do quetry/catch, mas (ou pelo menos sua seção 2) é uma excelente visão geral do estado do tratamento de exceções no meados dos anos setenta.

Talvez seja digno de nota também o raise/rescuemecanismo em Alef , que podemos ver como uma forma primitiva de catchblocos, para que não pensemos que eles surgiram totalmente formados da testa de Stroustroup, como Athena da de Zeus.


3
você leu resposta anterior ? Ele data exceções 1967: oito anos antes da data que você se refere
mosquito

4
Sim, mas estava tentando rastrear parte do histórico entre o aparecimento de exceções no C ++ e as instruções ON CONDITION no PL / I. Acho que minha adição não foi bem-vinda?
Wtrmute

1
Na verdade, muitos trabalhos sobre tratamento de exceções se referem a vantagens suficientes para a visão geral, discussão e sua influência no mecanismo moderno de exceção - é razoável considerá-lo seminal. Por outro lado, o "tratamento de exceções" possui semântica distinta em muitos idiomas, e eu esperaria que isso fosse especialmente verdadeiro antes da publicação de Goodenough. Com isso em mente, uma resposta conservadora para essa pergunta poderia muito bem traçá-la de volta a um salto condicional.
Thiago Silva

@gnat: Você leu o comentário que traça a idéia até os anos 40? Mesmo que esse comentário não exista, a pergunta é "de onde vêm as exceções?", Não "nomeia a data mais antiga em que as exceções foram usadas".
Michael Shaw

@MichaelShaw, a resposta a que me refiro foi postada ao mesmo tempo em que você menciona o comentário e também tenta abordar a pergunta ("sendo a primeira"). Ao contrário, este post não reconheceu evidências anteriores aparentemente visíveis e nem tentou resolver a questão
gnat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.