为什么我们需要Q#?

原文地址:Why do we need Q#? - Q# Blog

 

本文章为机器翻译。

你可能熟悉微软量子的博客,这股我们的量子计算程序一般新闻和一般的量子计算。这个博客是其开发者社区为重点的合作伙伴。它将主机的技术岗位,深潜入语言和库,和教程。也有开发商活动公告和广告,新发布信息,等。

为什么我们写Q #

TL;DR:因为我们想写的算法,不是电路。

历史和要求

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/1009 访问。

问#增长的项目建设跟进★|〉这将是面向写作,编辑,和短期小规模的“执行算法nisq“最终大规模量子计算机。虽然在短期内支撑模拟是很重要的,主要可执行平台,甚至在长期作为调试援助,该项目的目标是对量子硬件执行,不能模拟。此外,我们想支持可扩展性的发展以及执行;即项目应允许大量复杂的应用,生产力的发展,不只是一个或两个简单的罐头算法。

为了实现这些目标,我们提出了以下要求的语言,编译器和运行时:

  1. <em>算法必须表示抽象的量子比特,而不是物理的量子比特</em>。大量的量子比特,编译器和运行时管理的映射程序量子逻辑(纠错)量子比特,并最终物理量子比特。用手工做,成为任何非平凡的算法不复杂。编译器和运行时也应负责选择和实施纠错和容错方法。
  2. 算法需要允许集成的经典和量子计算。特别是,基于量子测量结果的经典流程控制必须支持。这是需要支持量子模式如重复直到成功
    自适应相位估计。
  3. <em>高阶协议如相位估计和不经意的振幅放大必须表达</em>一个共同的模式。在量子计算是“元算法”等这些工作在其他操作而不是比特。它是发展的可扩展性,允许这样的算法来表达抽象和使用适当的输入算法的必要。
  4. <em>高阶的转换,如将伴随一个操作必须来表达</em>。常见的有两种方法来推导出一个新的操作从一个存在的量子计算:以伴随的操作和控制操作一个量子比特或多个量子比特。支持更高级别的协议写的干净,应该有一种方式来表达,一个操作的伴随或版本控制应该调用。它极大地帮助编译器能够自动生成伴随或操作控制版本开发的可扩展性。
  5. <em>任务如门合成,门序列优化,和附属物的管理应该由编译器</em>。手动执行这些任务变得很难处理迅速,甚至中型算法。这意味着编译器必须能够确定大量信息的静态,使任务如旋转的合成可以在编译的时候,而不是在执行过程中完成的。
  6. <em>算法必须尊重物理规律</em>。例如,复制一个量子比特的状态应该是不可能的。直接进入量子比特的状态应该是不可能的,虽然我们允许一定量的验证和状态检查方便用模拟器调试。

我们的第一次尝试,给我们的LIQUi |〉遗产不足为奇,是使用量子库嵌入在F #功能部分。我们用F #报价功能检查和过程的量子算法代码。

作为一个为泛型类型推理的支持功能和丰富的语言,F #取得前四要求容易满足。元操作容易为F #函数,把函数的参数表示。F #功能都由编译器专门加工实现了伴随和控制。

最初我们有相当数量的这种方法的成功,当我们只有编译器开发者写的量子算法。随着越来越多的人开始使用该平台,但我们发现代码编译器的功能如生成伴随和合成的大门变得越来越复杂。提供这些功能取决于是否能够理解为一个算法的语义来对算法进行符号计算。不幸的是,为此,F #(像任何现代通用语言)是一个非常丰富的图书馆丰富的语言,因此,一个编译器看代码和确定这意味着什么是很难的。当只有少数开发者写的算法,我们的编译器可以识别和处理那些开发人员使用特定的成语是可能的。每一次我们有了一个新的用户,虽然,他们带来了一套新的成语,编译器不得不承认。这种方法显然是不可扩展的平台发展。

问#:领域特定语言

为了使嵌入式方法工作的一个显着的努力后,我们终于决定搬到一个自定义域特定语言的量子计算将提供足够的优势值得建立我们自己的编译器和库的开发成本。在2017的夏天,我们开始设计问#。

执行模型

一个决定我们起步,我们要把量子计算机的一个加速器,类似于GPU的治疗方式。这意味着将有一个C语言编写的#,F #主应用程序,或其他.NET语言,和量子的代码将运行一个子程序,主程序。这也意味着量子程序可以只限于应用加速部分;功能如文件I / O和用户交互可以从Q #安全地省略和左主程序。

设计原则

我们知道,设计一个新语言并不简单快捷,而且我们不可能把一切正确的第一时间。因此,我们决定一套核心原则来指导我们的过程开始和Q #演变:

  1. 从最小的和进化的基础上精心的用户体验。
  2. 将量子首先熟悉二。
  3. 尽可能使用图书馆,而不是语言的特点。
  4. 保持清晰,明确的语义,使丰富的编译器后端优化和转换。

从最小的使我们推迟了许多功能,我们可以把Q #开始,而不是等待,看看他们是否需要。例如,Q #第一预览不支持C三元运算符。我们后来听说从用户缺乏这种操作过于复杂的代码,一个简单的情况;具体地说,一个变量和一个`如果`声明要求只是有一个条件返回。因此,在我们的0.3版本,我们将一元运算符的支持。

量子例首先是重复的语句,直接表达了量子重复直到成功模式而表达这种模式使用C,或做while循环,它是可能的,这样做需要多个标志和一些尴尬的逻辑模糊模式。有一个专门的声明让这一模式在代码中可以看到,无论是对读者、优化和其他代码的转换。

一些关键的问#特征

量子比特的管理

Q #,量子比特是一种资源,是在需要的时候运行要求,回来时不再使用。这是类似于古典语言处理的堆内存的方式。

Q #语言不指定比特逻辑或物理。这可以通过在运行时决定当算法执行。同样,从一个程序到一个实际的逻辑或物理量子比特的量子比特变量的映射是由运行时决定的,而这种映射可推迟到目标设备的拓扑结构和其他细节是已知的。运行时负责确定的映射,使得算法执行,包括任何量子比特的状态转移和映射需要在执行。

问#还支持“肮脏的ancillas”:有例程,需要额外的工作空间的量子比特(ancillas)在执行过程中,但保证返回比特回到他们原来的状态由常规的结束。这些ancillae可以量子比特,目前正在使用但不存在常规期间访问问题。Q #编译器和运行时可以确定哪个比特使用这种方式安全,避免额外的“干净”的量子比特和减少算法的整体空间要求的需要。

第一类操作

Q #操作和功能都是一流的实体;他们可以通过其他操作,赋值给变量,并使用像任何其他的价值。这使得它易于表达协议等振幅放大,相位估计,在问#佳能图书馆人。

一个相关的特征,局部应用,使它容易定义新的业务,现有业务的专业版本提高了一流的经营权。佳能实现的Trotter Suzuki展开显示功率Q #从结合一流的操作和部分应用。

伴随控制的推导

问#提供从现有的类派生一个新的操作两种方式:

  • 这个伴随一个操作是,数学上的复共轭转置操作。在量子计算中常见的幺正操作,操作的伴随其逆;即,它让计算,操作执行。
  • 这个受约束的一个操作的版本需要一个或更多的额外比特和执行基本操作的当且仅当额外的“控制”在1态量子计算。当然,这是在叠加,所以结果通常是控制量子比特纠缠态的量子比特的操作。

同时伴随控制的推导需要不平凡的代码转换的基本操作。问#允许开发者要求编译器生成的衍生版本以下的幺正操作的一般规则。在比较罕见的情况,手术需要特殊的处理,或如果有一个更有效的衍生版本,开发者可以使用特殊的知识提供,开发人员可以明确指定派生版本。

Q #,伴随的` `和`控制`修饰符用于基础操作参照各自的衍生业务。例如,如果` someunitary `是一个操作,有一个伴,`伴随someunitary `是派生的操作,该操作伴随。改性剂可应用于操作变量,同时,它支持更高级的操作如相位估计的关键。

Beyond Circuits

Q# supports general classical control flow during the execution of an algorithm. For instance, the loop required for probabilistic algorithms such as Grover search can easily be expressed in Q#, rather than having to return to the classical driver to test whether the result satisfies the oracle and rerunning if not.

Q# supports rich classical computation as well as quantum operations. 这使得自适应算法如干净的表达随机相位估计在公益图书馆运行。这种算法很难在一个固定的序列的量子门电路模型直接表达。

这些特征表明执行运行时必须能够在处理重大门序列运行时的变化。确保这种能力是微软量子全栈结构的一个重要组成部分。

即将上市

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/1009 访问。

有些话题我们计划:

  • 量子实践:学习与Q #量子计算
  • 在0.3的新的
  • 我们为什么要关心量子计算?
  • 钻:Q #比特
  • 钻:新的哈密顿量仿真库
  • 在问#编译器

请让我们知道如果有特定主题的评论,你想我们掩护!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值