随着量子计算技术的不断发展,各种量子计算机编程语言应运而生,全球量子计算竞争的格局增添了一个新的维度:量子编程语言。类似于经典计算机,量子计算机也需要一种“语言”来与其交流,这个“语言”就是经常听到的量子编程语言。编程语言通过发送指令并通过量子计算机接收或输出,以此达到与量子计算机交流的目的。
量子计算软件架构,与经典计算具有不同程度的相似性,基本遵循了从 量子程序→量子指令集→量子芯片的架构设计。 量子计算不会脱离经典计算而独立存在。
编程有不同的级别:从向计算机提供特定指令的汇编语言(也称为量子机器指令集)到已经可以进行底层编程量子算法的高级编程语言。
编程框架
什么是编程框架?
编程框架是一种功能齐全,运行高效的量子软件开发工具包,目前国内外很多从事量子计算公司提供了不同的编程框架版本。
国内
1、QPanda
QPanda 是由本源量子开发的一个高效、便捷的量子计算开发工具库,可以用于构建、运行和优化量子算法,支持全振幅量子计算模拟、单振幅量子计算模拟和部分振幅量子计算模拟,也可用于模拟含噪声的量子逻辑门计算。同时,QPanda 通过量子逻辑门优化,量子程序适配量子芯片拓扑结构,量子程序编译等功能,实现了可把QPanda 编写的量子程序编译到不同量子计算平台。除此之外, QPanda 也集成了很多主流的量子算法,是量子计算学习及量子算法验证的有力工具。
2、HiQ
华为 HiQ 是用于量子计算的开源软件框架。它旨在提供使用经典硬件或实际量子设备来促进发明,实施,测试,调试和运行量子算法的工具。它提供经典量子混合编程的可视化方案和高性能的 C++并行和分布式模拟器后端,并集成高性能优化器和较为丰富的算法库。
国外
1、Pyquil
Pyquil 是美国的量子计算公司 Rigetti 开发的,可以实现量子线路的计算模拟、含噪声的量子逻辑门计算模拟,量子芯片的云端运行等功能。Pyquil 虽然比较小众,功能相对较少,但上手比较简单。
2、Qiskit
Qiskit 是一个开放源代码量子计算软件开发框架,利用当今的量子处理器开展研究,教育和商业等工作。Qiskit 由四个相互协作以实现量子计算的元素组成。Qiskit Terra 为 Qiskit 软件栈提供了基础。Terra 采用模块化结构,简化了电路优化和后端扩展的添加。Qiskit Aer 为 Qiskit 软件栈提供了一个高性能模拟器框架。Qiskit Ignis 是一个用于理解和缓解量子电路和系统中噪声的框架。Qiskit Aqua 包含一个跨域量子算法库,可以在其上构建用于近期量子计算的应用程序。
3、Quantum Development Kit(QDK)
Microsoft 提供了 Quantum Development Kit(量子程序开发套件,简称 QDK),以便进行量子编程。
QDK 包括:
Q#:微软推出的一种新的高级量子编程语言。Q#具有与 Visual Studio 和 Visual Studio Code 的丰富集成以及与 Python 编程语言的互操作性。企业级开发工具提供了在 Windows,macOS 或 Linux 上进行量子编程的最快途径。
应用程序:以 Python 或.NET 语言编写,用于运行 Q#编写的量子运算程序。
用于促进开发的工具:用户可根据不同的开发环境,执行不同的安装,以进行量子程序开发。
4、Cirq
Cirq 是 Google 专为 NISQ 算法打造的框架,允许开发者为特定的量子处理器编写量子算法,为用户提供了对量子电路 (Quantum Circuits)的精确控制,为编写和编译量子电路,其数据结构经过专门 优化,让开发者能更加充分地利用 NISQ 架构。Cirq 支持在模拟器上运行这些算法,旨在通过云轻松与未来的量子硬件或更大的模拟器集成。
量子编程语言
什么是量子编程语言?
量子计算是一种遵循量子力学规律调控量子信息单元进行计算的新型计算模式。对照于传统的通用计算机,其理论模型是通用图灵机。通用的量子计算机,其理论模型是用量子力学规律重新诠释的通用图灵机。从可计算的问题来看,量子计算机能解决传统计算机所不能解决的问题,但是从计算的效率上,由于量子力学叠加性的存在,目前某些已知的量子算法在处理问题时速度要快于传统的通用计算机。
量子编程语言是根据量子计算的经典与量子混合(Quantum-Classical Hybrid)特性,在程序编译之后可以操纵宿主机器、量子测控设备与量子芯片来实现量子计算。所谓的量子经典混合编程即是将实现量子计算的部分用量子代码实现量子比特和量子逻辑门的操作,而与经典计算机打交道的部分(结果展示、量子程序开发包)用经典语言实现的一种编程方式成为量子经典混合编程。
1、QRunes(本源量子)
QRunes是一种面向过程、命令式的量子编程语言Imperative language(这也是当前主流的一种编程范式),它的出现是为了实现量子算法。QRunes根据量子计算的经典与量子混合(Quantum-Classical Hybrid)特性,在程序编译之后可以操纵经典计算机与量子芯片来实现量子计算。
QRunes通过提供高级语言的形式(类C的编程风格)来量子算法的实现和程序逻辑控制。其丰富的类型系统(Quantum Type,Auxiliary Type,Classical Type)可以实现量子计算中数据对象的绑定和行为控制, 可以满足各类量子算法开发人员的算法实现需求。
2、Q#(微软)
Q#是一种算法定义语言,它利用丰富的量子-经典相互作用可以很容易地表达相位估计和量子化学算法;它是一种典型的领域特征语言,仅用于描述在量子芯片上可能发生的操作,对于在传统 CPU 上执行的操作,Q#的编程模型规定需要一门经典编程语言来描述。Q# 没有量子态或线路的概念,相反,Q# 在语句和表达式方面实现程序,与经典的编程语言非常类似。 不同的量子功能(例如支持函子和控制流构造)可帮助表示相位估计和量子化学算法等内容。