当前位置: 首页 > 专利查询>微软公司专利>正文

可恢复的方法技术

技术编号:8165676 阅读:171 留言:0更新日期:2013-01-08 12:26
提供了API,所述API处于编程语言的外部但是提供可插入到语言编译器中的功能。所提供的API调节与使用通用基于模式的方案进行的异步编程、迭代器或编写对称协同例程相关联的功能。在API中提供了若干类型的可恢复方法,所述可恢复方法可以应用于以传统程序代码编写的方法主体。以传统编程代码编写的方法主体中的在句法上可区分的控制点通过编译器使用外部API来调用该代码的变换。经变换的代码实现夹在经变换的代码的控制点之间的代码的暂停和恢复。里面具有控制点的方法内所包括的源代码被变换为使得该方法内的代码可以在分立的部分中执行,每个部分都在经变换的代码中的控制点处开始和结束。

【技术实现步骤摘要】
【国外来华专利技术】
技术介绍
多核处理器是一种包括两个或更多单独的处理器(核)的处理系统。众核(many-core)处理器是一种如下的处理器在所述处理器中,核的数目大得足以使得传统的多处理器编程技术不再为高效的。为众核处理器开发软件的程序员必须调整他们编写他们的程序的方式。也就是说,为了为这些类型的计算环境编写高效的程序,程序员必须编写异步代码、一种可以与其他代码并发执行而不对其产生干扰的代码。在没有语言支持的情况下编写无阻塞异步代码是困难的,因为程序员必须以连续传递样式(continuation passing style, CPS)、例如通过使用基于回调的代码来编写代码。在传统同步编程中为隐式的事物在CPS编程中变为显式的。例如,在传统编码中,当函数被调用时,其返回某值。在CPS中,函数采取显式连续变元(argument)、一种接收在原始函数内执行的计算的结果的函数。类似地,当子例程在CPS 函数内被调用时,主调函数必须提供将用子例程返回值来调用的过程(procedure)。诸如例如C#之类的一些语言确实提供了某种形式的借助于迭代器构造改写的编译器支持的连续传递。这种类型的语言支持对于递归而言以及对于异步编程所需的其他类型的编码技术而言不是特别优化的。概述尽管针对迭代器的内建语言支持可以帮助解决与被惰性地评估的集合相关联的一些问题,并且尽管在某些语言中在某种程度上不存在针对异步编程的内建语言支持,但是在此所公开的主体针对一种统一方案,其抽象出这些领域的各个方面的特性并且提供通用的外部机制,所述外部机制可以解决与异步编程、通过迭代器惰性地生成集合、编写对称协同例程等等相关联的大量问题。提供了 API (程序模块),所述API处于编程语言的外部但是提供可插入到语言编译器中的功能。所提供的API调节与使用通用基于模式的方案进行的异步编程、迭代器或编写对称协同例程相关联的功能。在API中提供了若干类型的可恢复方法,所述可恢复方法可以应用于以传统程序代码编写的方法主体。以传统编程代码编写的方法主体中的在句法上可区分的控制点通过编译器使用外部API来调用该代码的变换。经变换的代码实现夹在经变换的代码的控制点之间的代码的暂停和恢复。也就是说,里面具有控制点的代码的本体(例如方法)中所包括的源代码被变换为使得该方法内的代码可以在分立的部分中执行,每个部分都在经变换的代码中的控制点处开始和结束。无论控制点位于代码中的何处,该代码都可以要么直接地、要么作为暂停的递归调用的一部分而暂停。该代码可以从其暂停的点处恢复。不同类型的可恢复方法可以通过该方法在暂停后如何以及何时恢复、以及通过在代码暂停、返回和终止以后来回流动的变元和返回值的类型来区分。暂停控制点可以任选地向调用者返回值,并且可以使用yield(控制权转移)表达式从恢复模块接收值。递归调用控制点可以递归地应用兼容的可恢复方法,其中所述进行由该方法使用yield or yield-for_each表达式所确定的暂停。返回控制点在具有或不具有结果值的情况下用信号通知可恢复方法的终止。提供本
技术实现思路
以便以简化形式介绍将在以下详细描述中进一步描述的一些概念。本
技术实现思路
并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。附图说明在附图中图I示出了根据在此公开的主题的各方面的系统100的示例,该系统100提供了处于编程语言外部的用于可恢复方法的机制;图2a — 2d是根据在此所公开的主题的各方面的驱动程序类的示例;图2e是根据在此所公开的主题的各方面的源代码的示例; 图2f是根据在此所公开的主题的各方面的经变换代码的示例;图2g是根据本文所公开主题的各方面的经改写方法的示例;图2h — 2j是根据在此所公开的主题的各方面的实现迭代器的可恢复方法的示例;图2k是根据此处所公开的主题的各方面的用于使用外部API来实现可恢复方法的方法201的示例的流程图;图3是示出了其中可以实现此处所公开的主题的各方面的计算环境的示例的框图;以及图4是根据此处所公开的主题的各方面的集成开发环境的示例的框图。具体实施例方式概览在此公开的主题描述了语言编译器的特性与插入到编译器的基于模式的应用编程接口(API)插件之间的合约。API插件使该特性适应于异步编程、迭代器、对称协同例程等等,从而向编译器提供针对每个特定类型的可恢复方法要做些什么的细节。该特性重新构建输出代码(例如中间代码),从而移除了源代码与输出代码之间的一一对应。包括一个或多个控制点的源代码被变换为使得输出代码可以在分立的部分中执行,每个部分都在经变换的输出代码中的控制点处开始和结束。例如,最终用户可以编写传统的同步代码,直到他达到如下的点在该点处,他想要他的代码能够暂停以等待某事物而不必停止所有处理。在该点处,最终用户可以在其代码中的任何位置、包括在深度嵌套在该语言的控制结构内的点处插入控制点。编译器对控制点的输入的识别将触发对通过源代码中的控制点表达的形式(签名)所标识出的API的编译器变换。被调用的API确定源代码中的语言句法的有效性,并且可以在后台编译器被使用的情况下展示异步编程特有版本的与编译器的语言特性的交互。使用外部API来扩展编译器以实现图I示出了根据在此公开的主题的各方面的系统100的示例,该系统100提供了处于语言编译器外部的用于实现可恢复方法的机制。系统100的全部或某些部分可以驻留在诸如下面参考图3所描述的计算机之类的一个或多个计算机上。系统100的全部或某些部分可以驻留在诸如下面参考图4所描述的计算机之类的一台或多台软件开发计算机(例如,计算机102)上。系统100或其一些部分可以包括诸如下面参考图4所描述的和所示出的那些集成开发环境(例如,IDE 104)的一部分。替代地,系统100或其一些部分可以作为独立系统或作为插件或附加件来提供。系统100可以包括以下中的一个或多个处理器(比如处理器142)、存储器144、以及提供实现可恢复方法的机制的API或模块的库106。也可以包括本领域已知的其他组件,但此处未示出。能够理解,库106的一个或多个模块可以被加载到存储器144中以致使诸如处理器142之类的一个或多个处理器执行归因于如下API的动作所述API提供了实现可恢复方法的机制,所述机制处于编程语言之外并且可以插入到语言编译器中。系统100可以包括下列各项中的一个或多个编译器114,比如后台编译器、并行编译器或增量编译器;解析器,比如后台解析器、并行解析器或增量解析器;或者插件、预处理器、或附件;或者对IDE、解析器、编译器或预处理器的扩展。在此所述API可被附连到、并入土诸如下列编译器或与诸如下列编译器相关联 编译器,比如后台编译器、并行编译器或增量编译器;解析器,比如后台解析器、并行解析器或增量解析器;或者插件、预处理器、或附件;或者对IDE、解析器、编译器或预处理器的扩展。编译器114可以包括与专用API交互的一个或多个模块。在处于语言编译器外部的库中提供了特定种类的专用可恢复方法、比如但不限于异步或迭代器方法。应用程序员可以通过如下方式致使这些方法被应用于包含传统编程代码的方法主体向该传统代码添加所述方法本体中的一个或多个在句法上可区分的控制点。包括包含这样的控制点112的方法本文档来自技高网
...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:H·J·M·梅杰M·托格森N·M·加夫特N·古斯塔夫松
申请(专利权)人:微软公司
类型:
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1