Delen via


Type systeem

Met de focus voor kwantumalgoritmen die meer gericht zijn op wat er moet worden bereikt in plaats van op een probleemweergave in termen van gegevensstructuren, is het gebruik van een functioneel perspectief op taalontwerp een natuurlijke keuze. Tegelijkertijd is het typesysteem een krachtig mechanisme dat kan worden gebruikt voor programmaanalyse en andere compileertijdcontroles die het formuleren van robuuste code mogelijk maken.

Al met al is het Q# typesysteem vrij minimalistisch, in de zin dat er geen expliciet begrip is van klassen of interfaces, zoals een kan worden gebruikt van klassieke talen zoals C# of Java. We nemen ook een enigszins pragmatische aanpak om incrementele vooruitgang te boeken, zodat bepaalde constructies nog niet volledig zijn geïntegreerd in het typesysteem. Een voorbeeld hiervan zijn functors, die kunnen worden gebruikt in expressies, maar nog geen weergave in het typesysteem hebben. Ze kunnen momenteel niet als argumenten worden toegewezen of doorgegeven, net zoals het geval is voor geparametriseerde aanroepbare typen. We verwachten incrementele vooruitgang te boeken bij het uitbreiden van het typesysteem om vollediger te zijn en onmiddellijke behoeften te verdelen met plannen op langere termijn.

Beschikbare typen

Alle typen Q# zijn onveranderbaar.

Type Description
Unit Vertegenwoordigt een singletontype waarvan de enige waarde is ().
Int Vertegenwoordigt een 64-bits ondertekend geheel getal. Waarden variëren van -9.223.372.036.854.775.808 tot 9.223.372.036.854.775.807.
BigInt Vertegenwoordigt ondertekende geheel getalwaarden van elke grootte.
Double Vertegenwoordigt een 64-bits drijvendekommanummer met dubbele precisie. Waarden variëren van -1,79769313486232e308 tot 1.79769313486232e308 en NaN (geen getal).
Bool Vertegenwoordigt Booleaanse waarden. Mogelijke waarden zijn true en false.
String Vertegenwoordigt tekst als waarden die bestaan uit een reeks UTF-16-code-eenheden.
Qubit Vertegenwoordigt een ondoorzichtige id waarmee virtueel kwantumgeheugen kan worden verholpen. De waarden van het type Qubit worden geïnstantieerd via toewijzing.
Result Vertegenwoordigt het resultaat van een projectieve meting op de eigenspaces van een kwantumoperator met eigenwaarden ±1. Mogelijke waarden zijn Zero of One.
Pauli Vertegenwoordigt een Pauli-matrix met één qubit. Mogelijke waarden zijn PauliI, PauliXof PauliYPauliZ.
Range Vertegenwoordigt een geordende reeks van even verdeelde Int waarden. Waarden kunnen reeksen in oplopende of aflopende volgorde vertegenwoordigen.
Matrix Vertegenwoordigt waarden die elk een reeks waarden van hetzelfde type bevatten.
Tupel Vertegenwoordigt waarden die elk een vast aantal items van verschillende typen bevatten. Tuples die één element bevatten, zijn gelijk aan het element dat ze bevatten.
Door de gebruiker gedefinieerd type Vertegenwoordigt een door de gebruiker gedefinieerd type bestaande uit benoemde en anonieme items van verschillende typen. Waarden worden geïnstantieerd door de constructor aan te roepen.
Bewerking Vertegenwoordigt een niet-deterministisch aanroepbaar dat één invoerargument (mogelijk tuple-valued) gebruikt, retourneert één (mogelijk tuple-valued) uitvoer. Aanroepen naar bewerkingswaarden kunnen neveneffecten hebben en de uitvoer kan variëren voor elke aanroep, zelfs wanneer deze wordt aangeroepen met hetzelfde argument.
Functie Vertegenwoordigt een deterministisch aanroepbaar dat één invoerargument (mogelijk tuple-valued) gebruikt, retourneert één uitvoer (mogelijk tuple-valued). Aanroepen naar functiewaarden hebben geen bijwerkingen en de uitvoer is altijd hetzelfde op basis van dezelfde invoer.