Istruzioni return e fail

Sono disponibili due espressioni che concludono l'esecuzione della sottoroutine corrente o del programma; e return le fail espressioni. In genere, i chiamabili possono terminare l'esecuzione prima di eseguire tutte le istruzioni con un'espressione return o fail . Un'espressione return termina solo l'esecuzione del callalbe corrente, mentre un fail terminerà l'esecuzione dell'intero programma e genererà un errore di runtime.

Espressione restituita

L'espressione return viene chiusa dalla chiamata corrente e restituisce il controllo al chiamante. Modifica il contesto dell'esecuzione selezionando uno stack frame.

L'espressione restituisce sempre un valore al contesto della chiamata; è costituita dalla parola chiave return, seguita da un'espressione del tipo appropriato. Il valore restituito viene valutato prima dell'esecuzione di qualsiasi azione di terminazione e della restituzione del controllo. Le azioni di terminazione includono, ad esempio, la pulizia e il rilascio di qubit allocati nel contesto della chiamata. Quando si esegue su un simulatore o un validator, le azioni di terminazione spesso includono anche controlli correlati allo stato di tali qubit, ad esempio se sono correttamente distanglati da tutti i qubit che rimangono attivi.

L'espressione return alla fine di una chiamata che restituisce un Unit valore può essere omesso. In questo caso, il controllo viene restituito automaticamente quando tutte le istruzioni sono state eseguite e tutte le azioni di terminazione sono state eseguite. Le chiamate possono contenere più espressioni, anche se l'implementazione adiacente per le operazioni contenenti più returnreturn espressioni non può essere generata automaticamente.

Ad esempio,

return 1;

oppure

return ();

Espressione fail

L'espressione fail termina interamente il calcolo. Corrisponde a un errore irreversibile che interrompe il programma.

È costituita dalla parola chiave fail, seguita da un'espressione di tipo String. L'oggetto String deve fornire informazioni sull'errore rilevato.

Ad esempio,

fail "Impossible state reached";

oppure, usando una stringa interpolata,

fail $"Syndrome {syn} is incorrect";

Oltre al specificato String, un'espressione fail raccoglie idealmente e consente il recupero di informazioni sullo stato del programma. Ciò facilita la diagnosi e la correzione dell'origine dell'errore e richiede supporto dal runtime e dal firmware in esecuzione, che può variare tra destinazioni diverse.