随着量子计算技术的不断发展,各种量子计算机编程语言应运而生,全球量子计算竞争的格局增添了一个新的维度:量子编程语言。

类似于经典计算机,量子计算机也需要一种“语言”来与其交流,这个“语言”就是经常听到的量子编程语言。编程语言通过发送指令并从量子计算机接收输出,以此达到与量子计算机交流的目的。

编程有不同的级别:从向计算机提供特定指令的汇编语言(也称为量子机器指令集)到已经可以进行底层编程量子算法的高级语言。

为了对量子编程语言有一个基本的了解,接下来,将引入一些特定的概念。

 

量子语言层级

量子计算机实际上是由量子设备(硬件)和经典计算机组成的混合系统,汇编语言将指令发送到硬件并接收和处理结果(软件)。量子语言与此经典软件相对应。

而有的库则是使用某些知名编程语言如python,C ++,Matlab编写,这些语言可帮助用户构建编写量子算法。

在本文及其对应的图中,上述两种情况都统称为“量子语言”(Quantum Language)。下图为不同级别的量子编程算法。

量子编程语言格局-量子客
不同级别的量子编程算法

在真正的量子设备出现之前,量子语言就已经存在了。它们已经被用来在经典计算机上模拟量子算法。随着真正的量子计算机的问世,研究小组和公司都开发了自己的编程语言来使用他们自身的设备,这促进了更多语言的创建。

这些语言试图结合现有语言的一些元素,使其可以用于任何后端, 这种语言称为通用量子语言(Universal Quantum Languages)。

更加通用的量子语言是可以被创建的,因为几乎每个人都在开发开源软件,也就是说,任何人都可以通过使用 GitHub 这样的平台来改进和扩展这些语言。

“开源”软件和“免费”软件之间有什么区别呢?相对于专有软件而言,“开源”软件和“免费”软件指的是对使用方式的限制较少的软件。但是,二者之间是不同的,它们基于完全不同的价值观。开源是一种“开发方法”,自由软件是一种“社会运动”。

自由软件允许用户“具有运行、复制、分发、学习、更改和改进软件的自由”,而不必从零开始。而开源软件则更侧重于协作和社区驱动的开发模式的价值。开源软件运动起源于最初的自由软件社区,通常,自由软件代码也是开源的,但开源的软件不一定是自由软件。

开源方法在软件代码的开发和改进中引入了毋庸置疑的优势。如果社区正在尝试创建一种很新的应用程序编程语言,则该优势更加明显。

量子计算是一个相对较新的领域,它引入了新的计算范式,运行量子算法的技术完全不同,最终的编程语言应满足所有可能用户的需求。

然而,在经典编程和量子编程之间建立并行性不容易。我们将尝试以不同的抽象层对一些最著名的量子编程语言进行分类,尤其是那些由私人公司和初创公司开发的语言。这并不是一个详尽而且全面的清单,您可在量子客后期的更新中获得更完整的信息。

 

量子编程语言

本文接下来将专注于开发量子计算机的公司所使用的量子语言。但是,并不是所有的公司都使用这种开源策略来创建他们的代码,一些公司使用的语言是不公开的,甚至连名称也尚未公开。

 

IBM

IBM已经开发了量子信息软件工具包( QISKit),这是一个用于编写,模拟和运行量子程序的全栈库。该工具包包括了四个部分:

1)Terra,它允许在量子门和脉冲级别编程(量子门通过脉冲序列实现);

2)Aqua,运行量子化学、优化问题和人工智能中使用的算法的高级编程;

3)Ignis,检查错误并改进门的实现;

4)Aer,研究用经典设备模拟量子计算的局限性。

QISKit将量子程序转换为一种称为QASM的量子指令语言。

 

Rigetti Computing

Rigetti Computing创建了 Forest,这是一个用于编写和运行量子程序的开发环境。他们的量子设备使用名为 pyquil的python库进行编程,该库将根据量子门编写的程序转换为称为 quil的较低级语言。他们还开发了 Grove库,其中包含用于量子化学的算法(例如,用于量子化学的变分量子本征求解器)或用于优化问题的量子优化算法(QAOA)。

 

微软

微软提供的量子开发套件包括量子模拟器、实现量子算法的库以及称为 Q#的全栈量子编程语言,该语言可作为Visual Studio的单独下载的扩展程序获得。微软仍在使用拓扑量子比特来开发其量子计算机,因此,他们目前提供了一个运行量子程序的量子模拟器。

 

D-Wave

D-Wave的软件环境包括一种称为 qbsolv的量子语言,可帮助用户将其QUBO问题(其量子退火器要解决的问题的类型)映射到D-Wave设备的量子比特,连接并将程序转换为量子指令语言。他们还提供了一些更高级别的库来实现一些称为 QSage和 ToQ的优化问题。

 

谷歌

谷歌开发了一种称为 Cirq 的量子语言,它由一个python库组成,用于编写、操纵和优化线路,并再次运行它们,以运行量子计算机和模拟器。目前,一些公司和组织已使用它来运行Google量子设备。

 

Xanadu

他们开发了 Strawberry Fields,这是一个专门针对连续变量量子计算的全栈库,该库基于光子的量子计算机。量子线路是使用 Blackbird量子编程语言编写的,该语言是其量子设备的汇编语言。

 

本源量子

本源量子开发了QRunes的编程语言,该语言用于编写和运行由本源开发的量子编程框架QPada构建的量子程序,该语言是其量子设备的汇编语言。

 

由上文可以看出,当下有多种量子计算语言,每个公司都提出了对其设备进行编程的语言。其中哪一个会更好?没有谁能妄加论断。就像经典编程语言,最终将遭受一种自然选择,只有最常用的才能生存。

有些公司试图通过开发通用语言来简化研究人员的工作,这些语言将根据所使用的硬件设备来对量子程序进行编译。ProjectQ便是这种通用量子语言之一,它可以将程序转换为任何类型的后端,比如IBM设备和Google量子计算机的模拟。另一种通用语言是XACC,这是一个用于对IBM、Rigetti和D-Wave量子计算机进行编程的全栈库。

下图展示了对一些现有的量子计算语言进行分类:

量子编程语言格局-量子客
​根据编程级别对一些现有的量子计算语言进行分类

量子设备仍在不断的发展,量子语言也在不断的进化。在历史的进程中,各个量子公司的编程语言最终哪家能够成为通用编程语言,亦或者是否会诞生新的编程语言,力压群雄,最终成为真正的量子通用编程语言?且拭目以待。

 

参考链接:

[1]https://www.microsoft.com/en-us/quantum/development-kit

[2]https://www.dwavesys.com/software

[3]https://www.rigetti.com/products

[4]https://medium.com/qiskit/qiskit-and-its-fundamental-elements-bcd7ead80492

[5]https://projectq.ch/

[6]https://github.com/eclipse/xacc

[7]https://mp.weixin.qq.com/s/6e4E-hQxoIPAHjJvcU8OWw

 

|编  辑:Sakura     审  校:Peiyong Wang

声明:此文出于传递高质量信息之目的,若来源标注错误或侵权,请作者持权属证明与我们联系,我们将及时更正、删除,所有图片的版权归属所引用组织机构,此处仅引用,原创文章转载需授权。