14

Mis preguntas son más de carácter histórico que práctico:¿Quién inventó el tipo de manejo de errores throw/try/catch [/ finally]?

  1. que lo inventó?
  2. ¿Qué idioma lo usó primero (y en qué medida)?
  3. ¿Cuál fue la idea original, el concepto subyacente (qué problemas reales tuvieron que ser resueltos en estos días, los documentos son bienvenidos)?
  4. ¿Es LISPs condition system el antecesor del manejo de excepciones actual?
+2

De una manera un tanto re-empaquetada, esto es principalmente un duplicado de http://stackoverflow.com/questions/1449951/what-language-was-the-first-to-implement-exception-handling – mjv

+0

¡Gracias! Pero también agradecería las respuestas a las preguntas 3 y 4. – Frunsi

+0

+1 para buena publicación. –

Respuesta

5

El sistema de condición Common Lisp de hoy en día es relativamente nuevo. El diseño se basó en sistemas anteriores, pero no se incluyó como parte del lenguaje Common Lisp hasta finales de los 80 en el momento de CLTL2

Creo que el capítulo de condiciones en ese libro tiene un comentario considerable sobre la historia y antecedentes del diseño y referencias a investigaciones relacionadas e implementaciones anteriores de sistemas similares.

4

Las CPU VAX tenían un sistema de manejo de excepciones basado en la pila. En cada marco de llamada, se asignó una celda de 32 bits y se llenó con un cero. Si la subrutina a la que se llamaba deseaba manejar excepciones, todo lo que tenía que hacer era completar esa celda con la dirección de la rutina de manejo de excepciones.

Cuando se produce una excepción, se produce una búsqueda de pila. Esto fue fácil, ya que los marcos de pila estaban todos encadenados juntos. El primer marco de pila con una entrada distinta de cero provocaría que una pila se desenrollara hasta ese punto, y se llamaría al manejador de excepciones.

Recuerdo que esta era una de las características del procesador que estaba dirigida a lenguajes de nivel superior, pero no sé si había un lenguaje de nivel superior que aprovechaba la función. Creo que fue utilizado por el código de la biblioteca, que probablemente habría sido escrito en ensamblador.

0

¿No vuelve a las funciones setjmp, longjmp en C? Richie, Kernighan, y otros?