We present ongoing work on Guppy, a domain-specific language embedded in Python that allows users to write high-level hybrid quantum programs with complex control flow in Pythonic syntax, aiming to run them on actual quantum hardware.
معرّف الورقة : 2510.12582العنوان : GUPPY: Pythonic Quantum-Classical Programmingالمؤلفون : Mark Koch, Alan Lawrence, Kartik Singhal, Seyon Sivarajah, Ross Duncan (Quantinuum, المملكة المتحدة)التصنيف : cs.PL (لغات البرمجة)، cs.SE (هندسة البرمجيات)، quant-ph (الفيزياء الكمية)تاريخ النشر : 14 أكتوبر 2025 (نسخة أولية على arXiv)رابط الورقة : https://arxiv.org/abs/2510.12582v1 تقدم هذه الورقة Guppy، وهي لغة مجال متخصصة (DSL) مدمجة في بايثون، تسمح للمستخدمين بكتابة برامج كمية-كلاسيكية هجينة متقدمة ذات تدفقات تحكم معقدة باستخدام صيغة بايثونية، بهدف تشغيل هذه البرامج على أجهزة كمية فعلية.
هيمنة بايثون في مجال الحوسبة الكمية : وفقاً لأحدث الدراسات، يستخدم أكثر من 90% من الباحثين والممارسين في الحوسبة الكمية لغة بايثون، لكن الأطر الموجودة محدودة بالتجريدات على مستوى الدوائر، مع دعم محدود للتحكم في التدفق عالي المستوى.متطلبات الحوسبة الكمية-الكلاسيكية في الوقت الفعلي : تتطلب بروتوكولات مثل "التكرار حتى النجاح" (repeat-until-success) معالجة بيانات كلاسيكية في الوقت الفعلي بناءً على نتائج القياس الكمي، وستزداد هذه الحاجة مع تطور أجهزة الجيل القادم.قيود الطرق الموجودة :تقوم معظم أطر عمل بايثون ببناء تمثيل البرامج الكمية من خلال تتبع مفسر بايثون، مما يجعل من المستحيل التقاط صيغة تدفق التحكم الأصلية في بايثون يجب التعبير عن العبارات الشرطية والحلقات من خلال دوال التركيب عالية الرتبة أو هياكل صيغية أخرى نقص نظام النوع الخطي لمنع أخطاء البرمجة الكمية تطوير لغة برمجة تحافظ على مزايا صيغة بايثون الودية والنظام البيئي، وفي الوقت ذاته تدعم الحوسبة الهجينة الكمية-الكلاسيكية المعقدة.
اقتراح لغة Guppy DSL : لغة مجال متخصصة مدمجة في بايثون تدعم كتابة برامج كمية-كلاسيكية هجينة بصيغة بايثونيةتطبيق نظام نوع خطي : نظام نوع خطي للنوع Qubit يلتقط أخطاء البرمجة الكمية في وقت الترجمة (مثل انتهاك نظرية عدم الاستنساخ)دعم تدفقات تحكم معقدة : دعم أصلي للعبارات الشرطية والحلقات وهياكل التحكم الأخرى بناءً على نتائج القياسالترجمة الثابتة إلى Hugr IR : الترجمة إلى تمثيل وسيط كمي جديد Hugr يدعم التعبير والتحسين للبرامج الكمية-الكلاسيكيةالتوافقية مع بايثون : التكامل السلس مع النظام البيئي لبايثون من خلال تعبيرات py(...)تصميم لغة برمجة قادرة على:
استخدام صيغة بايثون المألوفة دعم الحوسبة الهجينة الكمية-الكلاسيكية توفير ضمانات الأمان في وقت الترجمة توليد برامج قابلة للتشغيل على أجهزة كمية تدفق التحكم البايثوني : دعم عبارات if و for و while و break و continue و returnنظام نوع قوي : يتطلب تعليقات نوع، يجب أن تحتوي المتغيرات على نوع ثابت فريد في جميع مسارات التحكمالأنواع الأساسية : دعم bool و int و float و None والعمليات المقابلة@guppy
def rx(q: Qubit, a: float) -> Qubit:
# نوع خطي: لا يمكن نسخ Qubit أو التخلص منه بشكل ضمني
return h(rz(h(q), a))
خصائص نظام النوع الخطي :
يتم معالجة قيم Qubit بشكل خطي، لا يمكن نسخها أو التخلص منها بشكل ضمني توقيعات العمليات الكمية مثل: h: Qubit -> Qubit الكشف عن أخطاء البرمجة في وقت الترجمة:
q = Qubit()
return cx(q, q) # خطأ: استخدام نفس qubit عدة مرات
q = Qubit()
h(q) # خطأ: القيمة المرجعة لم تُستخدم
القوائم والصفوف الخطية : للتعبير عن سجلات qubitالعمليات الخاصة :
دالة get: إرجاع qubit في فهرس محدد والقائمة الجديدة بعد إزالته طريقة apply: تطبيق دالة على فهرس محدد، مثل qs.apply(cx, (i, j)) فهم القوائم : دعم صيغة [h(q) for q in qs]الدوال هي قيم من الدرجة الأولى، باستخدام منشئ نوع Callable دعم تعريفات الدوال المتداخلة والتقاط المتغيرات دعم التكرار والتكرار المتبادل import networkx as nx
g = nx.erdos_renyi_graph(20, 0.25)
@guppy
def apply_graph(qs: list[Qubit]) -> list[Qubit]:
for i, j in py(g.edges()): # تعبير py() لاستدعاء كود بايثون
qs = qs.apply(zz, (i, j))
return qs
تمثيل الرسم البياني الموحد الهرمي (Hierarchical Unified Graph Representation) رسم بياني تدفق البيانات : تمثل العقد استدعاءات دوال نقية، والحواف تمثل تبعيات البياناتتدفق التحكم المنظم : يتم تمثيل الفروع والتكرار من خلال عقد Conditional و TailLoopدعم النوع الخطي : تقيد مخرجات العقدة بحيث يكون لها حافة تدفق بيانات واحدة فقطتحليل كود Guppy المصدري فحص النوع والتحليل الثابت توليد تمثيل رسم بياني Hugr التحسين وتوليد الكود الهدف @guppy
def teleport(src: Qubit, tgt: Qubit) -> Qubit:
tmp, tgt = cx(h(Qubit()), tgt)
src, tmp = cx(src, tmp)
if measure(h(src)):
tgt = z(tgt)
if measure(tmp):
tgt = x(tgt)
return tgt
@guppy
def rus(q: Qubit, tries: int) -> Qubit:
for _ in range(tries):
a, b = h(Qubit()), h(Qubit())
b, a = cx(b, tdg(a))
if not measure(t(a)):
discard(b)
continue
q, b = cx(z(t(q)), b)
if measure(t(b)):
break
q = x(q)
return q
نجح جميع البرامج النموذجية في الترجمة إلى Hugr IR التقط فحص النوع انتهاكات النوع الخطي بشكل صحيح تحول تدفق التحكم بشكل صحيح إلى تمثيل منظم سلامة النوع : نجح نظام النوع الخطي في الكشف عن أخطاء البرمجة الكميةالقدرة التعبيرية : نجح في تطبيق خوارزميات كمية معقدة (نقل الحالة، بروتوكول RUS)التوافقية مع بايثون : تحقيق التكامل مع النظام البيئي لبايثون من خلال تعبيرات py()صحة الترجمة : يمثل Hugr IR المُنتج دلالات البرنامج بشكل صحيحنقل الحالة الكمية : عرض تدفق التحكم الشرطي بناءً على نتائج القياسبروتوكول RUS : توضيح منطق الحلقات والقفزات المعقدةتطبيق الرسم البياني للشبكة : توضيح القيمة العملية للتوافقية مع بايثونQ# : تدعم الخوارزميات الهجينة لكن تفتقر إلى ضمانات الأمان (استخدام مؤشرات غير شفافة بدلاً من الأنواع الخطية)Silq : لغة حتمية بها أنواع خطية لكن إمكانية الوصول إلى الصيغة أقلالأطر الموجودة : Catalyst و Qrisp و Cirq و ProjectQ و Pytket و PyQuil و Qiskitالقيود : تعتمد على تتبع مفسر بايثون، لا تلتقط صيغة التحكم الأصليةAutoQASM/blqs : استخدام AutoGraph للتحسين لكن لا تزال محدودةProto-Quipper و QWire و Qimaera : مبنية على نموذج البرمجة الوظيفيةعتبة الدخول : ليست ودية بما يكفي للمبرمجين الذين يفضلون الأسلوب الحتميالأول الذي يدعم : صيغة بايثونية + أنواع خطية + تدفقات تحكم معقدةطريقة الترجمة الثابتة : تجنب قيود تتبع المفسرتوازن العملية : إيجاد توازن بين سلامة النوع وسهولة الاستخدامنجحت Guppy في الجمع بين سهولة استخدام بايثون ومتطلبات الأمان في البرمجة الكمية نظام النوع الخطي يمنع بفعالية أخطاء البرمجة الكمية الشائعة الترجمة الثابتة إلى Hugr IR تدعم التحسين الفعال والنشر متعدد الأهداف التوافقية مع بايثون تحافظ على مزايا النظام البيئي تعقيد نظام النوع : قد يكون للأنواع الخطية منحنى تعلم للمبتدئيناكتمال الميزات : يدعم حالياً بوابات كمية أساسية فقط، يفتقد ميزات متقدمةدعم ميزات بايثون : لم يتم دعم السلاسل والمجموعات والقواميس بعدآلية المراجع الخطية : تحتاج طريقة apply إلى حل أفضل على مستوى اللغةتوسيع نظام النوع : دعم المزيد من أنواع بايثون المدمجة والأنواع المعرفة من قبل المستخدمميزات كمية متقدمة : توليد تلقائي للإصدارات المتحكم فيها والمرافقة، إلغاء الحساب التلقائيالمراجع الخطية : تصميم آلية توقف خطي محلي أكثر أماناًتحسين سلسلة الأدوات : تحسين رسائل الخطأ ودعم التصحيح وتحسين الأداءابتكار قوي : أول محاولة ناجحة لدمج صيغة بايثونية والأنواع الخطية في البرمجة الكميةقيمة عملية عالية : حل نقاط الألم الفعلية في البرمجة الكميةتصميم معقول : تحقيق توازن جيد بين الأمان وسهولة الاستخدامتقنية متقدمة : مبنية على تقنيات المترجم الحديثة والتمثيل الوسيطالتحقق التجريبي محدود : التحقق الأساسي من خلال الأمثلة، يفتقد اختبار البرامج الكبيرةتقييم الأداء مفقود : لم يتم توفير بيانات وقت الترجمة وأداء التشغيلالبحث عن تجربة المستخدم غير كافٍ : نقص تقييم تجربة المستخدمين الفعلييناعتماد النظام البيئي : يعتمد على نضج Hugr IR ومترجم TKETالمساهمة الأكاديمية : توفير أفكار جديدة لتصميم لغات البرمجة الكميةالقيمة الصناعية : احتمالية أن تصبح أداة برمجة كمية عمليةدفع التوحيد : قد تؤثر على معايير لغات البرمجة الكمية المستقبليةالأهمية التعليمية : تقليل عتبة تعلم البرمجة الكميةأبحاث الخوارزميات الكمية : مناسبة لتطوير واختبار خوارزميات كمية جديدةتطبيقات الحوسبة الهجينة : مناسبة بشكل خاص للتطبيقات التي تتطلب تدفقات تحكم معقدةالتدريب والتعليم : يمكن استخدامها في تدريس البرمجة الكميةتطوير النماذج الأولية : مناسبة للنماذج الأولية السريعة والتحقق من المفاهيمتستشهد هذه الورقة بـ 27 مرجعاً ذا صلة، تغطي:
لغات البرمجة الكمية (Q# و Silq و Proto-Quipper وغيرها) أطر عمل بايثون الكمية (Qiskit و Cirq و PyQuil وغيرها) تقنيات المترجم (MLIR و LLVM و AutoGraph) نظرية الحوسبة الكمية (الأنواع الخطية وتحسين الدوائر الكمية) الملخص : هذه ورقة عالية الجودة تقدم تصميم لغة برمجة كمية مبتكر. على الرغم من أنها لا تزال في مراحلها الأولى، فإنها تظهر إمكانات تقنية جيدة وآفاق عملية واعدة. يُنصح بأن تركز الأعمال اللاحقة على التحقق على نطاق واسع وتحسين الأداء وتحسين تجربة المستخدم.