ข้ามไปยังเนื้อหาหลัก
โครงการนี้อยู่ในช่วงเบต้า พบข้อผิดพลาด? สร้าง GitHub Issue มีคำถามหรือไอเดีย? ถามใน Discussions — ยินดีรับฟังความคิดเห็น!
คุณภาพการแปลในหน้านี้เป็นอย่างไร?

ตารางฟีเจอร์ OpenQASM 3

ด้านล่างนี้คือรายการฟีเจอร์ภาษา OpenQASM 3

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความสามารถเหล่านี้ ดูได้ที่ OpenQASM 3.X Live Specification

คำอธิบายสัญลักษณ์:

  • ❌ ไม่รองรับ

  • 🟡 รองรับบางส่วน

  • ✅ รองรับ

ความหมายของเครื่องหมาย "รองรับเต็มรูปแบบ" จะขึ้นอยู่กับคอลัมน์:

  • Qiskit SDK: ฟีเจอร์นี้สามารถ parse ได้ด้วย qiskit.qasm3.loads (โดยใช้ extension qiskit-qasm3-import) แสดงใน QuantumCircuit และ export เป็น OpenQASM 3 ด้วย qiskit.qasm3.dumps

  • IBM Quantum Compute Service: Circuit ที่มีฟีเจอร์ Qiskit ที่ตรงกันสามารถรันบนฮาร์ดแวร์ผ่าน IBM Quantum Compute Service ได้สำเร็จ

ความหมายของ "รองรับบางส่วน" มักขึ้นอยู่กับหมายเหตุที่ลิงก์ไว้

หมายเหตุ

วิธีที่พบบ่อยที่สุดในการส่ง circuit ไปยัง IBM Quantum Compute Service คือการสร้าง circuit ผ่าน Python-space interface ของ Qiskit SDK Circuit ที่สร้างและส่งด้วยวิธีนี้ไม่จำเป็นต้องโหลดจากไฟล์ OpenQASM 3 เข้าสู่ Qiskit SDK

หากคุณไม่ได้ใช้ OpenQASM 3 โดยตรง คุณสามารถใช้ฟีเจอร์ที่รองรับสำหรับการแสดงผลใน Qiskit SDK การ export เป็น OpenQASM 3 และการส่งไปยัง IBM Quantum Compute Service ได้อย่างปลอดภัย ซึ่งรวมถึงฟีเจอร์ที่ Qiskit SDK ไม่สามารถโหลดจาก OpenQASM 3 ได้

ฟีเจอร์ OpenQASM 3ฟีเจอร์ Qiskit SDKQiskit SDKIBM Quantum Compute ServiceNotes
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❌❌

หมายเหตุ​

  1. ฟีเจอร์โปรแกรม OpenQASM 3 เหล่านี้ไม่มีผลต่อการรันและ Qiskit จะตัดออกระหว่าง parse ไฟล์ ไฟล์ที่ใช้ฟีเจอร์เหล่านี้สามารถส่งได้แต่จะไม่มีผลใดๆ สำหรับไฟล์ include นั้น stdgates.inc รองรับเป็น input ของ Qiskit ในปัจจุบัน และการรันบน backend ต้องการ circuit ที่ compile ไปยัง backend Instruction Set Architecture (ISA) แล้ว ซึ่งไฟล์ include ไม่เกี่ยวข้องในขั้นตอนนั้น
  1. Qiskit SDK รองรับการ parse และ dump ไฟล์ OpenQASM 3 ที่มี qubit declaration ใดก็ได้ สำหรับการรันบนฮาร์ดแวร์ เฉพาะ circuit ที่นิยามในรูปของ hardware qubit (เช่น $0) เท่านั้นที่ใช้ได้ Qiskit SDK จะ output OpenQASM 3 ในรูปของ hardware-qubit identifier ที่รองรับโดยอัตโนมัติ หาก circuit ถูก transpile สำหรับ backend ที่มีข้อมูล layout
  1. การประกาศตัวแปรประเภท bit และ bit[n] ใน Qiskit SDK ตรงกับการประกาศ Clbit และ ClassicalRegister
  1. ณ เดือนกรกฎาคม 2025 Qiskit SDK สามารถแสดงตัวแปรท้องถิ่นของชุดประเภทที่จำกัด สามารถแสดง runtime operations หลายอย่างบน object เหล่านี้ และรองรับการ output เป็น OpenQASM 3 อย่างไรก็ตาม Qiskit SDK (ผ่าน qiskit-qasm3-import v0.6.0) ไม่รองรับการ parse ไฟล์ OpenQASM 3 ที่มีการประกาศตัวแปร และมีการรองรับ variable expressions อย่างจำกัดมาก โดยทั่วไปสิ่งที่ Qiskit สามารถแสดงในระบบ expression ส่วนมากสามารถรันบนฮาร์ดแวร์ dynamic circuits ที่เหมาะสมได้ แม้ว่า expression นั้นจะ ยังไม่สามารถ parse ได้โดย Qiskit SDK ดูเอกสาร Qiskit ของโมดูล qiskit.circuit.classical สำหรับข้อมูลล่าสุด
  1. Qiskit SDK สามารถแสดง register aliasing สำหรับทั้ง quantum และ classical register แต่ไม่แนะนำให้ใช้ aliasing ของ classical register อย่างยิ่ง expression ส่วนมากบน classical register ไม่ทำงานกับ alias และ aliased classical register ไม่รองรับสำหรับ การรันบนฮาร์ดแวร์ Qiskit OpenQASM 3 parser สามารถ resolve (แปลความ) let alias statement ที่ผูกผลลัพธ์ของ register concatenation ได้
  1. Qiskit SDK รองรับ delay แบบชัดเจนผ่าน QuantumCircuit.delay และ circuit box (QuantumCircuit.box) ยังสามารถมี duration แบบชัดเจนได้ duration เหล่านี้สามารถรวม classical expression ของ stretch variable ได้ Qiskit SDK (ณ กรกฎาคม 2025 ผ่าน qiskit-qasm3-import v0.6.0) ไม่รองรับการ parse การประกาศประเภท duration หรือ stretch จากไฟล์ OpenQASM 3 ฮาร์ดแวร์มีการรองรับ duration ที่รวม stretch อย่างจำกัด
  1. Circuit ต้องถูก transpile ไปยัง backend ISA เพื่อรันบนฮาร์ดแวร์ IBM ซึ่งหมายความว่า gate definition แบบกำหนดเองและโครงสร้างระดับสูง เช่น gate modifier (เช่น inv @) ไม่ถูกต้องสำหรับการรันบนฮาร์ดแวร์โดยตรง แต่กระบวนการ transpile จะแก้ไขให้กลายเป็น ISA circuit ที่ถูกต้อง Qiskit SDK (ณ กรกฎาคม 2025 ผ่าน qiskit-qasm3-import v0.6.0) จะประเมิน gate modifier แบบ eager ระหว่าง parse ดังนั้น modifier เหล่านี้จะ ไม่ปรากฏใน QuantumCircuit ที่ได้ ซึ่งอาจทำให้ประสิทธิภาพตอน runtime ลดลง
  1. Qiskit SDK สามารถแสดง structured control flow และ export เป็น OpenQASM 3 ได้ คำสั่ง continue และ break สามารถแสดงได้ด้วย Qiskit ในทางเทคนิค แต่ไม่ได้รับการ รองรับที่ดีแม้แต่ภายใน Qiskit SDK เอง for loop ใน Qiskit v2.1.0 ไม่ได้รับการ รองรับที่ดีนัก Nested control flow (เช่น if ภายใน if อีก หรือ else if) ไม่รองรับสำหรับการรันบนฮาร์ดแวร์
  1. Qiskit SDK รองรับการประกาศ classical type ที่รองรับใดก็ได้เป็นตัวแปร input บน circuit ตัวแปรดังกล่าวยังไม่รองรับสำหรับการรันบนฮาร์ดแวร์ในปัจจุบัน และไม่สามารถโหลดด้วย Qiskit OpenQASM 3 importer ได้ object Parameter ที่ไม่ได้ผูกค่าใน QuantumCircuit จะถูก export เป็นตัวแปร input float[64] ตัวเลือกการกำหนดค่า runtime บางอย่างสามารถเปิดใช้งานการรัน circuit เหล่านี้บน backend บางตัวได้

ขั้นตอนถัดไป​

คำแนะนำ