انتقل إلى المحتوى الرئيسي
هذا المشروع في مرحلة تجريبية. وجدت خطأ؟ افتح مشكلة على GitHub. لديك سؤال أو فكرة؟ اسأل في Discussions — نحب سماع ملاحظاتك!
كيف جودة الترجمة في هذه الصفحة؟

جدول ميزات OpenQASM 3

فيما يلي قائمة بميزات لغة OpenQASM 3.

لمزيد من التفاصيل حول هذه الإمكانيات، راجع OpenQASM 3.X Live Specification.

المفتاح:

  • ❌ غير مدعوم

  • 🟡 دعم جزئي

  • ✅ مدعوم

معنى علامة "مدعوم" الكاملة يعتمد على العمود:

  • Qiskit SDK: يمكن تحليل الميزة بواسطة qiskit.qasm3.loads (باستخدام إضافة qiskit-qasm3-import)، وتمثيلها في QuantumCircuit, وتصديرها إلى OpenQASM 3 بواسطة qiskit.qasm3.dumps.

  • IBM Quantum Compute Service: يمكن تنفيذ دائرة تحتوي على ميزة Qiskit المقابلة بنجاح على العتاد من خلال IBM Quantum Compute Service.

معنى "الدعم الجزئي" يعتمد عادةً على الملاحظات المرتبطة.

ملاحظة

الطريقة الأكثر شيوعاً لإرسال Circuit إلى IBM Quantum Compute Service هي إنشاء دائرة في واجهة Python الخاصة بـ Qiskit SDK. لا تحتاج Circuit المنشأة والمرسلة بهذه الطريقة إلى تحميلها من ملفات OpenQASM 3 إلى Qiskit SDK.

إذا كنت لا تستخدم OpenQASM 3 مباشرةً، يمكنك استخدام الميزات المدعومة للتمثيل في Qiskit SDK والتصدير إلى OpenQASM 3 والإرسال إلى IBM Quantum Compute Service بأمان. يشمل ذلك الميزات التي لا يمكن تحميلها بواسطة Qiskit SDK من OpenQASM 3.

OpenQASM 3 FeatureQiskit SDK featureQiskit 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 بإزالتها كجزء من تحليل الملفات. يمكن إرسال الملفات التي تستخدمها لكن لن يكون لها أي تأثير. بالنسبة لملفات include، يتم دعم stdgates.inc حالياً كمدخل لـ Qiskit، ويتطلب التنفيذ على Backend دائماً أن تكون Circuit مُجمّعة لمعمارية مجموعة التعليمات (ISA) الخاصة بالـ Backend، حيث تكون ملفات include غير ذات صلة.
  1. يدعم Qiskit SDK تحليل وتصدير ملفات OpenQASM 3 مع أي تصريحات qubit. للتنفيذ على العتاد، فقط Circuit المعرّفة من حيث qubit العتاد (مثلاً $0) تكون صالحة. يُخرج Qiskit SDK تلقائياً OpenQASM 3 بمعرّفات qubit العتاد المدعومة إذا تمت ترجمة الدائرة (transpile) لـ Backend مع معلومات التخطيط.
  1. تصريحات المتغيرات من نوع bit و bit[n] في Qiskit SDK تتوافق مع تصريحات Clbit و ClassicalRegister.
  1. اعتباراً من يوليو 2025، يمكن لـ Qiskit SDK تمثيل المتغيرات المحلية لمجموعة محدودة من الأنواع، وتمثيل العديد من عمليات وقت التشغيل على هذه الكائنات، ويدعم تصديرها إلى OpenQASM 3. ومع ذلك، لا يدعم Qiskit SDK (من خلال qiskit-qasm3-import v0.6.0) تحليل ملفات OpenQASM 3 التي تحتوي على تصريحات متغيرات، ولديه دعم محدود جداً لتحليل تعبيرات المتغيرات. بشكل عام، يمكن تنفيذ معظم ما يستطيع Qiskit تمثيله في نظام التعبيرات الخاص به على عتاد Circuit الديناميكي المناسب، حتى لو لم يكن التعبير قابلاً للتحليل بواسطة Qiskit SDK بعد. راجع وثائق Qiskit لوحدة qiskit.circuit.classical للحصول على أحدث المعلومات.
  1. يمكن لـ Qiskit SDK تمثيل الأسماء المستعارة (aliasing) للسجلات لكل من السجلات الكمية والكلاسيكية، لكن يُنصح بشدة بعدم استخدام الأسماء المستعارة للسجلات الكلاسيكية. معظم التعبيرات على السجلات الكلاسيكية لا تعمل مع الأسماء المستعارة، والسجلات الكلاسيكية ذات الأسماء المستعارة غير مدعومة للتنفيذ على العتاد. يمكن لمحلل Qiskit OpenQASM 3 حل عبارات let المستعارة التي تربط نتيجة دمج السجلات.
  1. يدعم Qiskit SDK التأخيرات الصريحة عبر QuantumCircuit.delay، ويمكن لصناديق Circuit (QuantumCircuit.box) أن تحتوي أيضاً على مدد صريحة. يمكن أن تتضمن هذه المدد تعبيرات كلاسيكية لمتغيرات stretch. لا يدعم Qiskit SDK (اعتباراً من يوليو 2025 من خلال qiskit-qasm3-import v0.6.0) تحليل تصريحات من نوع duration أو نوع stretch من ملفات OpenQASM 3. العتاد لديه دعم محدود للمدد التي تتضمن stretch.
  1. يجب ترجمة الدائرة (transpile) إلى ISA الخاص بالـ Backend للتشغيل على عتاد IBM. هذا يمنع تعريفات gate المخصصة والبنى عالية المستوى مثل معدّلات Gate (مثل inv @) من أن تكون صالحة للتنفيذ على العتاد مباشرةً، لكن عملية transpile تحلّها إلى دائرة ISA صالحة. يقوم Qiskit SDK (اعتباراً من يوليو 2025، من خلال qiskit-qasm3-import v0.6.0) بتقييم معدّلات Gate فوراً أثناء التحليل، لذلك لن تكون ظاهرة في QuantumCircuit الناتج، مع احتمال تكلفة في وقت التشغيل.
  1. يمكن لـ Qiskit SDK تمثيل تدفق التحكم المنظم وتصديره إلى OpenQASM 3. يمكن تقنياً تمثيل عبارات continue و break بواسطة Qiskit، لكنها غير مدعومة بشكل جيد حتى داخل Qiskit SDK. حلقات for في Qiskit v2.1.0 غير مدعومة بشكل جيد. تدفق التحكم المتداخل (مثل if داخل if آخر، أو عبارة else if) غير مؤهل للتنفيذ على العتاد.
  1. يدعم Qiskit SDK التصريح عن أي نوع كلاسيكي مدعوم كمتغير input في دائرة. هذه المتغيرات حالياً غير مؤهلة للتنفيذ على العتاد، ولا يمكن تحميلها بواسطة مستورد Qiskit OpenQASM 3. يتم تصدير كائنات Parameter غير المربوطة الموجودة في QuantumCircuit كمتغيرات input float[64]. يمكن لبعض خيارات تكوين وقت التشغيل أن تتيح تنفيذ مثل هذه الدوائر على بعض الـ Backends.

الخطوات التالية​

توصيات