Zum Hauptinhalt springen
Dieses Projekt befindet sich in der Beta-Phase. Einen Fehler gefunden? GitHub Issue erstellen. Frage oder Idee? In Discussions fragen — wir freuen uns über dein Feedback!
Wie ist die Übersetzungsqualität auf dieser Seite?

OpenQASM 3 Feature-Tabelle

Im Folgenden findest du eine Liste der OpenQASM 3-Sprachfeatures.

Weitere Details zu diesen Funktionen findest du in der OpenQASM 3.X Live Specification.

Legende:

  • ❌ Nicht unterstützt

  • 🟡 Teilweise unterstützt

  • ✅ Unterstützt

Die Bedeutung des vollständigen „unterstützt“-Zeichens hängt von der Spalte ab:

  • Qiskit SDK: Das Feature kann von qiskit.qasm3.loads geparst werden (durch die qiskit-qasm3-import-Erweiterung), in einem QuantumCircuit dargestellt und von qiskit.qasm3.dumps nach OpenQASM 3 exportiert werden.

  • IBM Quantum Compute Service: Ein Circuit, der das entsprechende Qiskit-Feature enthält, kann über den IBM Quantum Compute Service erfolgreich auf Hardware ausgeführt werden.

Die Bedeutung von „teilweise unterstützt“ hängt in der Regel von den verlinkten Hinweisen ab.

hinweis

Die häufigste Methode, Circuits an IBM Quantum Compute Service zu übermitteln, besteht darin, den Circuit über die Python-Schnittstelle des Qiskit SDK zu erstellen. Circuits, die auf diese Weise erstellt und übermittelt werden, müssen nicht aus OpenQASM 3-Dateien in das Qiskit SDK geladen werden.

Wenn du OpenQASM 3 nicht direkt selbst verwendest, kannst du problemlos Features nutzen, die für die Darstellung im Qiskit SDK, den Export nach OpenQASM 3 und die Übermittlung an den IBM Quantum Compute Service unterstützt werden. Dies schließt Features ein, die vom Qiskit SDK nicht aus OpenQASM 3 geladen werden können.

OpenQASM 3 FeatureQiskit SDK FeatureQiskit SDKIBM Quantum Compute ServiceHinweise
comments✅✅1
QASM vstring✅✅1
include🟡❌1, 7
unicode names✅✅
qubitQubit and QuantumRegister✅🟡2
bitClbit and ClassicalRegister✅✅3
boolexpr.Var and classical expressions🟡✅4
int❌✅4
uintexpr.Var and classical expressions🟡✅4
floatexpr.Var and classical expressions🟡🟡4
angleImplicit, as gate parameters❌🟡4
complex❌❌4
const❌❌4
pi/π/tau/τ/euler/ℇConstant-folded into gate parameters✅✅
Aliasing: letQuantum and classical registers🟡❌5
register concatenationQuantum and classical registers🟡❌5
castingexpr.Cast classical expressions🟡🟡4
duration❌❌
durationof❌❌
ns/µs/us/ms/s/dtDurations of delay and box✅✅6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay✅✅6
barrierBarrier/QuantumCircuit.barrier✅✅
boxBoxOp/QuantumCircuit.box✅❌6
Built-in UUGate/QuantumCircuit.u✅✅
gate🟡🟡7
gphaseQuantumCircuit.global_phase🟡❌7
ctrl @/ negctrl @AnnotatedOperation🟡❌7
inv @AnnotatedOperation🟡❌7
pow(k) @AnnotatedOperation🟡❌7
resetReset/QuantumCircuit.reset✅✅
measureMeasure/QuantumCircuit.measure✅✅
bit operations🟡✅4
boolean operations🟡✅4
arithmetic expressions🟡🟡4
comparisons🟡✅4
ifQuantumCircuit.if_test✅✅8
elseQuantumCircuit.if_test✅✅8
else ifQuantumCircuit.if_test✅❌8
for loopsQuantumCircuit.for_loop🟡❌8
while loopsQuantumCircuit.while_loop✅❌8
continueQuantumCircuit.continue_loop🟡❌8
breakQuantumCircuit.break_loop🟡❌8
return❌❌
extern❌❌
def subroutines (classical)❌❌
def subroutines (quantum)❌❌
inputQuantumCircuit.add_input✅🟡4, 9
output❌❌

Hinweise​

  1. Diese OpenQASM 3-Programmfeatures haben keinen Einfluss auf die Ausführung; Qiskit entfernt sie beim Parsen der Dateien. Dateien, die diese Features verwenden, können übermittelt werden, haben aber keinen Effekt. Für include-Dateien wird stdgates.inc derzeit als Eingabe für Qiskit unterstützt, und die Ausführung auf einem Backend setzt immer voraus, dass Circuits auf die Instruction Set Architecture (ISA) des Backends kompiliert wurden – dabei sind include-Dateien irrelevant.
  1. Das Qiskit SDK unterstützt das Parsen und Schreiben von OpenQASM 3-Dateien mit beliebigen qubit-Deklarationen. Für die Ausführung auf Hardware sind nur Circuits gültig, die in Bezug auf Hardware-Qubits definiert sind (zum Beispiel $0). Das Qiskit SDK gibt OpenQASM 3 automatisch in Bezug auf die unterstützten Hardware-Qubit-Bezeichner aus, wenn der Circuit für ein Backend mit Layout-Informationen transpiliert wurde.
  1. Variablendeklarationen vom Typ bit und bit[n] im Qiskit SDK entsprechen Clbit- und ClassicalRegister-Deklarationen.
  1. Stand Juli 2025 kann das Qiskit SDK lokale Variablen einer eingeschränkten Menge von Typen darstellen, viele Laufzeitoperationen auf diesen Objekten abbilden und sie nach OpenQASM 3 ausgeben. Das Qiskit SDK (über qiskit-qasm3-import v0.6.0) unterstützt jedoch kein Parsen von OpenQASM 3-Dateien, die Variablendeklarationen enthalten, und hat nur sehr eingeschränkte Unterstützung für das Parsen von Variablenausdrücken. Im Allgemeinen kann das meiste, was Qiskit in seinem Ausdruckssystem darstellen kann, auf geeigneter Dynamic-Circuits-Hardware ausgeführt werden, auch wenn der Ausdruck noch nicht vom Qiskit SDK geparst werden kann. Aktuelle Informationen findest du in der Qiskit-Dokumentation des Moduls qiskit.circuit.classical.
  1. Das Qiskit SDK kann Register-Aliasing für sowohl Quanten- als auch klassische Register darstellen, es wird jedoch dringend davon abgeraten, Aliasing für klassische Register zu verwenden. Die meisten Ausdrücke auf klassischen Registern funktionieren nicht mit Aliasen, und klassische aliasierte Register werden für die Ausführung auf Hardware nicht unterstützt. Der Qiskit OpenQASM 3-Parser kann let-Alias-Anweisungen auflösen, die das Ergebnis einer Register-Konkatenation binden.
  1. Das Qiskit SDK unterstützt explizite Verzögerungen über QuantumCircuit.delay, und Circuit-Boxen (QuantumCircuit.box) können ebenfalls explizite Dauern haben. Diese Dauern können klassische Ausdrücke mit stretch-Variablen enthalten. Das Qiskit SDK (Stand Juli 2025, über qiskit-qasm3-import v0.6.0) unterstützt kein Parsen von Deklarationen des Typs duration oder stretch aus OpenQASM 3-Dateien. Die Hardware unterstützt Dauern einschließlich stretch nur eingeschränkt.
  1. Circuits müssen auf die Backend-ISA transpiliert werden, um auf IBM-Hardware ausgeführt werden zu können. Dies schließt benutzerdefinierte gate-Definitionen und übergeordnete Konstrukte wie Gate-Modifikatoren (z. B. inv @) von der direkten Ausführung auf Hardware aus; der transpile-Prozess löst diese jedoch in gültige ISA-Circuits auf. Das Qiskit SDK (Stand Juli 2025, über qiskit-qasm3-import v0.6.0) wertet Gate-Modifikatoren beim Parsen direkt aus, sodass diese im resultierenden QuantumCircuit nicht mehr sichtbar sind – möglicherweise mit einem Laufzeit-Mehraufwand.
  1. Das Qiskit SDK kann strukturierten Kontrollfluss darstellen und diesen nach OpenQASM 3 exportieren. Die continue- und break-Anweisungen können technisch gesehen von Qiskit dargestellt werden, werden aber auch innerhalb des Qiskit SDK nur unzureichend unterstützt. for-Schleifen in Qiskit v2.1.0 werden ebenfalls nur unzureichend unterstützt. Verschachtelter Kontrollfluss (z. B. ein if innerhalb eines anderen if oder eine else if-Anweisung) ist für die Ausführung auf Hardware nicht zulässig.
  1. Das Qiskit SDK unterstützt die Deklaration jedes unterstützten klassischen Typs als input-Variable im Circuit. Solche Variablen sind derzeit nicht für die Ausführung auf Hardware geeignet und können vom Qiskit OpenQASM 3-Importer nicht geladen werden. Nicht gebundene Parameter-Objekte im QuantumCircuit werden als input float[64]-Variablen exportiert. Bestimmte Laufzeit-Konfigurationsoptionen können die Ausführung solcher Circuits auf manchen Backends ermöglichen.

Nächste Schritte​

Empfehlungen