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 , PauliY oder 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. |