Freigeben über


Typensystem

Der Fokus für den Quantenalgorithmus liegt eher im Hinblick auf das, was erreicht werden sollte, als eine Problemdarstellung in Bezug auf Datenstrukturen, ist eine funktionalere Perspektive auf das Sprachdesign eine natürliche Wahl. Gleichzeitig ist das Typsystem ein leistungsstarker Mechanismus, der für die Programmanalyse und andere Kompilierungszeitprüfungen verwendet werden kann, die die Erstellung robuster Code erleichtern.

Insgesamt ist das Q# Typsystem ziemlich minimalistisch, in dem Sinne, dass es keine explizite Vorstellung von Klassen oder Schnittstellen gibt, da man von klassischen Sprachen wie C# oder Java verwendet werden kann. Wir nehmen auch einen etwas pragmatischen Ansatz, der inkrementelle Fortschritte macht, sodass bestimmte Konstrukte noch nicht vollständig in das Typsystem integriert sind. Ein Beispiel hierfür sind Funktoren, die in Ausdrücken verwendet werden können, aber noch keine Darstellung im Typsystem haben. Entsprechend können sie derzeit nicht als Argumente zugewiesen oder übergeben werden, ähnlich wie bei typ parametrisierten Aufrufablen. Wir erwarten, dass inkrementelle Fortschritte bei der Erweiterung des Typsystems erzielt werden, um vollständiger zu werden, und sofortige Anforderungen mit langfristigen Plänen in Einklang zu bringen.

Verfügbare Typen

Alle Typen in Q# sind unveränderliche.

Typ BESCHREIBUNG
Unit Stellt einen Singletontyp dar, dessen einziger Wert ()ist.
Int Stellt eine ganzzahlige 64-Bit-Vorzeichen dar. Werte reichen von -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807.
BigInt Stellt signierte ganze Zahl Werte beliebiger Größe dar.
Double Stellt eine 64-Bit-Gleitkommazahl mit doppelter Genauigkeit dar. Werte reichen von -1,79769313486232e308 bis 1,79769313486232e308 sowie NaN (keine Zahl).
Bool Stellt boolesche Wertedar. Mögliche Werte sind true oder false.
String Stellt Text als Werte dar, die aus einer Sequenz von UTF-16-Codeeinheiten bestehen.
Qubit Stellt einen undurchsichtigen Bezeichner dar, mit dem der virtuelle Quantenspeicher adressiert werden kann. Werte typs Qubit werden über die Zuordnung instanziiert.
Result Stellt das Ergebnis einer projizierten Messung auf die Eigenspaces eines Quantenoperators mit Eigenwerten ±1 dar. Mögliche Werte sind Zero oder One.
Pauli Stellt eine Ein-Qubit-Pauli-Matrix dar. Mögliche Werte sind PauliI, PauliX, PauliYoder PauliZ.
Range Stellt eine geordnete Sequenz mit gleichmäßigen Abständen Int Werten dar. Werte können Sequenzen in aufsteigender oder absteigender Reihenfolge darstellen.
Array Stellt Werte dar, die jeweils eine Abfolge von Werten desselben Typs enthalten.
Tupel Stellt Werte dar, die jeweils eine feste Anzahl von Elementen unterschiedlicher Typen enthalten. Tupel, die ein einzelnes Element enthalten, entsprechen dem element, das sie enthalten.
struct Stellt einen benutzerdefinierten Typ dar, der aus benannten Elementen verschiedener Typen besteht. Werte werden instanziiert, wenn eine neue Instanz deklariert wird.
Vorgang Stellt eine nicht deterministische aufrufbare dar, die ein Eingabeargument (möglicherweise tupelwertig) verwendet und eine Ausgabe (möglicherweise tupelwertig) zurückgibt. Aufrufe für den Vorgang Werte können Nebenwirkungen haben, und die Ausgabe kann für jeden Aufruf variieren, auch wenn er mit demselben Argument aufgerufen wird.
Funktion Stellt eine deterministische aufrufbare dar, die ein Eingabeargument (möglicherweise tupelwertig) verwendet und eine (möglicherweise tupelwertige) Ausgabe zurückgibt. Aufrufe von Funktionen Werte keine Nebenwirkungen haben, und die Ausgabe wird immer mit der gleichen Eingabe identisch sein.