Programmiersprache Q#The Q# Programming Language

EinführungIntroduction

Eine gängige Vorgehensweise beim Quantencomputing ist die Behandlung des Quantencomputers als Coprozessor, ähnlich wie bei GPUs, FPGAs und anderen ergänzenden Prozessoren.A natural model for quantum computation is to treat the quantum computer as a coprocessor, similar to that used for GPUs, FPGAs, and other adjunct processors. Von der Hauptsteuerlogik wird klassischer Code auf einem klassischen „Hostcomputer“ ausgeführt.The primary control logic runs classical code on a classical "host" computer. Falls dies gewünscht bzw. erforderlich ist, kann über das Hostprogramm eine Unterroutine aufgerufen werden, die auf dem ergänzenden Prozessor ausgeführt wird.When appropriate and necessary, the host program can invoke a subroutine that runs on the adjunct processor. Nach Abschluss der Unterroutine erhält das Hostprogramm Zugriff auf die entsprechenden Ergebnisse.When the subroutine completes, the host program gets access to the subroutine's results.

Q# (Q-Sharp) ist eine domänenspezifische Programmiersprache, die zum Ausdrücken von Quantenalgorithmen verwendet wird.Q# (Q-sharp) is a domain-specific programming language used for expressing quantum algorithms. Sie wird zum Schreiben von Unterroutinen genutzt, die auf einem ergänzenden Quantenprozessor ausgeführt werden. Für die Steuerung werden hierbei ein klassisches Hostprogramm und ein Computer eingesetzt.It is to be used for writing subroutines that execute on an adjunct quantum processor, under the control of a classical host program and computer. Bis zur allgemeinen Verfügbarkeit von Quantenprozessoren werden Q#-Unterroutinen auf einem Simulator ausgeführt.Until quantum processors are widely available, Q# subroutines execute on a simulator.

Von Q# werden einige primitive Typen bereitgestellt, und es gibt zwei Möglichkeiten (Arrays und Tupel) zum Erstellen von neuen strukturierten Typen.Q# provides a small set of primitive types, along with two ways (arrays and tuples) for creating new, structured types. Es wird ein einfaches Prozedurmodell zum Schreiben von Programmen mit Schleifen und If/Then-Anweisungen unterstützt.It supports a basic procedural model for writing programs, with loops and if/then statements. Die Konstrukte der obersten Ebene in Q# sind benutzerdefinierte Typen, Vorgänge und Funktionen.The top-level constructs in Q# are user defined types, operations, and functions.

In den folgenden Abschnitten finden Sie hilfreiche Informationen:The following sections detail:

KonventionenConventions

Derzeit arbeiten wir auf das Ziel hin, dass in allen Fällen eine einheitliche allgemeine Interpunktion verwendet wird.We are working to ensure that common punctuation marks are used consistently in all situations. Dahinter steht die Erwartung, dass Q# so einfacher zu erlernen und zu lesen ist. Der Grund ist, dass die Interpunktion dann immer die gleiche Bedeutung hat und ein Konzept immer auf die gleiche Weise dargestellt wird.We expect that this will make Q# easier to learn and to read because these marks always mean the same thing, and the same concept is always represented the same way.

Dies gilt insbesondere in folgenden Fällen:Specifically:

  • Das Semikolon (;) wird als Abschluss einer ein- oder mehrzeiligen Anweisung verwendet.The semi-colon, ;, is used to end a statement or single-line directive. Es wird nicht für andere Zwecke genutzt.It is not used for any other purpose.
  • Das Komma (,) wird verwendet, um Elemente einer Sequenz zu trennen.The comma, ,, is used to separate elements of a sequence. Es wird für Tupelliterale, Arrayliterale, Argumentlisten, Tupeldefinitionen und Typlisten genutzt.It is used for tuple literals, array literals, argument lists, tuple definitions, and type lists. Aufgrund einer Änderung gegenüber früheren Versionen wird ; nicht mehr als Arrayliteral-Trennzeichen unterstützt.In a change from earlier versions, ; is no longer supported as an array literal separator.
  • Der Doppelpunkt (:) wird verwendet, um eine Typanmerkung einzufügen.The colon, :, is used to introduce a type annotation. Er wird hauptsächlich in aufrufbaren Signaturen verwendet.It is primarily used in callable signatures. Da mit dem Doppelpunkt immer eine Typsignatur eingefügt wird, wird für den in 0.3 eingeführten ternären bedingten Operator ein vertikaler Balken (|) verwendet, um die Wahr- und Falsch-Werte zu trennen. Aus diesem Grund wird in Q# als Trennzeichen cond ? tval | fval anstelle des Doppelpunkts wie in C genutzt.Because colon always introduces a type signature, the ternary conditional operator introduced in 0.3 uses a vertical bar, |, to separate the true and false values; thus, Q# uses cond ? tval | fval instead of the colon as separator as in C.