Devoluciones y finalización
Hay dos expresiones disponibles que concluyen la ejecución de la subrutina actual o el programa; y las return
fail
expresiones . Por lo general, los invocables pueden finalizar su ejecución antes de ejecutar todas sus instrucciones con una return
expresión o fail
. Una return
expresión solo finalizará la ejecución del callalbe actual, mientras que un fail
finalizará la ejecución de todo el programa y dará como resultado un error en tiempo de ejecución.
Expresión de retorno
La return
expresión sale del actual invocable y devuelve el control al destinatario. Muestra un marco de pila para cambiar el contexto de la ejecución.
La expresión siempre devuelve un valor al contexto del destinatario; consta de la palabra clave return
, seguida de una expresión del tipo adecuado. El valor devuelto se evalúa antes de que se realicen las acciones de terminación y se devuelva el control. Estas acciones de terminación incluyen, por ejemplo, limpiar y liberar los cúbits que se han asignado en el contexto del invocable. Cuando se ejecutan en un simulador o validador, las acciones de terminación a menudo también incluyen comprobaciones relacionadas con el estado de esos cúbits, por ejemplo, si están desentrelazados correctamente de todos los cúbits que permanecen activos.
Se return
puede omitir la expresión al final de un invocable que devuelve un Unit
valor. En ese caso, el control se devuelve automáticamente cuando se han ejecutado todas las instrucciones y se han realizado todas las acciones de terminación. Los invocables pueden contener varias return
expresiones, aunque la implementación adyacente para las operaciones que contienen varias return
expresiones no se puede generar automáticamente.
Por ejemplo,
return 1;
or
return ();
Expresión fail
La fail
expresión finaliza el cálculo por completo. Corresponde a un error irrecuperable que anula el programa.
Consta de la palabra clave fail
, seguida de una expresión de tipo String
.
String
debe proporcionar información sobre el error detectado.
Por ejemplo,
fail "Impossible state reached";
o mediante una cadena interpolada,
fail $"Syndrome {syn} is incorrect";
Además de la determinada String
, una fail
expresión idealmente recopila y permite la recuperación de información sobre el estado del programa. Esto facilita el diagnóstico y la solución del origen del error, y requiere compatibilidad con el entorno de ejecución y el firmware, lo que puede variar entre diferentes destinos.