2025-11-10T02:59:56.765376

GUPPY: Pythonic Quantum-Classical Programming

Koch, Lawrence, Singhal et al.
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.
academic

GUPPY: البرمجة الكمية-الكلاسيكية بأسلوب بايثون

المعلومات الأساسية

  • معرّف الورقة: 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) مدمجة في بايثون، تسمح للمستخدمين بكتابة برامج كمية-كلاسيكية هجينة متقدمة ذات تدفقات تحكم معقدة باستخدام صيغة بايثونية، بهدف تشغيل هذه البرامج على أجهزة كمية فعلية.

الخلفية البحثية والدافع

تعريف المشكلة

  1. هيمنة بايثون في مجال الحوسبة الكمية: وفقاً لأحدث الدراسات، يستخدم أكثر من 90% من الباحثين والممارسين في الحوسبة الكمية لغة بايثون، لكن الأطر الموجودة محدودة بالتجريدات على مستوى الدوائر، مع دعم محدود للتحكم في التدفق عالي المستوى.
  2. متطلبات الحوسبة الكمية-الكلاسيكية في الوقت الفعلي: تتطلب بروتوكولات مثل "التكرار حتى النجاح" (repeat-until-success) معالجة بيانات كلاسيكية في الوقت الفعلي بناءً على نتائج القياس الكمي، وستزداد هذه الحاجة مع تطور أجهزة الجيل القادم.
  3. قيود الطرق الموجودة:
    • تقوم معظم أطر عمل بايثون ببناء تمثيل البرامج الكمية من خلال تتبع مفسر بايثون، مما يجعل من المستحيل التقاط صيغة تدفق التحكم الأصلية في بايثون
    • يجب التعبير عن العبارات الشرطية والحلقات من خلال دوال التركيب عالية الرتبة أو هياكل صيغية أخرى
    • نقص نظام النوع الخطي لمنع أخطاء البرمجة الكمية

الدافع البحثي

تطوير لغة برمجة تحافظ على مزايا صيغة بايثون الودية والنظام البيئي، وفي الوقت ذاته تدعم الحوسبة الهجينة الكمية-الكلاسيكية المعقدة.

المساهمات الأساسية

  1. اقتراح لغة Guppy DSL: لغة مجال متخصصة مدمجة في بايثون تدعم كتابة برامج كمية-كلاسيكية هجينة بصيغة بايثونية
  2. تطبيق نظام نوع خطي: نظام نوع خطي للنوع Qubit يلتقط أخطاء البرمجة الكمية في وقت الترجمة (مثل انتهاك نظرية عدم الاستنساخ)
  3. دعم تدفقات تحكم معقدة: دعم أصلي للعبارات الشرطية والحلقات وهياكل التحكم الأخرى بناءً على نتائج القياس
  4. الترجمة الثابتة إلى Hugr IR: الترجمة إلى تمثيل وسيط كمي جديد Hugr يدعم التعبير والتحسين للبرامج الكمية-الكلاسيكية
  5. التوافقية مع بايثون: التكامل السلس مع النظام البيئي لبايثون من خلال تعبيرات py(...)

شرح الطريقة

تعريف المهمة

تصميم لغة برمجة قادرة على:

  • استخدام صيغة بايثون المألوفة
  • دعم الحوسبة الهجينة الكمية-الكلاسيكية
  • توفير ضمانات الأمان في وقت الترجمة
  • توليد برامج قابلة للتشغيل على أجهزة كمية

معمارية تصميم اللغة

1. ميزات الصيغة الأساسية

  • تدفق التحكم البايثوني: دعم عبارات if و for و while و break و continue و return
  • نظام نوع قوي: يتطلب تعليقات نوع، يجب أن تحتوي المتغيرات على نوع ثابت فريد في جميع مسارات التحكم
  • الأنواع الأساسية: دعم bool و int و float و None والعمليات المقابلة

2. تصميم العمليات الكمية

@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)  # خطأ: القيمة المرجعة لم تُستخدم
    

3. أنواع المجموعات

  • القوائم والصفوف الخطية: للتعبير عن سجلات qubit
  • العمليات الخاصة:
    • دالة get: إرجاع qubit في فهرس محدد والقائمة الجديدة بعد إزالته
    • طريقة apply: تطبيق دالة على فهرس محدد، مثل qs.apply(cx, (i, j))
  • فهم القوائم: دعم صيغة [h(q) for q in qs]

4. دعم الدوال عالية الرتبة

  • الدوال هي قيم من الدرجة الأولى، باستخدام منشئ نوع Callable
  • دعم تعريفات الدوال المتداخلة والتقاط المتغيرات
  • دعم التكرار والتكرار المتبادل

5. التوافقية مع بايثون

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

معمارية الترجمة

هدف الترجمة: Hugr IR

  • تمثيل الرسم البياني الموحد الهرمي (Hierarchical Unified Graph Representation)
  • رسم بياني تدفق البيانات: تمثل العقد استدعاءات دوال نقية، والحواف تمثل تبعيات البيانات
  • تدفق التحكم المنظم: يتم تمثيل الفروع والتكرار من خلال عقد Conditional و TailLoop
  • دعم النوع الخطي: تقيد مخرجات العقدة بحيث يكون لها حافة تدفق بيانات واحدة فقط

عملية الترجمة

  1. تحليل كود Guppy المصدري
  2. فحص النوع والتحليل الثابت
  3. توليد تمثيل رسم بياني Hugr
  4. التحسين وتوليد الكود الهدف

إعداد التجارب

التحقق من البرامج النموذجية

1. بروتوكول نقل الحالة الكمية

@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

2. بروتوكول التكرار حتى النجاح

@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
  • التقط فحص النوع انتهاكات النوع الخطي بشكل صحيح
  • تحول تدفق التحكم بشكل صحيح إلى تمثيل منظم

نتائج التجارب

التحقق من ميزات اللغة

  1. سلامة النوع: نجح نظام النوع الخطي في الكشف عن أخطاء البرمجة الكمية
  2. القدرة التعبيرية: نجح في تطبيق خوارزميات كمية معقدة (نقل الحالة، بروتوكول RUS)
  3. التوافقية مع بايثون: تحقيق التكامل مع النظام البيئي لبايثون من خلال تعبيرات py()
  4. صحة الترجمة: يمثل Hugr IR المُنتج دلالات البرنامج بشكل صحيح

تحليل الحالات

  • نقل الحالة الكمية: عرض تدفق التحكم الشرطي بناءً على نتائج القياس
  • بروتوكول RUS: توضيح منطق الحلقات والقفزات المعقدة
  • تطبيق الرسم البياني للشبكة: توضيح القيمة العملية للتوافقية مع بايثون

الأعمال ذات الصلة

مقارنة لغات البرمجة الكمية

1. اللغات المستقلة

  • Q#: تدعم الخوارزميات الهجينة لكن تفتقر إلى ضمانات الأمان (استخدام مؤشرات غير شفافة بدلاً من الأنواع الخطية)
  • Silq: لغة حتمية بها أنواع خطية لكن إمكانية الوصول إلى الصيغة أقل

2. أطر عمل مدمجة في بايثون

  • الأطر الموجودة: Catalyst و Qrisp و Cirq و ProjectQ و Pytket و PyQuil و Qiskit
  • القيود: تعتمد على تتبع مفسر بايثون، لا تلتقط صيغة التحكم الأصلية
  • AutoQASM/blqs: استخدام AutoGraph للتحسين لكن لا تزال محدودة

3. لغات كمية وظيفية

  • Proto-Quipper و QWire و Qimaera: مبنية على نموذج البرمجة الوظيفية
  • عتبة الدخول: ليست ودية بما يكفي للمبرمجين الذين يفضلون الأسلوب الحتمي

نقاط الابتكار التقني

  1. الأول الذي يدعم: صيغة بايثونية + أنواع خطية + تدفقات تحكم معقدة
  2. طريقة الترجمة الثابتة: تجنب قيود تتبع المفسر
  3. توازن العملية: إيجاد توازن بين سلامة النوع وسهولة الاستخدام

الاستنتاج والنقاش

الاستنتاجات الرئيسية

  1. نجحت Guppy في الجمع بين سهولة استخدام بايثون ومتطلبات الأمان في البرمجة الكمية
  2. نظام النوع الخطي يمنع بفعالية أخطاء البرمجة الكمية الشائعة
  3. الترجمة الثابتة إلى Hugr IR تدعم التحسين الفعال والنشر متعدد الأهداف
  4. التوافقية مع بايثون تحافظ على مزايا النظام البيئي

القيود

  1. تعقيد نظام النوع: قد يكون للأنواع الخطية منحنى تعلم للمبتدئين
  2. اكتمال الميزات: يدعم حالياً بوابات كمية أساسية فقط، يفتقد ميزات متقدمة
  3. دعم ميزات بايثون: لم يتم دعم السلاسل والمجموعات والقواميس بعد
  4. آلية المراجع الخطية: تحتاج طريقة apply إلى حل أفضل على مستوى اللغة

الاتجاهات المستقبلية

  1. توسيع نظام النوع: دعم المزيد من أنواع بايثون المدمجة والأنواع المعرفة من قبل المستخدم
  2. ميزات كمية متقدمة: توليد تلقائي للإصدارات المتحكم فيها والمرافقة، إلغاء الحساب التلقائي
  3. المراجع الخطية: تصميم آلية توقف خطي محلي أكثر أماناً
  4. تحسين سلسلة الأدوات: تحسين رسائل الخطأ ودعم التصحيح وتحسين الأداء

التقييم المتعمق

المزايا

  1. ابتكار قوي: أول محاولة ناجحة لدمج صيغة بايثونية والأنواع الخطية في البرمجة الكمية
  2. قيمة عملية عالية: حل نقاط الألم الفعلية في البرمجة الكمية
  3. تصميم معقول: تحقيق توازن جيد بين الأمان وسهولة الاستخدام
  4. تقنية متقدمة: مبنية على تقنيات المترجم الحديثة والتمثيل الوسيط

أوجه القصور

  1. التحقق التجريبي محدود: التحقق الأساسي من خلال الأمثلة، يفتقد اختبار البرامج الكبيرة
  2. تقييم الأداء مفقود: لم يتم توفير بيانات وقت الترجمة وأداء التشغيل
  3. البحث عن تجربة المستخدم غير كافٍ: نقص تقييم تجربة المستخدمين الفعليين
  4. اعتماد النظام البيئي: يعتمد على نضج Hugr IR ومترجم TKET

التأثير

  1. المساهمة الأكاديمية: توفير أفكار جديدة لتصميم لغات البرمجة الكمية
  2. القيمة الصناعية: احتمالية أن تصبح أداة برمجة كمية عملية
  3. دفع التوحيد: قد تؤثر على معايير لغات البرمجة الكمية المستقبلية
  4. الأهمية التعليمية: تقليل عتبة تعلم البرمجة الكمية

السيناريوهات المناسبة

  1. أبحاث الخوارزميات الكمية: مناسبة لتطوير واختبار خوارزميات كمية جديدة
  2. تطبيقات الحوسبة الهجينة: مناسبة بشكل خاص للتطبيقات التي تتطلب تدفقات تحكم معقدة
  3. التدريب والتعليم: يمكن استخدامها في تدريس البرمجة الكمية
  4. تطوير النماذج الأولية: مناسبة للنماذج الأولية السريعة والتحقق من المفاهيم

المراجع

تستشهد هذه الورقة بـ 27 مرجعاً ذا صلة، تغطي:

  • لغات البرمجة الكمية (Q# و Silq و Proto-Quipper وغيرها)
  • أطر عمل بايثون الكمية (Qiskit و Cirq و PyQuil وغيرها)
  • تقنيات المترجم (MLIR و LLVM و AutoGraph)
  • نظرية الحوسبة الكمية (الأنواع الخطية وتحسين الدوائر الكمية)

الملخص: هذه ورقة عالية الجودة تقدم تصميم لغة برمجة كمية مبتكر. على الرغم من أنها لا تزال في مراحلها الأولى، فإنها تظهر إمكانات تقنية جيدة وآفاق عملية واعدة. يُنصح بأن تركز الأعمال اللاحقة على التحقق على نطاق واسع وتحسين الأداء وتحسين تجربة المستخدم.