Sistema de Tipo

Com o foco para o algoritmo quântico ser mais para o que deve ser alcançado e não sobre uma representação problemática em termos de estruturas de dados, ter uma perspetiva mais funcional sobre o design da linguagem é uma escolha natural. Ao mesmo tempo, o sistema tipo é um mecanismo poderoso que pode ser alavancado para análise de programas e outras verificações de tempo de compilação que facilitam a formulação de código robusto.

Em suma, o sistema de Q# tipo é bastante minimalista, no sentido de que não existe uma noção explícita de classes ou interfaces como se pode ser usado a partir de línguas clássicas como C# ou Java. Também tomamos uma abordagem um pouco pragmática, fazendo progressos incrementais, de modo a que determinadas construções ainda não estejam totalmente integradas no sistema tipo. Um exemplo são os functors, que podem ser usados dentro de expressões, mas ainda não têm uma representação no sistema de tipo. Consequentemente, não podem atualmente ser atribuídos ou aprovados como argumentos, à semelhança do que acontece com as chamadas parametrizadas do tipo. Esperamos fazer progressos incrementais no alargamento do sistema de tipo para ser mais completo e equilibrar as necessidades imediatas com planos a longo prazo.

Tipos disponíveis

Todos os tipos são Q#imutáveis.

Tipo Description
Unit Representa um tipo singleton cujo único valor é ().
Int Representa um número inteiro assinado de 64 bits. Os valores variam entre -9.223.372.036.854.775.808 e 9.223.372.036.854.775.807.
BigInt Representa valores inteiros assinados de qualquer tamanho.
Double Representa um número de ponto flutuante de precisão dupla de 64 bits. Os valores variam entre -1.79769313486232e308 e 1.79769313486232e308, bem como na NaN (não um número).
Bool Representa valores booleanos. Os valores possíveis são true ou false.
String Representa o texto como valores que consistem numa sequência de unidades de código UTF-16.
Qubit Representa um identificador opaco pelo qual a memória quântica virtual pode ser abordada. Os valores do tipo Qubit são instantâneos através da atribuição.
Result Representa o resultado de uma medição projetiva nos espaços eigen de um operador quântico com eigenvalues ±1. Os valores possíveis são Zero ou One.
Pauli Representa uma matriz pauli de um só qubit. Os valores possíveis sãoPauliI, PauliXPauliYou PauliZ.
Range Representa uma sequência ordenada de valores igualmente espaçados Int . Os valores podem representar sequências em ordem ascendente ou descendente.
Matriz Representa valores que cada um contém uma sequência de valores do mesmo tipo.
Rio Tuple Representa valores que cada um contém um número fixo de itens de diferentes tipos. Tuples contendo um único elemento são equivalentes ao elemento que contêm.
Tipo definido pelo utilizador Representa um tipo definido pelo utilizador que consiste em itens nomeados e anónimos de diferentes tipos. Os valores são instantâneos invocando o construtor.
Operação Representa uma chamada não determinável que requer um argumento de entrada (possivelmente valor) devolve uma saída (possivelmente valorizada por tuple). As chamadas para valores de funcionamento podem ter efeitos colaterais e a saída pode variar para cada chamada mesmo quando invocada com o mesmo argumento.
Função Representa uma chamada determinista que requer um argumento de entrada (possivelmente valor) devolve uma saída (possivelmente valorizada por tuple). 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.