Partilhar via


Devoluções e terminação

Existem duas expressões disponíveis que concluem a execução do subrouteno atual ou do programa; e return as fail expressões. Geralmente, os callables podem terminar a execução antes de executar todas as instruções com uma return expressão ou fail . Uma return expressão apenas terminará a execução do callalbe atual, enquanto um fail terminará a execução de todo o programa e resultará num erro de runtime.

Devolver expressão

A return expressão sai do atual callable e devolve o controlo ao destinatário. Altera o contexto da execução ao abrir uma moldura de pilha.

A expressão devolve sempre um valor ao contexto do destinatário; consiste na palavra-chave return, seguida de uma expressão do tipo adequado. O valor devolvido é avaliado antes de serem executadas quaisquer ações de terminação e o controlo ser devolvido. As ações de terminação incluem, por exemplo, a limpeza e libertação de qubits que são alocados no contexto do callable. Ao executar num simulador ou validador, as ações de terminação geralmente também incluem verificações relacionadas com o estado desses qubits, por exemplo, se são corretamente desentangados de todos os qubits que permanecem em direto.

A return expressão no final de um callable que devolve um Unit valor pode ser omitida. Nesse caso, o controlo é devolvido automaticamente quando todas as instruções são executadas e todas as ações de terminação foram executadas. Os callables podem conter várias return expressões, embora a implementação adjacente para operações que contenham múltiplas return expressões não possa ser gerada automaticamente.

Por exemplo,

return 1;

ou

return ();

Expressão pós-falha

A fail expressão termina totalmente a computação. Corresponde a um erro fatal que aborta o programa.

Consiste na palavra-chave fail, seguida de uma expressão do tipo String. Deve String fornecer informações sobre a falha encontrada.

Por exemplo,

fail "Impossible state reached";

ou, com uma cadeia interpolada,

fail $"Syndrome {syn} is incorrect";

Além do determinado String, uma fail expressão recolhe e permite a obtenção de informações sobre o estado do programa. Isto facilita o diagnóstico e a reparação da origem do erro e requer o suporte do runtime de execução e firmware, que podem variar entre diferentes destinos.