Systém typů

Vzhledem k tomu, že se zaměřujeme na kvantové algoritmy směrem k tomu, co by se mělo dosáhnout spíše než na reprezentaci problému z hlediska datových struktur, je přirozeným volbou, když vezmeme funkční perspektivu návrhu jazyka. Systém typů je současně výkonným mechanismem, který lze využít k analýze programu a dalším kontrolám kompilace, které usnadňují formulaci robustního kódu.

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

Dostupné typy

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

Typ Description
Unit Představuje jeden typ, jehož jedinou hodnotou je ().
Int Představuje 64bitové celé číslo se sign. Hodnoty se pohybují od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807.
BigInt Představuje celočíselné hodnoty s libovolnou velikostí.
Double Představuje 64bitové číslo s plovoucí desetinou čárkou s dvojitou přesností. Hodnoty jsou v rozsahu -1,79769313486232e308 až 1,79769313486232e308 i NaN (nikoli číslo).
Bool Představuje logické hodnoty. Možné hodnoty jsou true nebo false.
String Představuje text jako hodnoty , které se skládají z posloupnosti jednotek kódu UTF-16.
Qubit Představuje neprůhlé identifikátor, pomocí kterého je možné řešit virtuální kvantovou paměť. Hodnoty typu Qubit se vytvářejí prostřednictvím přidělení.
Result Představuje výsledek projektivní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, , PauliYPauliXnebo PauliZ.
Range Představuje seřazenou sekvenci rovnoměrně rozmístěných Int hodnot. 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í.
Typ definovaný uživatelem Představuje uživatelem definovaný typ skládající se z pojmenovaných a anonymních položek různých typů. Hodnoty se vytvářejí vyvoláním konstruktoru.
Operace Představuje ne deterministický volání , které přebírá jeden (pravděpodobně řazený) vstupní argument řazené kolekce členů vrátí jeden (pravděpodobně řazený) výstup. Volání hodnot operací můžou mít vedlejší účinky a výstup se může u každého 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ů vrátí jeden (pravděpodobně řazený) výstup. Volání hodnot funkcí nemají vedlejší účinky a výstup bude vždy stejný vzhledem ke stejnému vstupu.