Lewati ke konten utama

Tabel fitur OpenQASM 3

Berikut adalah daftar fitur bahasa OpenQASM 3.

Untuk detail lebih lanjut tentang kemampuan-kemampuan ini, lihat Spesifikasi Live OpenQASM 3.X.

Keterangan:

  • ❌ Tidak didukung

  • 🟑 Dukungan sebagian

  • βœ… Didukung

Arti dari tanda "didukung" penuh bergantung pada kolomnya:

  • Qiskit SDK: Fitur ini dapat diparse oleh qiskit.qasm3.loads (menggunakan ekstensi qiskit-qasm3-import), direpresentasikan dalam sebuah QuantumCircuit, dan diekspor ke OpenQASM 3 oleh qiskit.qasm3.dumps.

  • IBM Quantum Compute Service: Circuit yang mengandung fitur Qiskit yang bersangkutan dapat dieksekusi dengan sukses pada perangkat keras melalui IBM Quantum Compute Service.

Arti dari "dukungan sebagian" biasanya bergantung pada catatan yang ditautkan.

catatan

Cara paling umum untuk mengirimkan circuit ke IBM Quantum Compute Service adalah dengan membuat circuit di antarmuka Python-space ke Qiskit SDK. Circuit yang dibuat dan dikirimkan dengan cara ini tidak perlu dimuat dari file OpenQASM 3 ke Qiskit SDK.

Jika kamu tidak menggunakan OpenQASM 3 secara langsung, kamu bisa dengan aman menggunakan fitur yang didukung untuk representasi di Qiskit SDK, ekspor ke OpenQASM 3, dan pengiriman ke IBM Quantum Compute Service. Ini termasuk fitur yang tidak dapat dimuat oleh Qiskit SDK dari OpenQASM 3.

Fitur OpenQASM 3Fitur Qiskit SDKQiskit SDKIBM Quantum Compute ServiceCatatan
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❌❌

Catatan​

  1. Fitur-fitur program OpenQASM 3 ini tidak berdampak pada eksekusi dan Qiskit akan menghapusnya sebagai bagian dari proses parsing file. File yang menggunakannya bisa dikirimkan tetapi tidak akan berpengaruh. Untuk file include, stdgates.inc saat ini didukung sebagai input ke Qiskit, dan eksekusi backend selalu mengharuskan circuit sudah dikompilasi ke Instruction Set Architecture (ISA) backend, di mana file include tidak relevan.
  1. Qiskit SDK mendukung parsing dan dumping file OpenQASM 3 dengan deklarasi qubit apa pun. Untuk eksekusi pada perangkat keras, hanya circuit yang didefinisikan dalam qubit perangkat keras (misalnya, $0) yang valid. Qiskit SDK secara otomatis menghasilkan output OpenQASM 3 dalam bentuk identifier qubit perangkat keras yang didukung jika circuit sudah di-transpile untuk Backend dengan informasi layout.
  1. Deklarasi variabel bertipe bit dan bit[n] di Qiskit SDK berkorespondensi dengan deklarasi Clbit dan ClassicalRegister.
  1. Per Juli 2025, Qiskit SDK dapat merepresentasikan variabel lokal dari sejumlah tipe terbatas, dapat merepresentasikan banyak operasi runtime pada objek-objek ini, dan mendukung output ke OpenQASM 3. Namun, Qiskit SDK (melalui qiskit-qasm3-import v0.6.0) tidak mendukung parsing file OpenQASM 3 yang mengandung deklarasi variabel, dan hanya memiliki dukungan sangat terbatas untuk parsing ekspresi variabel. Secara umum, sebagian besar yang bisa direpresentasikan Qiskit dalam sistem ekspresinya dapat dieksekusi pada perangkat keras circuit dinamis yang sesuai, meskipun ekspresi tersebut belum bisa diparse oleh Qiskit SDK. Lihat dokumentasi Qiskit untuk modul qiskit.circuit.classical untuk informasi terbaru.
  1. Qiskit SDK dapat merepresentasikan aliasing register untuk register quantum maupun klasikal, tetapi sangat tidak disarankan menggunakan aliasing register klasikal. Sebagian besar ekspresi pada register klasikal tidak bekerja dengan alias, dan register klasikal yang di-alias tidak didukung untuk eksekusi pada perangkat keras. Parser OpenQASM 3 Qiskit dapat menyelesaikan pernyataan alias let yang mengikat hasil penggabungan register.
  1. Qiskit SDK mendukung penundaan eksplisit via QuantumCircuit.delay, dan kotak circuit (QuantumCircuit.box) juga bisa memiliki durasi eksplisit. Durasi-durasi ini dapat mencakup ekspresi klasikal dari variabel stretch. Qiskit SDK (per Juli 2025 melalui qiskit-qasm3-import v0.6.0) tidak mendukung parsing deklarasi bertipe duration atau stretch dari file OpenQASM 3. Perangkat keras memiliki dukungan terbatas untuk durasi yang mencakup stretch.
  1. Circuit harus di-transpile ke ISA backend untuk berjalan di perangkat keras IBM. Akibatnya, definisi gate kustom dan konstruksi tingkat tinggi seperti modifier Gate (misalnya inv @) tidak valid untuk dieksekusi apa adanya di perangkat keras, tetapi proses transpile akan menyelesaikannya menjadi circuit ISA yang valid. Qiskit SDK (per Juli 2025, melalui qiskit-qasm3-import v0.6.0) akan langsung mengevaluasi modifier Gate saat parsing, sehingga ini tidak akan terlihat dalam QuantumCircuit yang dihasilkan, dan berpotensi menimbulkan biaya runtime.
  1. Qiskit SDK dapat merepresentasikan alur kontrol terstruktur dan mengekspornya ke OpenQASM 3. Pernyataan continue dan break secara teknis dapat direpresentasikan oleh Qiskit, tetapi tidak didukung dengan baik bahkan di dalam Qiskit SDK. Loop for di Qiskit v2.1.0 tidak didukung dengan baik. Alur kontrol bersarang (seperti if di dalam if lain, atau pernyataan else if) tidak memenuhi syarat untuk eksekusi di perangkat keras.
  1. Qiskit SDK mendukung deklarasi tipe klasikal apa pun yang didukung sebagai variabel input pada circuit. Variabel-variabel tersebut saat ini tidak memenuhi syarat untuk eksekusi di perangkat keras, dan tidak dapat dimuat oleh importer OpenQASM 3 Qiskit. Objek Parameter yang tidak terikat yang ada di QuantumCircuit diekspor sebagai variabel input float[64]. Opsi konfigurasi runtime tertentu dapat memungkinkan eksekusi circuit tersebut di beberapa backend.

Langkah berikutnya​

Rekomendasi