exception - tipos - ¿Qué lenguaje fue el primero en implementar el manejo de excepciones?
tipos de excepciones en programacion (8)
C ++ tenía excepciones antes que Java.
Esta pregunta no es técnica sino histórica. Pensé que hoy también pensé en Java como el "primer" lenguaje para usar el manejo de excepciones, hasta que me di cuenta de que mi razón para pensar de esta manera es probablemente porque Java fue el primer lenguaje que encontré que lo usaba, pero No tenía datos históricos para respaldar esa conclusión. Hoy en día, el manejo de excepciones es un lugar común en todos los idiomas modernos, así que me pregunto: ¿Alguien sabe cuándo comenzó a usarse ampliamente? ¿Y qué idioma fue el primero en comenzar a usarlo?
Con respecto al soporte de COBOL para el manejo de excepciones: el manejo de excepciones clásico (E / S y aritmética) ha existido desde al menos el estándar COBOL de 1968. El manejo de excepciones OO se agregó a COBOL en el estándar de 2002.
El manejo de excepciones realmente se remonta incluso a los lenguajes de programación; al principio, era un mecanismo de hardware para atrapar las condiciones de error (aquellas que provocaban una detención de la ejecución) y, opcionalmente, derivar a una subrutina.
Por ejemplo, la CPU VAX pudo detectar cuándo se accedió a una dirección virtual que no tenía mapeo físico, y llamar a una subrutina que cargó la página correspondiente desde el intercambio o que detuvo el programa. El mecanismo es esencialmente el mismo en los procesadores modernos (busque "buffer de traducción al costado"). Entonces, en cierto sentido, el primer lenguaje para tener excepciones fue el ensamblaje.
Los primeros lenguajes estructurados para tener excepciones parecen ser PL / I y CLU (ver Mipadi arriba).
La "transferencia" de Algol 68 tuvo un manejo de "eventos", pero no fue lo suficientemente eficiente como para que el programador la extendiera.
El estándar ALGOL 68 usa rutinas de eventos ampliamente en la "transput estándar" (stdio) para administrar los diversos eventos que surgen cuando los datos se leen (o escriben) en un archivo o dispositivo externo. Las rutinas integradas "en el evento" son:
- error de carácter, error de formato, final de línea, final de archivo lógico, final de página, final de archivo físico y error de valor
En 1983 se aceptaron propuestas para permitir que un programador definiera sus propias excepciones. AFAIK Ninguna de estas propuestas fue aceptada por el IFIP de las Naciones Unidas.
Sin embargo, el organismo de normalización ruso "GOST" estandarizó el manejo de excepciones cerca del final de Glasnost / Гласност en el estándar "GOST 27975-88 Lenguaje de programación ALGOL 68 extendido - Язык программирования АЛГОЛ 68 расширенный"
GOST 27975-88 utilizó las palabras clave adicionales: MÓDULO, PUB, POSTLUDE, NEST, EGG, ON, EXCEPTION y RAISE.
Aquí están las propuestas originales del Reino Unido:
AB49.1983-May : "Una propuesta para el manejo de excepciones en ALGOL 68", por CH Lindsey - Páginas: 10 - 15
AB49.1983-May : "Un mecanismo de manejo de excepciones para ALGOL 68", por Martyn Thomas - Páginas: 16 - 17
Aparecen similares a lo que ahora se implementa en python .
Ejemplo de Lindsey:
EXCEPTION singular = new exception ; # EXCEPTION la a new mode #
PROC gauss = ( REF [ , ] REAL a. REF [ ] REAL rhs ) VOID :
COMMENT a procedure to solve a set of simultaneous
equations COMMENT
BEGIN C the usual algorithm for gaussian elimination which, at some
point, may discover that a is singular C ;
IF C it makes this discovery C
THEN RAISE singular
FI;
C rest of algorithm CO
END;
Las excepciones bulitin fueron: tiempo agotado, espacio agotado, error aritmético, error de límites, error de alcance, imposibilidad de transferencia, final de archivo, error de caracteres, error de valor y error de formato
Ejemplo de Martyn Thomas:
BEGIN
on ( overflow , overflow handler ) ;
on ( bound check, boundcheckhandler ) ;
C body of the closed - clause C
EXIT
overflow handler:
C handle overflow exceptions C
EXIT
bound check handler:
C handle bound check C
END
Por cierto: el transbordador espacial soviético Buran/Буран completó un vuelo espacial no tripulado en 1988, el sistema de aterrizaje automático fue escrito en Algol. Los estadounidenses aún despliegan numerosos fragmentos de aparatos militares / espaciales en Jovial (Algol 58), y esto puede contener un manejo de excepciones desde la década de 1950. ¿Alguien tiene alguna idea de esto?...
Wikipedia: Buran/Буран : el transbordador orbitó la Tierra dos veces en 206 minutos de vuelo. Realizó un aterrizaje automático en la pista del transbordador en el Cosmódromo de Baikonur donde, a pesar de una velocidad de viento lateral de 61.2 kilómetros (38.0 mi) / hora, aterrizó solo 3 metros (9.8 pies) lateralmente y 10 metros (33 pies) longitudinalmente desde el objetivo .
No debemos olvidar a C, que tuvo setjmp(3)
y longjmp(3)
en la década de 1970.
Y antes de eso, Basic, con on error goto...
Nunca vi una implementación de algol68, pero escuché que tenía el fregadero de la cocina ...
Recuerdo haber usado controladores de excepciones en el lenguaje Mesa de Xerox en ... um ... 1984. El idioma existía mucho antes de esa fecha. Mesa tenía un interesante modelo de excepción. Además de propagar y manejar una excepción de la manera normal, un controlador podría "reanudar" una excepción, lo que provocaría que la ejecución regresara de la declaración de "lanzar".
CLU tuvo un manejo excepcional a principios de la década de 1970.
Lenguajes de programación: Principios y práctica , 2ª edición, por Kenneth C. Louden (un libro de texto notable sobre lenguajes de programación) señala que "el manejo de excepciones fue iniciado por el lenguaje PL / I en la década de 1960 y significativamente avanzado en CLU en la década de 1970. Sin embargo, fue solo en la década de 1980 y principios de la década de 1990 que las cuestiones de diseño se resolvieron en gran medida "(283).