2012-01-23 8 views

Respuesta

3

Bueno, también hay buena vieja

ON ERROR RESUME NEXT 

Además, algunos lenguajes de programación (algunos Lisps y esquemas, tal vez Smalltalk) separadas lanzar una excepción de escapan (es decir, desenrollar la pila). Es decir, en algunas circunstancias es posible manejar una excepción en el contexto en el que se genera y continuar con el cálculo; estas se llaman con excepciones continuas.

2

Existe un buen valor de retorno. GO realmente usa valores de retorno en lugar de excepciones. Como C no tiene un mecanismo de excepción, también utiliza valores de retorno, más una variable global (errno).

Editar Mi información acerca de GO parece estar desactualizada, ya que ahora tiene un mecanismo de manejo de excepciones. Aún así, los valores de retorno se pueden usar para informar errores.

3

En general, parece que las estrategias de manejo de error se puede dividir en tres categorías:

  • No hacer nada (ON ERROR RESUME NEXT, como se mencionó Ryan)
  • indican el error/fallo en un código de retorno. En algunos casos, esto puede ser un parámetro de salida adicional, como un puntero a un indicador de error que se configura en caso de error.
  • Invocar un flujo de control alternativo. Esto puede ser extremo (llamar al abort() para detener el programa en frío), o tomar la forma de manejo de excepciones o algo similar.

Existen varias implementaciones y estilos de flujos de control alternativos. Una es las señales POSIX, que a menudo resultan en la finalización del programa por defecto. Visual Basic también tiene un recurso de flujo de control alternativo en ON ERROR GOTO.

Perl combina flujo de control alternativa y códigos de retorno mediante el uso de die, que hace que el programa termina, en subinterpreters tal que la ejecución de die en un eval 'de bloque resultados D en un código de error se establece en el código de llamada.

Luego, por supuesto, hay un manejo de excepciones tradicional, junto con variaciones como las excepciones reiniciable/reanudable de Common Lisp. Incluso el enfoque signal/abort() y ON ERROR GOTO se pueden considerar sistemas primitivos de manejo de excepciones. Por lo tanto, teniendo en cuenta las excepciones en general, la mayoría de los sistemas alternativos de control de errores de flujo se pueden considerar como una forma de manejo de excepciones.

En realidad, implementar excepciones abre un conjunto interesante de espacios de diseño. Hay varias maneras en que la implementación del lenguaje puede hacerlo:

  1. Establezca un indicador/valor de retorno anormal y devuelva la persona que llama.Lo que Perl requiere que haga explícitamente - die y verifique la variable de error $? - es una versión manual de este método. Un lenguaje de programación que hace esto usa el método de manejo de errores de código de retorno para implementar excepciones, y puede exponerlas a través de una construcción try-catch; Vala es un buen ejemplo de esto.
  2. Desenrollar la pila (como si se devolvieran funciones) al controlador de excepciones y ejecutarla. Esto se puede hacer directamente, ya sea por maquinaria VM o inspeccionando la pila. También se puede simular con (2); cuando se usan para implementar excepciones, estos dos enfoques son semánticamente equivalentes.
  3. Invoque el código de manejo de excepciones en el alcance dinámico del código que arroja el error. Esto es lo que hace Common Lisp con su construcción condition-case - el controlador de errores se ejecuta sin desenrollar la pila, y luego indica si el error se debe manejar reintentando o desenrollando.
  4. Use double-barrelled continuation passing. En el estilo de continuación de paso normal (CPS), en lugar de devolver un valor, una función llama a otra función (llamada continuación) que es proporcionada por su interlocutor como uno de sus argumentos con el resultado de "continuar" el cálculo. En CPS de doble barril, la persona que llama proporciona dos continuaciones: una para los resultados normales y otra para los errores. Esto se puede usar para implementar una semántica equivalente a las de (1) y (2), pero es una estrategia alternativa interesante que puede abrir la oportunidad de construir una semántica más interesante.

Por lo tanto, en resumen: hay tres enfoques básicos: ignorar el error, los códigos de retorno y varias facilidades de excepción. Pero dentro del espacio de las instalaciones tipo excepción, hay una variedad de opciones tanto para semántica o interfaz como para implementar esa semántica.

Cuestiones relacionadas