Partager via


Retours et terminaison

Il existe deux expressions disponibles qui concluent l’exécution de la sous-routine actuelle ou du programme ; les return expressions et .fail En règle générale, les callables peuvent mettre fin à leur exécution avant d’exécuter toutes leurs instructions avec une return expression ou fail . Une return expression met simplement fin à l’exécution de l’callalbe actuel, tandis qu’un fail met fin à l’exécution de l’ensemble du programme et génère une erreur d’exécution.

Expression de retour

L’expression return se ferme de l’callable actuel et retourne le contrôle à l’appelé. Elle change le contexte de l’exécution en dépilant un frame de pile.

L’expression retourne toujours une valeur au contexte de l’appelé ; il se compose du mot clé return, suivi d’une expression du type approprié. La valeur renvoyée est évaluée avant l’exécution des actions de fin et le renvoi du contrôle. Les actions de fin incluent par exemple le nettoyage et la libération des qubits qui sont alloués dans le contexte du callable. En cas d’exécution sur un simulateur ou un validateur, les actions de fin sont souvent des vérifications liées à l’état de ces qubits, par exemple, pour vérifier s’ils sont correctement désintriqués de tous les qubits qui restent en ligne.

L’expression return à la fin d’un callable qui retourne une Unit valeur peut être omise. Dans ce cas, le contrôle est retourné automatiquement quand toutes les instructions se sont exécutées et que toutes les actions de fin ont été effectuées. Les callables peuvent contenir plusieurs return expressions, bien que l’implémentation d’adjoint pour les opérations contenant plusieurs return expressions ne puisse pas être générée automatiquement.

Par exemple,

return 1;

ou

return ();

Expression d’échec

L’expression fail termine complètement le calcul. Elle correspond à une erreur irrécupérable qui interrompt le programme.

Il se compose du mot clé fail, suivi d’une expression de type String. le String doit fournir des informations sur l’échec rencontré.

Par exemple,

fail "Impossible state reached";

ou en utilisant une chaîne interpolée,

fail $"Syndrome {syn} is incorrect";

En plus de la donnée String, une fail expression collecte et autorise idéalement la récupération d’informations sur l’état du programme. Cela facilite le diagnostic et la résolution de la source de l’erreur, et nécessite la prise en charge du runtime et du microprogramme en cours d’exécution, qui peuvent varier selon les différentes cibles.