跳转到内容

Q Sharp

维基百科,自由的百科全书
Q#
编程范型多范式量子英语quantum programming函数式指令式
设计者微软研究院(量子架构与计算组,QuArC)
实作者微软
发行时间2017年12月11日,​7年前​(2017-12-11
当前版本
  • 99045(2019年11月11日)[1]
编辑维基数据链接
型态系统静态强类型
系统平台通用语言架构
文件扩展名.qs
网站Microsoft Quantum (GitHub)
启发语言
C#, F#

Q#(发音为Q sharp)是一种用于表达量子算法的特定领域编程语言。[2] 它最初作为量子开发套件的一部分由微软公开发布。[3]

历史

在2017年9月26日的Microsoft Ignite主题演讲中,微软宣布他们将发布一种专门针对量子计算机的新编程语言。[4] 2017年12月11日,微软将Q#作为量子开发套件的一部分正式发布。

用法

Q#仅可作为Visual Studio的单独下载的扩展名提供。[5] Quantum开发套件附带一个能够运行Q#的量子模拟器。

为了调用量子模拟器,使用另一种.NET框架,它为模拟器提供(经典)输入数据,并从模拟器中读取(经典)输出数据。

设计

Q#的设计目的是为了摆脱传统计算机语言对于畅通電子計算機编程模型的思维模式,转而通过更加专注算法的方式来对量子計算機能够拥有更为良好的适配,而且传统语言一般不支援对于量子位元的控制。Q#的针对目标是大量使用量子计算的应用程序的高效率开发,而不是简单算法的固定实现。[6]

功能

Q#的一个主要特征是能够为算法创建并且能够使用量子位元,因此Q#的能力中最为突出的就是能够通过受控反闸阿达马变换进行量子缠结并且引入量子位元的叠加。个别地来说,有托佛利闸包立矩阵等,更多内容详见量子闸

Q#等编译运行特征:

  • 基于抽象量子位元而不是物理量子位元;
  • 允许集成使用量子计算经典计算
  • 能够表达例如量子相位估计算法(Quantum Phase Estimation Algorithm)、幅度放大(Amplitude Amplification)等高阶算法;
  • 采用操作伴随的高阶变换可被原生表达;
  • 可以被位图编译器委托的逻辑门编辑、序列优化、辅助管理等;
  • 算法遵守物理法则,例如不能复制量子位元、除了模拟器调试的模拟状态,实际物理环境下不能监视量子状态。

最终能够与Q#结合的硬件堆栈有望能够将量子位元实现在量子拓朴计算中。当前量子开发套件附带的量子模拟器能够在使用者机器上处理多达32个量子位元,在Azure上可处理多达40个量子位元。

档案以及资源

目前,可用于Q#的资源很少,但官方文档已发布有Microsoft Developer Network:Q#页面存档备份,存于互联网档案馆)、Microsoft Quantum Github页面存档备份,存于互联网档案馆)。其中在Github上的项目也是一个大型示例项目程式的集合,其实现了各种量子算法以及调试模型。

微软在Codeforces上也主持过一场量子编码竞赛,并在当时提供了相关材料以帮助回答部落格文章中所提到的问题,以及教程中问题的详细解决方案。

微软提供了一系列的学习练习页面存档备份,存于互联网档案馆),以帮助学习Q#。其中包含各种资源的链接以及问题的解决方案。

语法

Q#在语法上与C#F#类似,但也有一些显著差异。

与C#的相似之处:

  • 使用namespace来隔离程式码;
  • 所有语句均使用分号;来结尾;
  • 均使用大括弧{}来限定范围;
  • 使用连续的双斜线//来添加单行注释;
  • 一些基元变量数据类型相同,例如:Int、Double、String、Bool等,但是在Q#中全部使用大写字母开头,而在C#中使用关键字来声明时为小写字母开头,不过在C#中使用FCL类型名称时可以表示为大写开头,而且C#中的int为32位元,而Q#中为64位元[7]
  • 量子比特的分配被放置在using语句块当中;
  • 使用return关键字返回结果。

与F#的相似之处:

  • 使用let或mutable来声明变量[2]
  • 使用头等函数模式;
  • 使用open关键字导入模块;
  • 数据类型在变量名称之后声明;
  • 使用连续的两个英文半角句号..来进行范围运算;
  • 使用for..in循环;
  • 每个操作和函数都必须有一个返回值,没有void类型。相对应的,使用放回一个空元组()来取代void;
  • 记录数据类型的定义。

差异:

  • 使用function关键字声明函数;
  • 使用operation关键字声明在量子计算机上的作业;
  • 没有多行注释;
  • 使用断言来检查和报告错误,而不是掷出例外;
  • 文档使用Markdown编写,而不是基于XML的文档标记。

参考文献

  1. ^ Release 99045. 2019年11月11日 [2019年11月12日]. 
  2. ^ 2.0 2.1 QuantumWriter. Intent and product brand in a unique string of 43-59 chars including spaces. docs.microsoft.com. [2017-12-11]. (原始内容存档于2017-12-12) (美国英语). 
  3. ^ Announcing the Microsoft Quantum Development Kit. [2017-12-11]. (原始内容存档于2017-12-11) (美国英语). 
  4. ^ Microsoft announces quantum computing programming language. [2017-12-14]. (原始内容存档于2017-12-14) (美国英语). 
  5. ^ QuantumWriter. Setting up the Q# development environment. [2017-12-14]. (原始内容存档于2017-12-14) (美国英语). 
  6. ^ Why do we need Q#?. [2018-11-23]. (原始内容存档于2018-11-23) (美国英语). 
  7. ^ QuantumWriter. Q# type model. docs.microsoft.com. [2018-11-23]. (原始内容存档于2018-11-16) (美国英语). 

外部链接