Sistema de tipo
Mantendo o foco do algoritmo quântico para o que deve ser alcançado, em vez de uma representação do problema em termos de estruturas de dados, a adoção de uma perspectiva mais funcional no design da linguagem é uma escolha natural. Ao mesmo tempo, o sistema de tipos é um mecanismo eficiente que pode ser utilizado para análise de programas e outras verificações de tempo de compilação que facilitam a formulação de código robusto.
De um modo geral, o sistema de tipos Q# é bastante minimalista, no sentido de que não há uma noção explícita de classes ou interfaces, pois uma delas pode ser usada em linguagens clássicas como C# ou Java. Também adotamos uma abordagem um pouco pragmática, fazendo o progresso incremental, de modo que alguns constructos ainda não estejam totalmente integrados ao sistema de tipos. Por exemplo, os functors que podem ser usados em expressões, mas ainda não têm uma representação no sistema de tipos. Desta forma, eles não podem ser atribuídos ou passados como argumentos, assim como é o caso de callables parametrizados por tipo. Esperamos fazer um progresso incremental, estendendo o sistema de tipos para ser mais completo, e balancear as necessidades imediatas com planos de longo prazo.
Tipos disponíveis
Todos os tipos no Q# são imutáveis.
Type | Descrição |
---|---|
Unit |
Representa um tipo de singleton cujo único valor é () . |
Int |
Representa um inteiro com sinal de 64 bits. Valores variam de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807. |
BigInt |
Representa valores inteiros com sinal de qualquer tamanho. |
Double |
Representa um número de ponto flutuante de 64 bits de precisão dupla. Valores variam de -1.79769313486232e308 a 1.79769313486232e308, bem como NaN (não é um número). |
Bool |
Representa valores boolianos. Os possíveis valores são true ou false . |
String |
Representa o texto como valores que consistem em uma sequência de unidades de código UTF-16. |
Qubit |
Representa um identificador opaco pelo qual a memória quântica virtual pode ser resolvida.
Valores do tipo Qubit são instanciados por meio de alocação. |
Result |
Representa o resultado de uma medida projetada no eigenspaces de um operador quântico com eigenvalues ± 1. Os valores possíveis são Zero ou One . |
Pauli |
Representa uma matriz de Pauli de qubit único. Os valores possíveis são PauliI , PauliX , PauliY ou PauliZ . |
Range |
Representa uma sequência ordenada de valores Int espaçados igualmente.
Valores podem representar sequências em ordem crescente ou decrescente. |
Array | Representa valores que contêm uma sequência de valores do mesmo tipo. |
Tupla | Representa valores que contêm um número fixo de itens de tipos diferentes. Tuplas com um único elemento são equivalentes ao elemento que contêm. |
Tipo definido pelo usuário | Representa um tipo definido pelo usuário que consiste em itens nomeados e anônimos de tipos diferentes. Valores são instanciados invocando o construto. |
Operação | Representa um callable não determinístico que usa um argumento de entrada (possivelmente com valor de tupla) e retorna uma saída (possivelmente com valor de tupla). As chamadas para valores de operação podem ter efeitos colaterais e a saída pode variar para cada chamada, mesmo quando invocada com o mesmo argumento. |
Função | Representa um callable determinístico que usa um argumento de entrada (possivelmente com valor de tupla) e retorna uma saída (possivelmente com valor de tupla). As chamadas para valores de função não têm efeitos colaterais e a saída será sempre a mesma dada a mesma entrada. |