Systém typů

Vzhledem k tomu, že se zaměřujeme na kvantové algoritmy, které by se měly dosáhnout spíše než na reprezentaci problému z hlediska datových struktur, je přirozenější pohled na návrh jazyka. Systém typů je zároveň výkonný mechanismus, který lze použít pro analýzu programu a další kontroly v době kompilace, které usnadňují formulaci robustního kódu.

Celkově je systém typů Q# poměrně minimalistický, v tom smyslu, že neexistuje explicitní pojem tříd nebo rozhraní, protože se dá použít z klasických jazyků, jako je C# nebo Java. Bereme také poněkud pragmatičtější přístup k postupnému pokroku, takže některé konstrukce ještě nejsou plně integrované do systému typů. Příkladem jsou funktory, které lze použít ve výrazech, ale zatím nemají reprezentaci v systému typů. Odpovídajícím způsobem není možné je v současné době přiřadit ani předat jako argumenty, podobně jako u parametrizovaných volatelných typů. Očekáváme, že přírůstkový pokrok při rozšiřování systému typů bude dokončenější a vyrovnáváme okamžité potřeby s dlouhodobějšími plány.

Dostupné typy

Všechny typy v Q# jsou neměnné.

Typ Popis
Unit Představuje typ singleton, jehož jedinou hodnotou je ().
Int Představuje 64bitové celé číslo se signedm. hodnot rozsah od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807.
BigInt Představuje celé číslo signed inte hodnoty libovolné velikosti.
Double Představuje 64bitové číslo s plovoucí desetinnou čárkou s dvojitou přesností. hodnoty jsou v rozsahu -1,79769313486232e308 až 1,79769313486232e308 a také NaN (ne číslo).
Bool Představuje logické hodnoty. Možné hodnoty jsou true nebo false.
String Představuje text jako hodnoty, které se skládají ze sekvence jednotek kódu UTF-16.
Qubit Představuje neprůsaný identifikátor, pomocí kterého lze řešit virtuální kvantovou paměť. hodnoty typu Qubit se vytvoří instance prostřednictvím přidělení.
Result Představuje výsledek projektového měření na eigenspaces kvantového operátoru s eigenvalues ±1. Možné hodnoty jsou Zero nebo One.
Pauli Představuje matici Pauli s jedním qubitem. Možné hodnoty jsou PauliI, PauliX, PauliYnebo PauliZ.
Range Představuje seřazenou sekvenci rovnoměrně rozmístěných hodnot Int. hodnoty mohou představovat sekvence ve vzestupném nebo sestupném pořadí.
Pole Představuje hodnoty, které každý obsahuje posloupnost hodnot stejného typu.
Tuple Představuje hodnoty, které každý obsahuje pevný počet položek různých typů. Řazené kolekce členů obsahující jeden prvek jsou ekvivalentní elementu, který obsahují.
struct Představuje uživatelem definovaný typ sestávající z pojmenovaných položek různých typů. hodnoty se vytvoří instance při deklarování nové instance.
Operace Představuje ne deterministický volatelný, který přebírá jeden (pravděpodobně řazený) vstupní argument řazené kolekce členů a vrací jeden (pravděpodobně řazený) výstup. Volání operací hodnoty můžou mít vedlejší účinky a výstup se může pro každé volání lišit, i když je vyvolán se stejným argumentem.
Funkce Představuje deterministický volatelný, který přebírá jeden (pravděpodobně řazený) vstupní argument řazené kolekce členů a vrací jeden (pravděpodobně řazený) výstup. Volání funkcí hodnoty nemají vedlejší účinky a výstup bude vždy stejný vzhledem ke stejnému vstupu.