10 votes

Origine de la syntaxe try/catch/finally

Question pour les spécialistes de l'étymologie : quel langage de programmation a été le premier à utiliser la syntaxe try/catch/finally que l'on retrouve dans les langages Java/.NET actuels ?

7voto

Adam Gent Points 15055

Je crois que c'était le C++ et je pense que Java/C# a ajouté finally pour le nettoyage des ressources (finally n'est pas dans le C++). Malheureusement, j'ai aucune référence... pour l'instant .

Une page soignée de toutes les syntaxes d'exception : http://en.wikipedia.org/wiki/Exception_handling_syntax

Je crois que c'est C++. Si ce n'est pas le cas, Stroustrup doit en donner le crédit. Dans son article : http://www.research.att.com/~bs/except.pdf Il ne mentionne aucune influence et ne fait référence à aucun autre matériel que le sien.

5voto

Posté sur Twitter par Mike Fikes partagé avec moi par Pawel Kapala :

MacLisp a ajouté la fonction ERR ce qui signale une erreur. Si ERR est invoquée dans le contexte dynamique d'une ERRSET alors l'argument de ERR est renvoyée comme valeur de l'élément ERRSET formulaire.

Les programmeurs ont rapidement commencé à utiliser ERRSET y ERR non pas pour piéger et signaler les erreurs mais pour des raisons de contrôle plus générales (sorties dynamiques non-locales). Malheureusement, cette utilisation de ERRSET a également piégé discrètement des erreurs inattendues, rendant les programmes plus difficiles à déboguer. Une nouvelle paire de primitives, CATCH y THROW a été introduit dans MacLisp en juin 1972 [souligné par moi] de sorte que ERRSET pourrait être réservé à son usage prévu, à savoir le piégeage des erreurs.

La leçon de ERRSET y CATCH est important. Les concepteurs de ERRSET et plus tard ERR avait à l'esprit une situation particulière et a défini une paire de primitives pour répondre à cette situation. Mais comme ces facilités fournissaient une combinaison de capacités utiles et puissantes (piégeage d'erreurs et sorties dynamiques non locales), les programmeurs ont commencé à les utiliser de manière inattendue. Les concepteurs ont alors dû revenir en arrière et diviser le système souhaité en plusieurs parties avec des interfaces alternatives. Ce modèle de conception soignée, d'utilisation involontaire et de reconception ultérieure est commun dans l'évolution de Lisp.

- extrait de "The Evolution of Lisp", par Guy Steele et Richard Gabriel

image of this text from the twit below Source : https://twitter.com/mfikes/status/881943130588753920

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">“The Evolution of Lisp,” by Guy Steele and Richard Gabriel</p>&mdash; Mike Fikes (@mfikes) <a href="https://twitter.com/mfikes/status/881950560508940288">July 3, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

2voto

Nemanja Trifunovic Points 17239

Le C++ a été le premier grand langage de programmation à introduire les exceptions (finalement, elles ne sont pas nécessaires en C++ car les destructeurs sont déterministes). Extrait de l'article de Stroustrup : http://www2.research.att.com/~bs/hopl2.pdf

la plus grande influence sur le C++ a été le travail sur les systèmes tolérants aux pannes, commencé à l'université de Newcastle en Angleterre par Brian Randell et ses collègues, et poursuivi par la suite. Newcastle en Angleterre par Brian Randell et ses collègues et poursuivis depuis dans de nombreux endroits.

1voto

aberglas Points 1

Common Lisp est bien antérieur à C++, et était basé sur des Lisps antérieurs. Java a, bien sûr, été créé par des hommes de Lisp qui étaient très conscients de cela. Mais Java est un Lisp pollué par le C, et ils ont également ajouté les absurdités de la spécification des exceptions vérifiées.

Common Lisp est allé plus loin et a permis au catch d'interagir avec la routine de lancement, y compris pour dire au lancer de continuer. La pile n'était simplement pas déroulée jusqu'à ce que le catch soit terminé. Cela signifiait que vous pouviez lancer des avertissements tels que le manque de mémoire, ainsi que lancer des échecs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X