Articulo de referencia

Manejo de excepciones

En informática y programación , el manejo de excepciones es el proceso de responder a la aparición de excepciones —condiciones anómalas o excepcionales que requieren un procesam...

En informática y programación , el manejo de excepciones es el proceso de responder a la aparición de excepciones —condiciones anómalas o excepcionales que requieren un procesamiento especial— durante la ejecución de un programa . En general, una excepción interrumpe el flujo normal de ejecución y activa un manejador de excepciones preregistrado ; los detalles de cómo se realiza esto dependen de si se trata de una excepción de hardware o de software y de cómo se implementa la excepción de software.

Las excepciones se definen en diferentes capas de un sistema informático. Las capas típicas son las interrupciones definidas por la CPU , las señales definidas por el sistema operativo (SO) y las excepciones definidas por el lenguaje de programación . Cada capa requiere diferentes métodos de manejo de excepciones, aunque pueden estar interrelacionadas; por ejemplo, una interrupción de la CPU podría convertirse en una señal del SO. Algunas excepciones, especialmente las de hardware, pueden manejarse de forma tan eficiente que la ejecución puede reanudarse desde donde se interrumpió.

Definición

La definición de excepción se basa en la observación de que cada procedimiento tiene una precondición , un conjunto de circunstancias bajo las cuales terminará "normalmente". [ 1 ] Un mecanismo de manejo de excepciones permite que el procedimiento genere una excepción [ 2 ] si se viola esta precondición, [ 1 ] por ejemplo, si el procedimiento ha sido llamado con un conjunto de argumentos anormal. El mecanismo de manejo de excepciones entonces maneja la excepción. [ 3 ]

The precondition, and the definition of exception, is subjective. The set of "normal" circumstances is defined entirely by the programmer, e.g. the programmer may deem division by zero to be undefined, hence an exception, or devise some behavior such as returning zero or a special "ZERO DIVIDE" value (circumventing the need for exceptions).[4] Common exceptions include an invalid argument (e.g. value is outside of the domain of a function),[5] an unavailable resource (like a missing file,[6] a network drive error,[7] or out-of-memory errors[8]), or that the routine has detected a normal condition that requires special handling, e.g., attention, end of file.[9] Social pressure is a major influence on the scope of exceptions and use of exception-handling mechanisms, i.e. "examples of use, typically found in core libraries, and code examples in technical books, magazine articles, and online discussion forums, and in an organization’s code standards".[10]

Exception handling solves the semipredicate problem, in that the mechanism distinguishes normal return values from erroneous ones. In languages without built-in exception handling such as C, routines would need to signal the error in some other way, such as the common return code and errno pattern.[11] Taking a broad view, errors can be considered to be a proper subset of exceptions,[12] and explicit error mechanisms such as errno can be considered (verbose) forms of exception handling.[11] The term "exception" is preferred to "error" because it does not imply that anything is wrong - a condition viewed as an error by one procedure or programmer may not be viewed that way by another.[13]

The term "exception" may be misleading because its connotation of "anomaly" indicates that raising an exception is abnormal or unusual,[14] when in fact raising the exception may be a normal and usual situation in the program.[13] For example, suppose a lookup function for an associative array throws an exception if the key has no value associated. Depending on context, this "key absent" exception may occur much more often than a successful lookup.[15]

History

El primer sistema de manejo de excepciones por hardware se encontró en la computadora UNIVAC I de 1951. El desbordamiento aritmético ejecutaba dos instrucciones en la dirección 0 que podían transferir el control o corregir el resultado. [ 16 ] El manejo de excepciones por software se desarrolló en las décadas de 1960 y 1970. Posteriormente, el manejo de excepciones fue ampliamente adoptado por muchos lenguajes de programación a partir de la década de 1980.

Excepciones de hardware

No existe un consenso claro sobre el significado exacto de una excepción con respecto al hardware. [ 17 ] Desde el punto de vista de la implementación, se maneja de forma idéntica a una interrupción : el procesador detiene la ejecución del programa actual, busca el manejador de interrupciones en la tabla de vectores de interrupción para esa excepción o condición de interrupción, guarda el estado y cambia el control.

Excepciones de punto flotante IEEE 754

El manejo de excepciones en el estándar de punto flotante IEEE 754 se refiere en general a condiciones excepcionales y define una excepción como "un evento que ocurre cuando una operación sobre ciertos operandos no tiene un resultado adecuado para cualquier aplicación razonable. Dicha operación puede señalar una o más excepciones invocando el manejo predeterminado o, si se solicita explícitamente, un manejo alternativo definido por el lenguaje".

Por defecto, una excepción IEEE 754 es reanudable y se maneja sustituyendo un valor predefinido para diferentes excepciones, por ejemplo, infinito para una excepción de división por cero, y proporcionando indicadores de estado para comprobar posteriormente si se produjo la excepción (véase la revisión C99 del lenguaje C para un ejemplo típico de manejo de excepciones IEEE 754). Un estilo de manejo de excepciones habilitado por el uso de indicadores de estado implica: primero, calcular una expresión utilizando una implementación rápida y directa; comprobar si falló probando los indicadores de estado; y luego, si es necesario, llamar a una implementación más lenta y numéricamente más robusta. [ 18 ]

El estándar IEEE 754 utiliza el término "trapping" para referirse a la llamada a una rutina de manejo de excepciones proporcionada por el usuario en condiciones excepcionales, y es una característica opcional del estándar. El estándar recomienda varios escenarios de uso para esto, incluida la implementación de la pre-sustitución no predeterminada de un valor seguida de la reanudación, para manejar de manera concisa singularidades removibles . [ 18 ] [ 19 ] [ 20 ]

El comportamiento predeterminado de manejo de excepciones IEEE 754, que consiste en reanudar la ejecución tras la sustitución previa de un valor predeterminado, evita los riesgos inherentes al cambio del flujo de control del programa ante excepciones numéricas. Por ejemplo, el lanzamiento de la nave espacial Cluster en 1996 terminó en una explosión catastrófica, debida en parte a la política de manejo de excepciones de Ada , que abortaba el cálculo ante un error aritmético. William Kahan afirma que el comportamiento predeterminado de manejo de excepciones IEEE 754 lo habría evitado. [ 19 ]

En lenguajes de programación

En programación informática , existen varios mecanismos de lenguaje de programación para el manejo de excepciones . El término excepción se usa normalmente para denotar una estructura de datos que almacena información sobre una condición excepcional. Un mecanismo para transferir el control, o generar una excepción, se conoce como throw ; se dice que la excepción se ha lanzado . La ejecución se transfiere a un catch .

En las interfaces de usuario

Los frameworks de desarrollo web front-end , como React y Vue , han introducido mecanismos de manejo de errores donde los errores se propagan hacia arriba en la jerarquía de componentes de la interfaz de usuario (UI), de forma análoga a como se propagan los errores en la pila de llamadas durante la ejecución del código. [ 21 ] [ 22 ] Aquí, el mecanismo de límite de error sirve como análogo al mecanismo try-catch típico. De esta manera, un componente puede asegurar que los errores de sus componentes hijos se capturen y manejen, y no se propaguen a los componentes padres.

Por ejemplo, en Vue.js , un componente capturaría errores mediante la implementaciónerrorCaptured

Vue.component('parent',{template: '<div><slot></slot></div>',errorCaptured:(err,vm,info)=>alert('An error occurred'); }) Vue.component('child',{template: '<div>{{cause_error()}}</div>' }) 

Cuando se utiliza de esta manera en el marcado:

<padre> <hijo> </hijo> </padre>

El error producido por el componente hijo es capturado y manejado por el componente padre. [ 23 ]

Véase también

Referencias

  1. 1 2 Cristian, Flaviu (1980). "Exception Handling and Software Fault Tolerance". IEEE Transactions on Computers (6) (FTCS-25 reprint  ed.): 531– 540. CiteSeerX 10.1.1.116.8736 . doi : 10.1109/TC.1982.1676035 . OCLC 1029229019 . S2CID 18345469 .   
  2. Goodenough 1975b , págs. 683–684.
  3. Goodenough 1975b, p. 684.
  4. Black 1982, pp. 13–15.
  5. Keeton, Cavaness & Friesen 2001: ArrayIndexOutOfBoundsException
  6. Keeton, Cavaness & Friesen 2001: FileNotFoundException
  7. "Unusual error message : java.io.SyncFailedException: sync failed". groups.google.com. Retrieved 17 November 2023.
  8. "Understand the OutOfMemoryError Exception". docs.oracle.com. Retrieved 17 November 2023.
  9. Java: FileNotFoundException
  10. Kiniry, J. R. (2006). "Exceptions in Java and Eiffel: Two Extremes in Exception Design and Application". Advanced Topics in Exception Handling Techniques(PDF). Lecture Notes in Computer Science. Vol. 4119. pp. 288–300. doi:10.1007/11818502_16. ISBN 978-3-540-37443-5. S2CID 33283674.
  11. 12Lang, Jun; Stewart, David B. (March 1998). "A study of the applicability of existing exception-handling techniques to component-based real-time software technology". ACM Transactions on Programming Languages and Systems. 20 (2): 276. CiteSeerX 10.1.1.33.3400. doi:10.1145/276393.276395. S2CID 18875882. Perhaps the most common form of exception-handling method used by software programmers is the "return-code" technique that was popularized as part of C and UNIX.
  12. Levin 1977, p. 5.
  13. 12Liskov, B.H.; Snyder, A. (November 1979). "Exception Handling in CLU"(PDF). IEEE Transactions on Software Engineering. SE-5 (6): 546–558. Bibcode:1979ITSEn...5..546L. doi:10.1109/TSE.1979.230191. S2CID 15506879. Retrieved 19 December 2021.
  14. "Thesaurus results for EXCEPTION". www.merriam-webster.com. Retrieved 17 November 2023.
  15. Levin 1977, p. 4.
  16. Smotherman, Mark. "Interrupts". Retrieved 4 January 2022.
  17. Hyde, Randall. "El arte del ensamblaje: Capítulo diecisiete" . www.plantation-productions.com . Consultado el 22 de diciembre de 2021 .
  18. 1 2 Xiaoye Li ; James Demmel (1994). "Algoritmos numéricos más rápidos mediante el manejo de excepciones, IEEE Transactions on Computers, 43(8)": 983– 992.{{cite journal}}: Para citar una revista se requiere |journal=( ayuda )
  19. 1 2 W.Kahan (5 de julio de 2005). "Una demostración de presustitución para ∞/∞" (PDF) . Archivado (PDF) del original el 10 de marzo de 2012.
  20. Hauser, John R. (marzo de 1996). "Manejo de excepciones de punto flotante en programas numéricos" . ACM Transactions on Programming Languages ​​and Systems . 18 (2): 139– 174. doi : 10.1145/227699.227701 . S2CID 9820157 . 
  21. "Límites de error" . React . Consultado el 10 de diciembre de 2018 .
  22. "API de Vue.js" . Vue.js. Consultado el 10 de diciembre de 2018 .
  23. "Manejo de errores con Vue.js" . CatchJS . Consultado el 10 de diciembre de 2018 .
  • Black, Andrew P. (enero de 1982). Manejo de excepciones: El caso en contra (PDF) (PhD). Universidad de Oxford. CiteSeerX 10.1.1.94.5554 . OCLC 123311492 .  
  • Gabriel, Richard P.; Steele , Guy L. (2008). Un patrón de evolución del lenguaje (PDF) . LISP50: Celebrando el 50.º aniversario de Lisp. págs. 1–10 . doi : 10.1145/1529966.1529967 . ISBN  978-1-60558-383-9.
  • Goodenough, John B. (1975a). Manejo estructurado de excepciones . Actas del 2.º simposio ACM SIGACT-SIGPLAN sobre principios de lenguajes de programación - POPL '75. págs. 204–224 . doi : 10.1145/512976.512997 . 
  • Goodenough, John B. (1975). "Manejo de excepciones: Problemas y una notación propuesta" (PDF) . Communications of the ACM . 18 (12): 683– 696. CiteSeerX 10.1.1.122.7791 . doi : 10.1145/361227.361230 . S2CID 12935051 .  
  • Levin, Roy (junio de 1977). Estructuras de programas para el manejo de condiciones excepcionales (PDF) (tesis doctoral). Universidad Carnegie-Mellon. DTIC ADA043449 . Archivado (PDF) del original el 22 de diciembre de 2021.
  • Stroustrup, Bjarne (1994). El diseño y la evolución de C++ (1.ª  ed.). Reading, Mass.: Addison-Wesley. ISBN 0-201-54330-3.
  • White, Jon L (mayo de 1979). NIL - Una perspectiva (PDF) . Actas de la Conferencia de Usuarios de Macsyma de 1979.
  • Keeton, Brian; Cavaness, Chuck; Friesen, Geoff (2001). Edición especial: Uso de Java 2 Edición estándar . Que Publishing. ISBN 978-0-7897-2468-7.