2017年交付的是开发工具预览版
微软在2017年9月的Ignite大会预告量子开发工具,12月11日公开免费预览版。Q#读作Q-sharp,是量子开发工具包(Quantum Development Kit,QDK)的专用语言组成部分;同批交付的还有本地模拟器、示例、程序库和开发环境支持。公告中的阶段是预览发布,并非成熟量子计算机的商品化。
当时用户可在Visual Studio内编辑代码、设置断点和逐步执行。微软介绍,普通笔记本上的模拟器约能处理三十个逻辑量子位,更大的模拟可使用Azure计算资源。这里的量子位数描述经典计算机模拟量子系统的规模,不是用户已经获得同等规模的实体量子处理器。
以协处理器为前提的语言设计
微软研究院雷德蒙德的量子架构与计算团队参与设计。克里斯塔·斯沃尔领导量子软件及模拟器开发;2018年初的语言论文由她与艾伦·盖勒、马蒂亚斯·特罗耶、约翰·阿扎里亚、贝蒂娜·海姆等十人共同署名。论文把问题放在程序结构上:量子算法可能边测量边决定下一步,只有固定量子门序列不便表达这样的控制。
团队采用经典主机调用量子子程序的模型。输入整理、用户交互和结果处理留给主机,Q#负责量子操作及算法内部必要的经典计算。语言中的函数执行确定性的经典计算,操作则可以影响量子系统。量子位类型保存可传给操作的对象,而不让程序任意读取其完整状态;这一边界使算法表达不必绑定某一种器件的物理细节。
一个随机比特程序如何工作
瑞安·拉罗斯在比较早期量子软件平台时,用同一个随机比特任务说明各语言的写法。其Q#示例先申请一个量子位,将它置于零态,施加Hadamard门,再进行测量。理想情况下,测量得到零或一的概率各半;程序把测量结果转成整数,并在释放量子位前将其重置为零态。
这段操作保存于.qs文件,另有C#驱动文件调用它,项目文件存放构建信息。示例同时出现量子门、测量、经典条件判断和资源归还,展示了量子程序与普通控制流程怎样相接。使用模拟器执行时,随机结果来自模拟过程,不能把该示例直接当成实体量子随机数设备。拉罗斯也提醒,短例子的代码长短不足以衡量一种面向复杂算法的语言。
参考:[4]
让变换与检查成为程序的一部分
Q#还把常见量子变换纳入语言机制。2018年论文中的近似量子傅里叶变换例子,用循环和条件决定施加哪些受控旋转,再施加Hadamard门并调整寄存器次序;它可请求编译器自动生成伴随版本和受控版本。这类生成受操作性质限制,不能据此认为任何含测量的程序都能自动倒放。
工具包提供的跟踪模拟器有另一用途:记录量子门、量子位等资源需求,不必完整保存量子态,因此可分析比全状态模拟更大的程序。早期使用者能据此比较算法成本,但资源估计与实际硬件速度属于不同结果。设计者把开发目标放在清楚表达算法、复用子程序和检查错误,而非宣称语言本身带来量子加速。
跨平台和开源分阶段推进
2018年2月26日,量子软件项目经理杰夫·亨肖公布首次主要更新:macOS和Linux获得开发及模拟支持,并与Visual Studio Code集成。更新还提供Windows上的Python互操作预览,使既有Python代码与Q#相互调用。亨肖说,跨平台支持是开发者最集中提出的要求之一,使用者已包括学生、教师、研究人员和算法设计者。
源码开放也有不同层次。2017年公布库代码主要帮助学习;2018年更新进一步给予库和示例完整的开源许可。2019年7月11日,微软再宣布将QDK开源,让外部开发者参与编译、优化和工具改进。把这些阶段都压缩为“2017年完全开源”,会掩盖开发方式的变化。Q#早期的实际贡献,是在可用硬件仍受限制时提供一个可运行、可讨论、可扩展的算法开发环境。