原文地址:https://blogs.msdn.microsoft.com/visualstudio/2018/11/15/why-do-we-need-q/

本文章为机器翻译。

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

为什么我们写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 #比特
  • 钻:新的哈密顿量仿真库
  • 在问#编译器

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

为什么我们需要Q#?的更多相关文章

  1. IGS_学习笔记03_Integrated SOA Gateway设定配置(案例)

    20150506 Created By BaoXinjian

  2. 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

    看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...

  3. Create a bridge using a tagged vlan (8021.q) interface

    SOLUTION VERIFIED April 27 2013 KB26727 Environment Red Hat Enterprise Linux 5 Red Hat Enterprise Li ...

  4. 《开源博客Q群》和《NET上海Q群》入群须知

    开源博客Q群 群名:<嗨-博客> 群号:469075305(已满) 491585006(New) 群简介:“我们每个猿都有一个搭建自己独立博客的梦”. 入群要求: 您可以是HR,私聊管理员 ...

  5. 浅谈Angular的 $q, defer, promise

    浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/ ...

  6. 我的2013 Q.E.D

    "旧历的年底毕竟最像年底,村镇上不必说,就在天空中也显出将到新年的气象来.灰白色的沉重的晚云中间时时发出闪光,接着一声钝响,是送灶的爆竹:近处燃放的可就更强烈了,震耳的大音还没有息,空气里已 ...

  7. H5页面微信分享和手Q分享设置

    RT: 一. 手Q分享: 如下代码所示:设置好 description,name,image,即可,唯一注意的是image最好是200*200,要不然过小不美观,过大加载太慢 <head> ...

  8. mac 修改command+q 退出

    实在受不了! 在chrome中command+w 是关闭当前页面,command+q 退出浏览器: 经常查阅资料打开了N多个窗口,关闭时不小心将command+q当command+w按: so ... ...

  9. $q -- AngularJS中的服务(理解)

      描述 译者注: 看到了一篇非常好的文章,如果你有兴趣,可以查看: Promises与Javascript异步编程 , 里面对Promises规范和使用情景,好处讲的非常好透彻,个人觉得简单易懂. ...

  10. Ruby 里的 %Q, %q, %W, %w, %x, %r, %s, %i (译)转

    原文地址  转自 %Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") >> %Q(Joe said: ...

随机推荐

  1. 怎样从gitHub上面拉项目

    1.注册 https://gitee.com/oschina 2.拿到代码在gitHub上的地址 3.打开eclipse-->import https://git.oschina.net/cai ...

  2. 2.UDP协议

    UDP只在IP数据报服务之上增加了很少功能,即复用分用和差错检测功能. 应用层给UDP多长的报文,UDP就照样发送,即一次发送一个完整报文 一.UDP首部格式 这里的长度是指(首部+数据) UDP校验 ...

  3. css初始化表(normalize.css)

    为什么要初始化CSS? 建站老手都知道,这是为了考虑到浏览器的兼容问题,其实不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面差异.当然,初始化样式会对SEO有一定的 ...

  4. 设计模式:observer模式

    目标:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新 例子: class Observer //观察者 { public: virtual vo ...

  5. 如何将elementUI 表格(el-table)和分页器(el-pagination)连接起来

    el-table表格的代码: <template> <el-table :data="tableData" style="width: 100%&quo ...

  6. java 如何正确的输出集合或者对象的值

    java 如何正确的输出集合或者对象的值 一般out.println(Object) 和 System.out.println(Object),其中输出的都是Object.toString()方法.重 ...

  7. web自动化 -- HTMLreport(三)测试报告输出log日志

    一.需求痛点 1.HTMLreport没法看到log日志,经过封装的框架不可能走一步就print() 2. 希望可以在HTMLreport中输出log日志 3.痛点截图 二.解决办法 1.既然是HTM ...

  8. xss原理绕过防御个人总结

    xss原理 xss产生的原因是将恶意的html脚本代码插入web页面,底层原理和sql注入一样,都是因为js和php等都是解释性语言,会将输入的当做命令执行,所以可以注入恶意代码执行我们想要的内容 x ...

  9. expect正则捕获返回结果

    expect正则捕获返回结果 expect: expect -re "([0-9]*)([a-zA-Z]*)"send_user "num is $expect_out( ...

  10. windows 下安装YApi及集成Idea的YapiUpload

    一准备工具 Mongodb Node和npm 二文档地址 https://hellosean1025.github.io/yapi/ 三安装步骤 1.安装Mongodb,请参考 2.安装Node,请参 ...