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.
论文ID : 2510.12582标题 : GUPPY: Pythonic Quantum-Classical Programming作者 : Mark Koch, Alan Lawrence, Kartik Singhal, Seyon Sivarajah, Ross Duncan (Quantinuum, United Kingdom)分类 : cs.PL (Programming Languages), cs.SE (Software Engineering), quant-ph (Quantum Physics)发表时间 : 2025年10月14日 (arXiv预印本)论文链接 : https://arxiv.org/abs/2510.12582v1 本文介绍了Guppy,一个嵌入在Python中的领域特定语言(DSL),允许用户使用Pythonic语法编写具有复杂控制流的高级混合量子程序,目标是在实际量子硬件上运行这些程序。
Python在量子计算领域的主导地位 :根据最新调研,超过90%的量子计算研究人员和从业者使用Python,但现有框架受限于电路级抽象,对高级控制流支持有限。实时量子-经典计算需求 :重复直到成功(repeat-until-success)协议等算法需要基于量子测量结果的实时经典数据处理,这种需求随着下一代量子设备的发展将进一步增长。现有方法局限性 :大多数Python框架通过跟踪Python解释器来构建量子程序表示,无法捕获Python原生控制流语法 条件语句和循环必须通过高阶组合子或其他语法结构表达 缺乏线性类型系统来防止量子编程错误 开发一种既保持Python友好语法和生态系统优势,又能支持复杂量子-经典混合计算的编程语言。
提出了Guppy DSL :一个嵌入Python的领域特定语言,支持Pythonic语法编写量子-经典混合程序实现了线性类型系统 :通过线性Qubit类型在编译时捕获量子编程错误(如违反无克隆定理)支持复杂控制流 :原生支持基于测量结果的条件语句、循环等控制流结构静态编译到Hugr IR :编译到新型量子中间表示Hugr,支持量子-经典程序的表达和优化Python互操作性 :通过py(...)表达式实现与Python生态系统的无缝集成设计一个编程语言,能够:
使用熟悉的Python语法 支持量子-经典混合计算 提供编译时安全保证 生成可在量子硬件上运行的程序 Pythonic控制流 :支持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和移除该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()表达式调用Python代码
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协议)Python兼容性 :通过py()表达式实现与Python生态系统集成编译正确性 :生成的Hugr IR正确表示程序语义量子隐态传输 :展示了基于测量结果的条件控制流RUS协议 :演示了复杂的循环和跳转逻辑网络图应用 :说明了Python互操作性的实用价值Q# :支持混合量子算法但缺乏安全保证(使用不透明指针而非线性类型)Silq :命令式语言,具有线性类型但语法可访问性较差现有框架 :Catalyst、Qrisp、Cirq、ProjectQ、Pytket、PyQuil、Qiskit局限性 :依赖Python解释器跟踪,无法捕获原生控制流语法AutoQASM/blqs :使用AutoGraph改进但仍有限制Proto-Quipper、QWire、Qimaera :基于函数式编程范式入门门槛 :对偏好命令式风格的程序员不够友好首个同时支持 :Pythonic语法 + 线性类型 + 复杂控制流静态编译方法 :避免解释器跟踪的限制实用性平衡 :在类型安全和易用性间找到平衡Guppy成功结合了Python的易用性和量子编程的安全性需求 线性类型系统有效防止常见量子编程错误 静态编译到Hugr IR支持高效优化和多目标部署 Python互操作性保持了生态系统优势 类型系统复杂性 :线性类型对初学者可能有学习曲线功能完整性 :当前仅支持基础量子门,缺乏高级特性Python特性支持 :尚未支持字符串、集合、字典等类型线性引用机制 :apply方法的不安全性需要更好的语言级解决方案扩展类型系统 :支持更多Python内置类型和用户定义类型高级量子特性 :自动生成受控和伴随版本、自动去计算线性引用 :设计更安全的局部线性暂停机制工具链完善 :改进错误消息、调试支持、性能优化创新性强 :首次在量子编程中成功结合Pythonic语法和线性类型实用价值高 :解决了量子编程中的实际痛点设计合理 :在安全性和易用性间取得良好平衡技术先进 :基于现代编译器技术和中间表示实验验证有限 :主要通过示例验证,缺乏大规模程序测试性能评估缺失 :未提供编译时间、运行时性能等数据用户研究不足 :缺乏真实用户的使用体验评估生态系统依赖 :依赖Hugr IR和TKET编译器的成熟度学术贡献 :为量子编程语言设计提供新思路工业价值 :有潜力成为实用的量子编程工具标准化推动 :可能影响未来量子编程语言标准教育意义 :降低量子编程学习门槛量子算法研究 :适合开发和测试新量子算法混合计算应用 :特别适合需要复杂控制流的应用教育培训 :可用于量子编程教学原型开发 :适合快速原型和概念验证本文引用了27篇相关文献,涵盖:
量子编程语言(Q#、Silq、Proto-Quipper等) Python量子框架(Qiskit、Cirq、PyQuil等) 编译器技术(MLIR、LLVM、AutoGraph) 量子计算理论(线性类型、量子电路优化) 总结 :这是一篇高质量的系统论文,提出了创新的量子编程语言设计。虽然仍处于早期阶段,但展现了良好的技术潜力和实用前景。建议后续工作重点关注大规模验证、性能优化和用户体验改进。