用于异步方法的声明性支持.pdf

上传人:b*** 文档编号:973123 上传时间:2018-03-22 格式:PDF 页数:26 大小:611.21KB
返回 下载 相关 举报
摘要
申请专利号:

CN200980107877.8

申请日:

2009.01.30

公开号:

CN101965561A

公开日:

2011.02.02

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回IPC(主分类):G06F 13/00申请公布日:20110202|||实质审查的生效IPC(主分类):G06F 13/00申请日:20090130|||公开

IPC分类号:

G06F13/00; G06F9/06; G06F15/16

主分类号:

G06F13/00

申请人:

微软公司

发明人:

H·J·M·梅杰; J·W·戴尔; J·凡高; D·范韦尔曾; H·坎塔姆尼; D·A·马诺列斯库; B·贝克曼; B·利夫希茨

地址:

美国华盛顿州

优先权:

2008.03.04 US 12/042,113

专利代理机构:

上海专利商标事务所有限公司 31100

代理人:

黄嵩泉;钱静芳

PDF下载: PDF下载
内容摘要

异步方法和调用根据声明性意图指示来自动产生。可标识用异步属性来注释的方法或包括特殊异步函数的方法调用。随后,自动生成所标识的同步方法或调用的异步版本。还提供用于指定意图的帮助。

权利要求书

1: 一种异步方法和 / 或调用生成系统, 包括 : 扫描仪组件, 所述扫描仪组件定位包括异步意图声明的方法和 / 或方法调用 ; 以及 编写器组件, 所述编写器组件生成所定位的方法和 / 或调用的异步版本。
2: 如权利要求 1 所述的系统, 其特征在于, 所述声明是被附加到空异步方法声明的异 步属性。
3: 如权利要求 2 所述的系统, 其特征在于, 所述属性和 / 或声明标识由所述编写器组件 采用的所需异步实现模式。
4: 如权利要求 2 所述的系统, 其特征在于, 所述编写器组件根据对应的同步方法定义 来生成异步方法实现。
5: 如权利要求 4 所述的系统, 其特征在于, 所述属性和 / 或所附加的声明标识所述同步 方法定义。
6: 如权利要求 4 所述的系统, 其特征在于, 所述编写器组件根据所述属性和 / 或所述异 步方法声明推断所述对应的方法定义。
7: 如权利要求 1 所述的系统, 其特征在于, 所述声明是同步调用点处的函数。
8: 如权利要求 1 所述的系统, 其特征在于, 所述组件形成中间语言到中间语言转换器 的一部分。
9: 如权利要求 1 所述的系统, 其特征在于, 所述组件形成源代码到中间语言编译器、 中 间语言到机器语言转换器、 或程序加载器的一部分。
10: 如权利要求 1 所述的系统, 其特征在于, 还包括 : 从用户获取信息的用户界面组件 ; 以及 生成器组件, 所述生成器组件根据所获取的信息来生成属性及相关参数。
11: 一种异步方法生成方法, 包括 : 标识被附加到异步方法声明的注释 ; 以及 根据所述注释和对应的同步方法来自动产生异步方法实现。
12: 如权利要求 11 所述的方法, 其特征在于, 还包括从所述注释中标识所述对应的同 步方法。
13: 如权利要求 11 所述的方法, 其特征在于, 还包括从所述异步方法声明中推断所述 对应的同步方法。
14: 如权利要求 11 所述的方法, 其特征在于, 包括根据所述注释所指定的实现模式来 产生所述异步方法。
15: 如权利要求 11 所述的方法, 其特征在于, 包括根据上下文来推断实现模式并根据 所述模式来产生所述异步方法。
16: 如权利要求 11 所述的方法, 其特征在于, 包括在所述注释所指定的处理阶段产生 所述异步方法。
17: 如权利要求 11 所述的方法, 其特征在于, 包括用中间语言代码来标识所述注释并 用中间语言代码来产生所述方法。
18: 一种其上存储有计算机程序的计算机可读介质, 包括 : 同步方法 ; 以及 标识符, 所述标识符指示需要所述方法或对所述方法的调用的异步版本。 2
19: 如权利要求 18 所述的计算机可读介质, 其特征在于, 所述标识符是被附加到同步 方法定义或异步方法声明的属性。
20: 如权利要求 18 所述的计算机可读介质, 其特征在于, 所述标识符是位于同步方法 调用点的特殊函数。

说明书


用于异步方法的声明性支持

    背景
     计算机程序是描述由计算机或其他基于处理器的设备执行的动作的指令组。 当计 算机程序被加载并在计算机硬件上执行时, 计算机将会跟随计算机程序的指令以预先确定 的方式运转。因此, 计算机变为执行可由各指令描述的任务的专用机器。
     使用一种或多种编程语言的程序员创建构成计算机程序的指令。通常, 源代码由 程序员手动和 / 或在集成开发环境 (IDE) 的帮助下指定或编辑。随后, 源代码可由另一程 序来编译或以其他方式变换成可由计算机或类似设备执行的计算机指令。
     例如, 程序员可选择利用高级、 面向对象编程语言 ( 例如, C#、 C++、 VB、 Java…… ) 来实现代码。然后可利用相关联的编译器来为特定机器产生可执行代码。或者, 该代码可 被变换成用于目标虚拟机的中间语言 (IL) 代码以便于经由对该中间代码的进一步编译或 解释来在多个计算机平台上执行。
     方法在大多数编程语言中是重要的程序机制。在某些情况下方法也被称为函数, 方法是独立的、 可重用的功能包。它指定要执行的特定任务或例程。在面向对象范例中, 方 法描述具体类行为或能力。例如, 类狗可具有方法咆哮。
     大多数方法在本质上通常是同步的。方法交互遵循调用者 / 被调用者模式, 其中 调用者调用被调用者所提供的功能。在这种情况下, 调用者对被调用者作出调用 ; 被调用 者进行某种计算并且然后将计算结果返回给调用者。 调用者在被调用者执行某种计算时阻 塞。然而, 如果计算例如由于与网络或盘相关联的计算强度或等待时间而花费相对较长时 间来执行, 那么就会有问题。该问题可利用异步方法来解决。
     一种异步方法不在执行计算时阻塞。调用者简单地继续并且被调用者启动。一旦 被调用者完成, 就采用供调用者和被调用者再次同步的机制。例如, 被调用者可回调调用 者。 换言之, 调用者调用被调用者并且被调用者用结果来回调调用者, 而不是其中调用者调 用被调用者且该调用者阻塞并等待的非对称调用。这尤其允许指定响应非常迅速的程序, 因为调用者通常不会阻塞。
     为了指定异步方法, 程序员需要包括相当多的管道工程 (plumbing) 代码以注入 异步性。在一个常规实施例中, 这对应于创建委托和定义 “开始调用” 和 “结束调用” 方法。 此处, “开始调用” 启动异步操作而 “结束调用” 获取结果。异步方法可利用该设计模式来以 各种方式指定。例如, 在启动异步操作后, “结束调用” 可被直接调用以获取结果或由回调函 数来间接调用。
     概述
     以下呈现了简化的概述, 以提供对所公开的主题的某些方面的基本理解。本概述 不是广泛性的概观。它并不旨在标识关键 / 重要元素, 也不旨在描绘所要求保护的主题的 范围。 其唯一的目的是以简化的形式来介绍一些概念, 作为稍后提出的更详细描述的序言。
     简而言之, 本发明涉及生成异步方法和方法调用。 根据本发明的一方面, 用户可声 明其应经由代码注释来产生异步方法的意图。例如, 可向方法附加指示需要该方法的异步 版本的声明性属性。根据另一方面, 可以在同步方法调用点指定特殊函数以指示对异步调
     用的需求。提供了用于自动生成异步实现或调用的各种机制。换言之, 开发者简单地标识 其意图并自动生成实现。结果, 开发者能够容易地采用异步方法来产生响应非常迅速的应 用程序。
     为实现上述及相关目的, 在此结合以下描述和附图描述了所要求保护的主题的某 些说明性方面。这些方面指示可实践本主题的各种方式, 它们均落在所要求保护的主题的 范围之内。当结合附图阅读以下详细描述时, 本发明的其他优点和新颖特征将变得显而易 见。
     附图简述
     图 1 是根据所公开的主题的一方面的异步方法生成系统的框图。
     图 2 是根据本发明的一方面的代表性方法注释组件的框图。
     图 3 是根据所公开的一方面的代表性异步编写器组件。
     图 4 是根据本发明的一方面的其中异步代码在中间代码级生成的代码变换系统 的框图。
     图 5 是根据所公开的一方面的在源代码级生成异步代码的代码变换系统的框图。
     图 6 是根据本发明的一方面的在执行时间产生异步代码的代码变换系统的框图。
     图 7 是根据本发明的一方面的生成异步代码的代码加载器系统的框图。
     图 8 是根据所公开的一方面的注释指定系统的框图。
     图 9 是根据本发明的一方面的声明异步方法的方法的流程图。
     图 10 是根据所公开的一方面的异步方法生成方法的流程图。
     图 11 是根据本发明的一方面的异步调用生成方法的流程图。
     图 12 是根据本发明的一方面的异步注释生成方法的流程图。
     图 13 是示出用于本发明各方面的合适的操作环境的示意性框图。
     图 14 是示例计算环境的示意性框图。
     详细描述
     涉及异步方法的系统和方法在下文中详细描述。提供异步方法 / 函数所必需的常 规代码极其晦涩难解, 所以, 程序员甚至在他们确实应该使用时也很少使用这些方法 / 函 数。 因此, 许多应用程序的响应速度比可能的响应速度慢得多, 或者甚至由于例如通信失败 而挂起。
     此处提供了用于方便和促进采用异步方法 / 函数的机制。具体而言, 声明性地定 义异步性。在一种情况下, 可对方法 / 函数声明指定属性以指示利用方法 / 函数的异步版 本的意图。还可对同步调用指定指示对异步调用的需求的特殊函数。随后可自动生成异步 方法或方法调用。此外, 程序员可得到基于所请求的和 / 或未经请求的用户输入来生成属 性或重构代码的机制的帮助。
     现在参考附图描述本发明的各个方面, 在全部附图中用相同的标号来指示相同的 或相应的元素。然而应该了解, 附图及其相关详细描述不旨在将所要求保护的主题限于所 公开的具体形式。 相反, 其意图是覆盖落在所要求保护的主题的精神和范围内的所有修改、 等效和替换方案。
     最初参考图 1, 示出了根据所要求保护的主题的一方面的异步方法生成系统 100。 如图所示, 系统 100 包括扫描仪 110 和异步编写器 120, 两者都是如此处所定义的组件。扫描仪组件 110 在程序代码中扫描与方法、 函数和 / 或对方法和函数的调用相关联的异步意 图的声明性指示。更具体而言, 扫描仪组件 110 包括异步属性组件 112 以及异步函数组件 112。
     异步属性组件 112 方便标识用诸如 “Async( 异步 )” 等异步属性来注释的方法、 函 数等。扫描仪组件 110 可经由属性组件 112 来标识用该属性来注释的方法或函数。例如, 异步方法声明 ( 空 ) 可包括属性 “Async( 异步 )” 或以其他方式与其相关联。该属性表达 需要对应的同步方法的异步版本的意图。除了该属性之外, 扫描仪组件 110 还可标识其他 相关联的信息, 包括指定关于所需异步方法的实现的细节的可任选的异步实现模式。
     异步函数组件 114 是用于帮助扫描组件 110 标识应被转换和 / 或重写成异步调用 的特定同步方法或函数调用的机制。不同于方法定义或声明, 调用点可由诸如 “Async()” 等特殊标识函数调用而不是属性来标识。异步函数组件 114 可被配置成标识这些函数以及 相关调用。可以理解, 调用点标识函数也用关于实现模式的特殊信息来注释。因此, 扫描组 件 110 也可标识该信息。
     在检测到时, 扫描仪组件 110 可向编写器组件 120 发送一个或多个方法、 函数和 / 或调用的身份或使得编写器组件 120 可访问这些身份。还可向编写器组件 120 提供包括但 不限于实现模式的其他信息, 如将在稍后章节中进一步描述的。 在接收到或检索到扫描仪信息后, 编写器组件 120 可生成或产生方法、 函数和 / 或 调用的异步版本。 方法和函数可根据对应的同步方法以及包括可用的实现模式在内的其他 属性或注释信息来生成。在一个实现中, 编写器组件 120 可根据所标识的同步方法的实际 定义或表达树表示来重写该同步方法并在适当的位置注入异步机制。 调用可根据任何所提 供的实现模式来被重写成异步调用。 特定异步机制或异步模式可包括本领域内所知道的那 些。
     转向图 2, 描绘了根据所要求保护的主题的一方面的代表性方法注释组件 200。注 释组件 200 可以是图 1 的扫描仪组件 110 所寻求的输入。此外, 注释组件 200 包括多个子 组件, 包括异步属性 210、 同步标识符 220、 异步标识符 230、 结果返回标识符 240、 实现标识 符 250、 以及处理阶段组件 260。异步属性 210 对应于诸如 “Async” 等表示需要异步方法 的独特属性或标识符。同步标识符 220 标识将用于生成异步方法的同步方法。例如, 在 “Async(“F” )” 中, “F” 标识对应的同步方法。异步标识符 230 为新生成的异步方法提供名 称, 其中该名称与例如同步名称不同。返回结果标识符 240 指定用于返回结果的机制, 诸如 回调、 前景或表示异步计算的任何其他类型或机制等。实现标识符 250 指定所需异步实现 或实现风格 (idiom), 诸如 “开始调用 ... 结束调用” 或 XML HTTP 请求等。处理阶段标识符 260 定义将要执行处理生成或变换的哪一阶段或层。例如, 这可对应于源到中间语言 (IL) 编译、 IL 到 IL 变换、 加载、 或及时编译 (JITing) 等。
     代表性注释组件 200 只提供作为可能的子组件的子集。当然, 所构想的并在所要 求保护的主题的范围内的其他子组件是可能的。此外, 应当注意, 可以使用或不使用子组 件, 子组件可以按或不按各种方式组合。例如, 异步属性 210 可结合同步标识符而不是异步 标识符 230 来采用。或者, 异步属性 210 可以结合异步标识符 240 来利用, 其中同步标识符 或许由图 1 的扫描仪组件 110 或其子组件来从异步标识符中推断。
     图 3 描绘了根据所要求保护的主题的代表性异步编写器组件 120。生成组件 310
     产生异步方法或调用。换言之, 生成组件 310 可通过注入其中至少某一些在本领域内是已 知的异步机制来将同步方法或调用重写成异步方法或调用。对于具体方法, 该生成可基于 相关或对应的同步方法定义或实现, 该同步方法定义或实现可以显式地指定或以其他方式 确定或推断。此外, 生成组件 310 可根据附加声明属性、 偏好等来产生异步方法或调用, 由 此提供对异步生成的控制。在未显式定义这些细节的情况下, 生成组件 310 可根据上下文 信息来推断适当的细节。
     如图所示, 生成组件 310 可以与返回结果组件 320 交互。该组件向生成组件 310 提供信息以便于实现不同的返回结果机制。 异步方法的重要特征是调用另一方法并且继续 处理并在稍后时间接受结果而不是阻塞并等待响应的能力。 这些结果可由不同的返回结果 机制来提供, 包括但不限于回调、 前景或表示异步计算的其他类型或机制。简而言之, 回调 是被传递给可以在被调用者计算出结果后回调调用者的方法的函数。相反, 前景是担当方 法调用的结果的占位符的对象。当调用者调用被调用者而不是等待响应时, 返回作为计算 结果的占位符的前景对象, 以允许调用者继续执行计算。
     生成组件 310 还可利用实现组件 330 所提供的信息来生成异步方法。基于给定程 序上下文, 可能需要或优选异步方法的不同实现。例如, 一种常规实现模式被称为 “开始调 用和结束结束调用” 。此处, 创建委托并且将调用分成开始和结束操作。虽然这在许多情形 中是有用的, 但对于处理网络事务可能并非最佳。在这种情况下, 可改为利用 XML HTTP 请 求模式。实现组件 330 向生成组件 310 提供关于如所需特定实现的生成的信息。 与实现组件 330 的交互可通过注释来管控。然而, 在未显式提供这一信息的情况 下, 生成组件 310 可基于可用上下文信息来采用默认实现或推断适当的设置。例如, 如果已 知或可以推断出相关联的应用程序或其相干部分处理网络事务, 则生成组件 310 可以与实 现组件 330 交互以利用 XML HTTP 请求模式来帮助生成异步方法。
     出于清楚的目的, 呈现了帮助描述所要求保护的主题的各方面的几个示例。这些 仅是示例。 这些示例并不意味着将本发明的范围限于这些示例, 而是帮助理解某些方面。 第 一个示例涉及对于被调用者的方法生成, 而第二个示例关注调用者。
     首先考虑以下用高级结构化编程语言来编写的同步方法 : “public IntF(string s)” 。在这种情况下, 向同步函数 “F” 传递字符串 “s” 并且该函数返回一整数。在需要利用 该方法的异步版本的情况下, 可指定以下内容 :
     [Async(“F” )]
     public extern void Foo(string s, Actioncallback) ;
     此处, 异步属性是 “Async( 异步 )” 而同步方法标识符是 “F” 。其他标识符在该异 步属性和同步方法标识符下面的异步方法签名或声明中提供。在这种情况下, 异步标识符 是 “Foo” 并且返回结果机制是回调 (callback)。换言之, 需要方法 “F” 的利用回调机制来 提供结果的名为 “Foo” 的异步版本。在操作中, 调用者向被调用者传递方法 “Foo” ( 取整数 以及字符串的回调函数 ), 并且被调用者在完成计算时调用该函数。虽然此处未示出, 但还 应注意, 异步方法签名可包括另一回调, 即可以在异步方法由于例如计算或网络故障而失 败的情况下调用的失败回调。通常, 如果正在同一线程中执行并且发生故障, 则抛出异常。 然而, 因为异步代码不在同一线程中运行, 所以代码可能不知道冒出的异常。 失败回调是可 提供这一异常的通知的机制。
     响应于以上声明的意图, 方法主体可自动生成, 如下 : [Async(″ F″ )] public void Foo(string s, Callbackcallback) { object[]parameters = new object[]{s} ; Proxy.AsyncCall(callback,″ http://localhost:8081/C.agi″, 2,new Guid ? (this._instance), parameters) ;
     }
     注意, 在该简化示例中, 实现调用服务器侧 “F” , 但该实现是异步地这样做的。最 后, 用户只需指定 “什么” 而 “如何” 是自动注入的。
     在第一个示例中, 对方法应用注释。这呈现对其中定义同步和异步方法两者的位 置的控制。 因此, 想要提供作出同步和异步调用的能力的库编写器能够以此方式这样做。 将 定义同步方法并且然后不采用实现而采用声明性注释来定义异步方法。不幸的是, 如果某 个人想要以异步方式调用第三方代码, 则该方法可能不适当, 因为没有对相关代码的访问 权。在这种情况下, 可利用调用侧注释。
     第二个示例涉及这一调用侧注释。例如, 考虑同步方法调用 “x = c.F(...)” 。为 了将该调用变换成异步调用, 可以如在 “x = Async(c.F(...))” 中那样包括诸如 “Async( 异 步 )” 等标识方法 / 函数。该异步方法可如下表示 :
     FutureAsync(T value){return new Future(value) ; }
     换言之, 它同步执行。然而, 可变换调用点以使其异步地运行, 如下 :
     x = new Future(() => c.F(...)) ;
     插入前景 (future) 构造并向其传递同步调用, 而不是作出调用。然后, 如果 直到稍后才使用 “x” , 则该代码将异步地运行并且直到需要 “x”的值时才阻塞。此处, “Future” 可用于替换 “T” 并担当形实替换程序。
     根据本发明的另一方面, 可以理解, 调用点标识函数可以用标识实现模式等的信 息来注释。例如 :
     [AsyncCallSite(... 实现 / 可任选的 ...)]
     public extern FutureAsync(T t)
     自动生成或变换可以在各个程序级执行。级别可由具体实施例来指示。然而, 程 序员可通过提供如上所述的处理标识符来影响用于变换的级别。图 4-7 示出了几个不同的 示例性实施例。当然, 这些实施例不是穷尽性的, 并且其他实施例也是可能的。
     转向图 4, 示出了根据所要求保护的主题的主题的一方面的代码变换组件 400。可 提供用一种或多种编程语言 ( 例如, C#、 VB、 Java、 C++……) 指定的源代码, 并且这些源代码 可由源到 IL 编译器组件 410 以其他方式获取。随后, 源到 IL 编译器 410 可将源代码编译 或变换成中间语言 (IL) 代码。IL 到 IL 编译器 / 转换器组件 420 可提供对 IL 代码的进一 步处理。此处, IL 到 IL 编译器 / 转换器 420 包括如上所述的异步方法生成系统 100 作为 子组件。因此, 可注入代码以便为缺少异步实现的方法或方法调用提供被标识为异步的实 现。随后, IL 代码可由 IL 到目标编译器 / 转换器组件 430 来编译或转换成目标代码。在
     一个具体实现中, IL 代码可被变换成诸如 ECMAScript(JavaScript、 JScript……) 等语言, 以便在 web 浏览器中解释并执行。
     在 IL 级调用异步方法生成具有几个优点。第一, 开发者可将异步句法注释插入到 编译成 IL 的任何编程语言中。这使得能够用许多语言来生成异步方法。第二, 源代码未被 异步复杂性搞乱。相反, 代码包括可理解的声明性注释即可。第三, 该实施例是稳定的。诸 如用于创建源代码的编程语言不断地演化以添加新特征, 但 IL 即使不是完全没有改变, 其 改变频率也低得多。 此外, 对紧密地耦合到所采用的语言的工具操作存在接近于零的影响, 因为在 IL 级所有工具操作都是上行的。
     图 5 示出了其中异步代码生成 / 变换在源代码级执行的代码变换系统 500。如图 所示, 系统 500 包括源到 IL 编译器 410。如上所述, 编译器 410 将来自一种或多种语言的源 代码转换成中间语言代码。另外, 源到 IL 编译器 410 包括异步方法生成系统 100 作为其组 件。编译器 410 因此能够根据注释或其他特殊句法来为异步方法或对这些方法的调用生成 实现。这些异步实现然后能够以与其他代码相同的方式被转换成中间语言。所生成的 IL 然后可任选地被提供给 IL 到 IL 编译器 / 转换器 420 以提供对 IL 代码的进一步变换。所 得 IL 代码可担当对于 IL 到目标语言编译器 / 转换器 430 的输入。例如, IL 可被编译成供 在 web 浏览器中执行的脚本语言。该实施例的实现可导致产生用于每一个语言编译器的异 步方法生成组件 110。
     注意力转向图 6, 描绘了根据所要求保护的主题的一方面的代码变换系统 600。系 统 600 可包括源到 IL 编译器 410 以及 IL 到 IL 编译器 / 转换器 420, 如上所述。此外, 系统 600 包括 IL 到目标编译器 / 转换器组件 430。 在该实施例中, 异步方法生成系统 100 可以是 IL 到目标编译器 / 转换器组件 430 的组件。在一种情况下, 组件 430 可对应于及时 (JIT) 编译器。因此, 异步实现可在运行时根据异步注释或其他特殊句法来动态地注入。
     图 7 示出了根据所要求保护的主题的一方面的程序加载器系统 700。加载器系统 700 包括加载器组件 710, 该组件接收或以其他方式获取可执行计算机程序并将其加载到 存储器 720 中。这使得程序准备好随后从存储器 720 中执行。与常规系统不同, 加载器组 件 710 包括上述异步方法生成系统 100 作为组件。在加载到存储器中之前, 异步方法实现 和 / 或调用可分别根据声明性注释和 / 或调用点标识函数来注入。
     转向图 8, 提供了根据所要求保护的主题的主题的一方面的注释指定系统 800。系 统 800 包括用户界面组件 810 和注释生成组件 820。 用户界面组件 810 方便用户与系统 800 交互。更具体而言, 关于声明性地标识异步方法和 / 或调用的信息可向用户给予和 / 或从 用户获取。注释生成组件 820 产生生成根据本发明的所要求保护的主题的异步方法和 / 或 调用所必需的属性或注释。注释生成组件由此提供代码重构功能。
     注释生成组件 820 可被动或主动获取用于生成属性或注释的信息。例如, 用户界 面组件 810 可简单地担当用于接收信息并将其传递给注释生成组件 820 的机制。或者, 注 释生成组件 820 可以主动经由用户界面组件 810 向用户请求信息。作为示例, 注释生成组 件 820 可担当请求诸如同步方法名、 异步方法名、 返回结果机制、 和 / 或异步实现风格等信 息的向导。在一个实施例中, 系统 800 可以是一个或多个开发工具或形成开发工具的一部 分。结果, 异步声明甚至可以比直接指定更早地作出。
     已经关于一些组件之间的交互描述了上述系统、 体系结构等。应该明白, 此类系统和组件可以包括在此所指定的那些组件或子组件、 所指定组件或子组件中的一部分、 和/ 或另外的组件。 子组件也可以被实现为在通信上被耦合到其他组件而不是被包括在父组件 中的组件。此外, 一个或多个组件和 / 或子组件可以结合成提供聚集功能的单个组件。系 统、 组件、 和 / 或子组件之间的通信可以根据推 (push) 和 / 或拉模型来实现。各组件也可 以与一个或多个其他组件进行交互, 出于简要考虑在此未具体描述该组件但本领域的技术 人员均已知。
     此外, 应该明白, 以上公开的系统以及以下方法的不同部分可以包括或包含基于 人工智能、 机器学习或知识或规则的组件、 子组件、 进程、 装置、 方法、 或机制 ( 例如, 支持向 量机、 神经网络、 专家系统、 贝叶斯信任网络、 模糊逻辑、 数据融合引擎、 分类器…… )。此类 组件和其他组件可以自动化地执行特定机制或进程, 由此使得系统和方法的各部分变得更 加自适应、 高效及智能。作为示例而非限制, 异步组件 120 可利用这一机制来推断或以其他 方式确定未显式提供的属性信息。例如, 在指定具有异步方法签名但不具有同步名称的异 步属性的情况下, 可以推断异步或同步方法名是相同的。
     考虑到以上描述的示例性系统, 参考图 9-11 的流程图将可以更好地理解根据所 公开的主题实现的方法。尽管出于说明简单的目的, 各方法被显示和描述为一系列框, 但 应该理解和领会, 所要求保护的主题不受框次序的限制, 因为一些框能够以不同的次序和 / 或与在此描绘和描述的其他框并发地发生。而且, 并非所有示出的框都是实现以下描述的 方法所必需的。 参考图 9, 描绘了根据所要求保护的主题的一方面的异步方法声明方法 900。在附 图标记 910, 标识同步方法 ( 或函数 )。所标识的方法对应于对于其需要异步通信的方法。 在标记 920, 声明性地标识对所标识的方法指示对异步版本的需求的异步意图。 这可通过在 方法或方法声明上提供专用句法或注释来实现。例如, 属性 “Async( 异步 )” 可被附加到同 步方法定义或可异步方法的空声明。 该属性是单独的或结合与其相关联的可影响异步方法 的生成的其他信息, 诸如异步方法名、 返回结果机制、 以及实现风格等。 可以理解, 方法调用 能够以类似的方式声明和生成, 不同之处在于在同步调用点处存在诸如 “Async(...)” 等指 示要异步地而不是同步地执行该调用的意图的特殊函数调用, 而不是利用属性。
     图 10 示出了根据本发明的主题的一方面的异步方法生成方法 1000。在附图标记 1010, 标识异步方法属性。例如, 可以在程序中扫描附加到方法定义或声明的名为 “Async” 等的属性。在标记 1020, 标识相关同步方法 / 函数。在异步属性直接附加到同步方法定义 的情况下, 能够容易地标识同步方法。 在另一实现中, 可检索与该属性相关联的其他信息以 标识这一方法。例如, “Async“F” ” 可指示需要名为 “F” 的同步方法的异步版本。如果未 显式标识同步方法名, 则可以例如基于异步方法签名等来推断该同步方法名。 在标记 1030, 根据异步属性和其他相关联的信息以及相关同步方法来产生异步方法代码。换言之, 根据 注释来经由注入异步机制将同步方法变换成异步方法。
     参考图 11, 流程图示出了异步调用生成方法 1100。在附图标记 1110, 在同步调用 点标识特殊函数。例如, 该函数可以是如 “x = Async(c.F(...))” 中的 “Async()” 。这种类 型的函数是 “FutureAsync(T t)” 或异步计算的某一其他表示。在附图标记 1120, 将 调用重写为异步调用。换言之, 生成并注入异步调用。例如, “x = Async(c.F(...))” 可被 重写为 “x = new Future(() => c.F(...))” 。
     注意力转向图 12, 提供了示出根据所要求保护的主题的一方面的异步注释生成方 法 1200 的流程图。根据一个实施例中, 方法 1200 可由与集成开发环境 (IDE) 相关联的一 个或多个开发工具来执行。在附图标记 1210 处, 向用户请求关于异步的信息。例如, 这一 请求可包括对应的同步方法的标识以及关于所需实现的细节等。在标记 1220, 从用户接收 信息。该信息可以是动作 1210 所请求的信息或未经请求的信息。在标记 1230, 根据接收到 的信息来生成属性。该属性可包括各种信息, 包括关于实现的偏好。然而, 在最简单的情况 下, 该属性仅仅可以是注入 “Async” 等标识符。在附图标记 1240, 用该属性及任何相关信息 / 参数来注释程序代码。
     总之, 方法 1200 帮助方便代码注释, 更具体而言是方便异步方法生成 / 变换。 作为 示例, 在 IDE 中, 用户可右击方法以启动重构成方法的异步版本或该异步版本的生成。IDE 然后可将异步属性附加到该方法。 另外, 右击可导致产生询问用户如下问题的对话框 : 您想 要让异步版本具有不同的名称还是相同的名称?您想要使用回调机制还是前景?对于底 层实现你想要采用哪种设计模式或风格?然后可产生捕捉所有这些用户提供的信息的注 释。否则, 可采用默认设置或根据上下文信息来推断最优参数。
     术语 “方法” 和 “函数” 在此可互换地利用。 “函数” 常规上指的是执行操作的代码 片段。另一方面, “方法” 是关于对象的函数。然而, 在实践中并且在此处, 这些术语可互换 地使来简单地指示指定特定例程或操作的代码片段而不管是否涉及对象。 在本文中使用的词语 “示例性” 或其各种形式意味着用作示例、 实例或说明。在此 被描述为 “示例性” 的任何方面或设计并不一定要被解释为相比其他方面或设计更优选或 有利。此外, 各示例只是出于清楚和理解的目的来提供的并且并不意味着以任何方式限制 或约束所要求保护的主题或本发明的相关部分。可以理解, 本可呈现不同范围的多个其它 或替换示例, 但已出于简明的目的而省略了。
     如此处所使用, 术语 “推论” 或 “推断” 通常指的是从经由事件和 / 或数据捕捉的 一组观察结果来推理或推断系统、 环境、 和 / 或用户状态的过程。例如, 推断可用于标识特 定的上下文或动作, 或可生成状态的概率分布。推论可以是概率性的, 即, 基于数据和事件 的考虑计算感兴趣的状态的概率分布。推断也可以指用于从一组事件和 / 或数据组成更高 级事件的技术。这类推断导致从一组观察到的事件和 / 或存储的事件数据中构造新的事件 或动作, 而无论事件是否在相邻时间上相关, 也无论事件和数据是来自一个还是若干个事 件和数据源。各种分类方案和 / 或系统 ( 例如, 支持向量机、 神经网络、 专家系统、 贝叶斯信 任网络、 模糊逻辑、 数据融合引擎……) 可结合执行关于本发明的自动化和 / 或推断的动作 来采用。
     此外, 本发明的所有或部分可实现为方法、 装置或制品, 这是使用标准编程和 / 或 工程设计技术而生产的软件、 固件、 硬件或其任何组合并用以控制计算机实现所公开的发 明。如在此使用的术语 “制品” 旨在涵盖可以从任何计算机可读设备或介质访问的计算机 程序。 例如, 计算机可读介质可以包括但不限于磁存储设备 ( 例如, 硬盘、 软盘、 磁带……)、 光盘 ( 例如, 紧致盘 (CD)、 数字多功能盘 (DVD)…… )、 智能卡和闪存设备 ( 例如, 卡、 棒、 键 驱动器…… )。另外应该明白, 可以使用载波来承载计算机可读电子数据, 例如那些用于发 送和接收电子邮件或用于访问如因特网或局域网 (LAN) 等网络的数据。当然, 本领域的技 术人员将会认识到, 在不背离所要求保护的主题的范围或精神的前提下可以对这一配置进
     行许多修改。
     为了对所公开的主题的各个方面提供上下文, 图 13 和 14 以及以下讨论旨在提供 对其中可实现所公开的主题的各方面的合适的环境的简要、 概括描述。尽管以上在运行于 一台或多台计算机上的程序的计算机可执行指令的一般上下文中描述了本主题, 但本领域 的技术人员将认识到, 本发明也可结合其它程序模块实现。 一般, 程序模块包括执行特定任 务和 / 或实现特定抽象数据类型的例程、 程序、 组件、 数据结构等。此外, 本领域的技术人员 可以理解, 系统 / 方法可用其他计算机系统配置实现, 包括单处理器、 多处理器或多核处理 器计算机系统、 小型计算设备、 大型计算机、 以及个人计算机、 手持式计算设备 ( 例如, 个人 数字助理 (PDA)、 电话、 手表…… )、 基于微处理器或可编程消费者或工业电子设备等。所示 各方面也可在任务由通过通信网络链接的远程处理设备中执行的分布式计算环境中实现。 然而, 所要求保护的主题的一些方面, 如果不是全部方面, 可以在独立计算机上实施。在分 布式计算环境中, 程序模块可以位于本地和远程存储器存储设备中。
     参考图 13, 用于实现此处所公开的各方面的示例性环境 1310 包括计算机 1312( 例 如, 台式机、 膝上型计算机、 服务器、 手持式、 可编程消费或工业电子产品……)。 计算机 1312 包括处理单元 1314、 系统存储器 1316 和系统总线 1318。系统总线 1318 将包括但不限于系 统存储器 1316 的系统组件耦合到处理单元 1314。处理单元 1314 可以是各种可用处理器 中的任意一种。可以理解, 双微处理器、 多核、 和其它多处理器体系结构也可用作处理单元 1314。 系统存储器 1316 包括易失性和非易失性存储器。基本输入 / 输出系统 (BIOS) 包 含诸如在启动期间在计算机 1312 的元件之间传送信息的基本例程, 它被存储在非易失性 存储器中。 作为示例而非限制, 非易失性存储器可包括只读存储器 (ROM)。 易失性存储器包 括随机存取存储器 (RAM), 它可被用作为外部高速缓冲存储器以帮助处理。
     计算机 1312 还包括可移动 / 不可移动、 易失性 / 非易失性计算机存储介质。 例如, 图 13 示出了大容量存储 1324。 大容量存储 1324 包括但不限于, 诸如磁盘或光盘驱动器、 软 盘驱动器、 闪存或记忆棒之类的设备。另外, 大容量存储 1324 可以包括独立的或者与其它 存储介质结合的存储介质。
     图 13 提供用作用户和 / 或其它计算机之间以及在合适的操作环境 1310 中描述的 基本计算机资源之间的中介的软件应用程序 1328。这种软件应用程序 1328 包括系统和应 用程序软件的一个或两者。系统软件可以包括存储在大容量存储 1324 上的操作系统, 该 操作系统用于控制并分配计算机系统 1312 的资源。应用程序软件通过存储在系统存储器 1316 和大容量存储 1324 的任一或两者之上的程序模块和数据来利用系统软件对资源的管 理。
     计算机 1312 还包括通信地耦合到总线 1318 并方便与计算机 1312 的交互的一个 或多个接口组件 1326。作为示例, 接口组件 1326 可以是端口 ( 例如, 串行、 并行、 PCMCIA、 USB、 火线…… ) 或接口卡 ( 例如, 声音、 视频、 网络…… ) 等等。接口组件 1326 可以接收输 入和提供输出 ( 有线地或无线地 )。例如, 输入可以从以下设备接收, 这些设备包括但不限 于, 诸如鼠标、 跟踪球、 指示笔、 触摸垫等定点设备, 键盘, 话筒, 操纵杆, 游戏手柄, 圆盘式卫 星天线, 扫描仪, 照相机, 其它计算机等。还可以由计算机 1312 经由接口组件 1326 向输出 设备提供输出。输出设备可以包括显示器 ( 例如, CRT、 LCD、 等离子…… )、 扬声器、 打印机
     和其它计算机等等。
     图 14 是本发明可与其交互的示例计算环境 1400 的示意框图。 系统 1400 包括一个 或多个客户机 1410。客户机 1410 可以是硬件和 / 或软件 ( 例如, 线程、 进程、 计算设备 )。 系统 1400 还包括一个或多个服务器 1430。因此, 系统 1400 可对应于两层客户机服务器模 型或多层模型 ( 例如, 客户机、 中间层服务器、 数据服务器 ) 以及其它模型。服务器 1430 也 可以是硬件和 / 或软件 ( 例如, 线程、 进程、 计算设备 )。服务器 1430 可以容纳各线程以通 过例如利用本发明的各方面来执行转换。客户机 1410 和服务器 1430 之间的一种可能的通 信可以是在两个或多个计算机进程之间传输的数据分组的形式。
     系统 1400 包括可以用来使客户机 1410 和服务器 1430 之间通信更容易的通信框 架 1450。客户机 1410 可在操作上连接至一个或多个客户机数据存储 1460, 客户机数据存 储可用来存储对客户机 1410 本地的信息。同样地, 服务器 1430 可在操作上连接到可以用 来存储对服务器 1430 本地的信息的一个或多个服务器数据存储 1440。
     客户机 / 服务器交互可参考所要求保护的主题的各方面来利用。作为示例而非限 制, 方法调用可以跨通信框架 1450 在客户机 1410 和服务器 1430 之间执行。 此外, 所公开的 各方面可被结合到对客户机 1410 或服务器 1430 执行分层拆分的特定编译器或转换器中, 其中应用程序代码被拆分或分发以便在一个或多个客户机 1410 和服务器 1430 上执行。这 可使得开发者能够容易地编写强大的多层代码, 同时保留如对象身份等基本程序语义。
     以上所已经描述的内容包括所要求保护的主题的各方面的示例。当然, 出于描绘 所要求保护的主题的目的而描述每一个可以想到的组件或方法的组合是不可能的, 但本领 域内的普通技术人员应该认识到, 所要求保护的主题的许多进一步的组合和排列都是可能 的。 从而, 所公开的主题旨在涵盖落入所附权利要求书的精神和范围内的所有这样的变更、 修改和变化。而且, 对于在详细描述或权利要求书中使用术语 “包括” 、 “包含” 、 “具有” 、 “含 有” 或其它形式的变型而言, 这样的术语旨在包含在类似于术语 “包括” 的一种方式中, 如同 “包括” 在用作权利要求书中的过渡词时所解释的那样。

用于异步方法的声明性支持.pdf_第1页
第1页 / 共26页
用于异步方法的声明性支持.pdf_第2页
第2页 / 共26页
用于异步方法的声明性支持.pdf_第3页
第3页 / 共26页
点击查看更多>>
资源描述

《用于异步方法的声明性支持.pdf》由会员分享,可在线阅读,更多相关《用于异步方法的声明性支持.pdf(26页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN101965561A43申请公布日20110202CN101965561ACN101965561A21申请号200980107877822申请日2009013012/042,11320080304USG06F13/00200601G06F9/06200601G06F15/1620060171申请人微软公司地址美国华盛顿州72发明人HJM梅杰JW戴尔J凡高D范韦尔曾H坎塔姆尼DA马诺列斯库B贝克曼B利夫希茨74专利代理机构上海专利商标事务所有限公司31100代理人黄嵩泉钱静芳54发明名称用于异步方法的声明性支持57摘要异步方法和调用根据声明性意图指示来自动产生。可标识用异步属性。

2、来注释的方法或包括特殊异步函数的方法调用。随后,自动生成所标识的同步方法或调用的异步版本。还提供用于指定意图的帮助。30优先权数据85PCT申请进入国家阶段日2010090386PCT申请的申请数据PCT/US2009/0326052009013087PCT申请的公布数据WO2009/111118EN2009091151INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书10页附图13页CN101965562A1/2页21一种异步方法和/或调用生成系统,包括扫描仪组件,所述扫描仪组件定位包括异步意图声明的方法和/或方法调用;以及编写器组件,所述编写器组件生成所定位的方。

3、法和/或调用的异步版本。2如权利要求1所述的系统,其特征在于,所述声明是被附加到空异步方法声明的异步属性。3如权利要求2所述的系统,其特征在于,所述属性和/或声明标识由所述编写器组件采用的所需异步实现模式。4如权利要求2所述的系统,其特征在于,所述编写器组件根据对应的同步方法定义来生成异步方法实现。5如权利要求4所述的系统,其特征在于,所述属性和/或所附加的声明标识所述同步方法定义。6如权利要求4所述的系统,其特征在于,所述编写器组件根据所述属性和/或所述异步方法声明推断所述对应的方法定义。7如权利要求1所述的系统,其特征在于,所述声明是同步调用点处的函数。8如权利要求1所述的系统,其特征在于。

4、,所述组件形成中间语言到中间语言转换器的一部分。9如权利要求1所述的系统,其特征在于,所述组件形成源代码到中间语言编译器、中间语言到机器语言转换器、或程序加载器的一部分。10如权利要求1所述的系统,其特征在于,还包括从用户获取信息的用户界面组件;以及生成器组件,所述生成器组件根据所获取的信息来生成属性及相关参数。11一种异步方法生成方法,包括标识被附加到异步方法声明的注释;以及根据所述注释和对应的同步方法来自动产生异步方法实现。12如权利要求11所述的方法,其特征在于,还包括从所述注释中标识所述对应的同步方法。13如权利要求11所述的方法,其特征在于,还包括从所述异步方法声明中推断所述对应的同。

5、步方法。14如权利要求11所述的方法,其特征在于,包括根据所述注释所指定的实现模式来产生所述异步方法。15如权利要求11所述的方法,其特征在于,包括根据上下文来推断实现模式并根据所述模式来产生所述异步方法。16如权利要求11所述的方法,其特征在于,包括在所述注释所指定的处理阶段产生所述异步方法。17如权利要求11所述的方法,其特征在于,包括用中间语言代码来标识所述注释并用中间语言代码来产生所述方法。18一种其上存储有计算机程序的计算机可读介质,包括同步方法;以及标识符,所述标识符指示需要所述方法或对所述方法的调用的异步版本。权利要求书CN101965561ACN101965562A2/2页31。

6、9如权利要求18所述的计算机可读介质,其特征在于,所述标识符是被附加到同步方法定义或异步方法声明的属性。20如权利要求18所述的计算机可读介质,其特征在于,所述标识符是位于同步方法调用点的特殊函数。权利要求书CN101965561ACN101965562A1/10页4用于异步方法的声明性支持0001背景0002计算机程序是描述由计算机或其他基于处理器的设备执行的动作的指令组。当计算机程序被加载并在计算机硬件上执行时,计算机将会跟随计算机程序的指令以预先确定的方式运转。因此,计算机变为执行可由各指令描述的任务的专用机器。0003使用一种或多种编程语言的程序员创建构成计算机程序的指令。通常,源代码。

7、由程序员手动和/或在集成开发环境IDE的帮助下指定或编辑。随后,源代码可由另一程序来编译或以其他方式变换成可由计算机或类似设备执行的计算机指令。0004例如,程序员可选择利用高级、面向对象编程语言例如,C、C、VB、JAVA来实现代码。然后可利用相关联的编译器来为特定机器产生可执行代码。或者,该代码可被变换成用于目标虚拟机的中间语言IL代码以便于经由对该中间代码的进一步编译或解释来在多个计算机平台上执行。0005方法在大多数编程语言中是重要的程序机制。在某些情况下方法也被称为函数,方法是独立的、可重用的功能包。它指定要执行的特定任务或例程。在面向对象范例中,方法描述具体类行为或能力。例如,类狗。

8、可具有方法咆哮。0006大多数方法在本质上通常是同步的。方法交互遵循调用者/被调用者模式,其中调用者调用被调用者所提供的功能。在这种情况下,调用者对被调用者作出调用;被调用者进行某种计算并且然后将计算结果返回给调用者。调用者在被调用者执行某种计算时阻塞。然而,如果计算例如由于与网络或盘相关联的计算强度或等待时间而花费相对较长时间来执行,那么就会有问题。该问题可利用异步方法来解决。0007一种异步方法不在执行计算时阻塞。调用者简单地继续并且被调用者启动。一旦被调用者完成,就采用供调用者和被调用者再次同步的机制。例如,被调用者可回调调用者。换言之,调用者调用被调用者并且被调用者用结果来回调调用者,。

9、而不是其中调用者调用被调用者且该调用者阻塞并等待的非对称调用。这尤其允许指定响应非常迅速的程序,因为调用者通常不会阻塞。0008为了指定异步方法,程序员需要包括相当多的管道工程PLUMBING代码以注入异步性。在一个常规实施例中,这对应于创建委托和定义“开始调用”和“结束调用”方法。此处,“开始调用”启动异步操作而“结束调用”获取结果。异步方法可利用该设计模式来以各种方式指定。例如,在启动异步操作后,“结束调用”可被直接调用以获取结果或由回调函数来间接调用。0009概述0010以下呈现了简化的概述,以提供对所公开的主题的某些方面的基本理解。本概述不是广泛性的概观。它并不旨在标识关键/重要元素,。

10、也不旨在描绘所要求保护的主题的范围。其唯一的目的是以简化的形式来介绍一些概念,作为稍后提出的更详细描述的序言。0011简而言之,本发明涉及生成异步方法和方法调用。根据本发明的一方面,用户可声明其应经由代码注释来产生异步方法的意图。例如,可向方法附加指示需要该方法的异步版本的声明性属性。根据另一方面,可以在同步方法调用点指定特殊函数以指示对异步调说明书CN101965561ACN101965562A2/10页5用的需求。提供了用于自动生成异步实现或调用的各种机制。换言之,开发者简单地标识其意图并自动生成实现。结果,开发者能够容易地采用异步方法来产生响应非常迅速的应用程序。0012为实现上述及相关。

11、目的,在此结合以下描述和附图描述了所要求保护的主题的某些说明性方面。这些方面指示可实践本主题的各种方式,它们均落在所要求保护的主题的范围之内。当结合附图阅读以下详细描述时,本发明的其他优点和新颖特征将变得显而易见。0013附图简述0014图1是根据所公开的主题的一方面的异步方法生成系统的框图。0015图2是根据本发明的一方面的代表性方法注释组件的框图。0016图3是根据所公开的一方面的代表性异步编写器组件。0017图4是根据本发明的一方面的其中异步代码在中间代码级生成的代码变换系统的框图。0018图5是根据所公开的一方面的在源代码级生成异步代码的代码变换系统的框图。0019图6是根据本发明的一。

12、方面的在执行时间产生异步代码的代码变换系统的框图。0020图7是根据本发明的一方面的生成异步代码的代码加载器系统的框图。0021图8是根据所公开的一方面的注释指定系统的框图。0022图9是根据本发明的一方面的声明异步方法的方法的流程图。0023图10是根据所公开的一方面的异步方法生成方法的流程图。0024图11是根据本发明的一方面的异步调用生成方法的流程图。0025图12是根据本发明的一方面的异步注释生成方法的流程图。0026图13是示出用于本发明各方面的合适的操作环境的示意性框图。0027图14是示例计算环境的示意性框图。0028详细描述0029涉及异步方法的系统和方法在下文中详细描述。提供。

13、异步方法/函数所必需的常规代码极其晦涩难解,所以,程序员甚至在他们确实应该使用时也很少使用这些方法/函数。因此,许多应用程序的响应速度比可能的响应速度慢得多,或者甚至由于例如通信失败而挂起。0030此处提供了用于方便和促进采用异步方法/函数的机制。具体而言,声明性地定义异步性。在一种情况下,可对方法/函数声明指定属性以指示利用方法/函数的异步版本的意图。还可对同步调用指定指示对异步调用的需求的特殊函数。随后可自动生成异步方法或方法调用。此外,程序员可得到基于所请求的和/或未经请求的用户输入来生成属性或重构代码的机制的帮助。0031现在参考附图描述本发明的各个方面,在全部附图中用相同的标号来指示。

14、相同的或相应的元素。然而应该了解,附图及其相关详细描述不旨在将所要求保护的主题限于所公开的具体形式。相反,其意图是覆盖落在所要求保护的主题的精神和范围内的所有修改、等效和替换方案。0032最初参考图1,示出了根据所要求保护的主题的一方面的异步方法生成系统100。如图所示,系统100包括扫描仪110和异步编写器120,两者都是如此处所定义的组件。扫说明书CN101965561ACN101965562A3/10页6描仪组件110在程序代码中扫描与方法、函数和/或对方法和函数的调用相关联的异步意图的声明性指示。更具体而言,扫描仪组件110包括异步属性组件112以及异步函数组件112。0033异步属性。

15、组件112方便标识用诸如“ASYNC异步”等异步属性来注释的方法、函数等。扫描仪组件110可经由属性组件112来标识用该属性来注释的方法或函数。例如,异步方法声明空可包括属性“ASYNC异步”或以其他方式与其相关联。该属性表达需要对应的同步方法的异步版本的意图。除了该属性之外,扫描仪组件110还可标识其他相关联的信息,包括指定关于所需异步方法的实现的细节的可任选的异步实现模式。0034异步函数组件114是用于帮助扫描组件110标识应被转换和/或重写成异步调用的特定同步方法或函数调用的机制。不同于方法定义或声明,调用点可由诸如“ASYNC”等特殊标识函数调用而不是属性来标识。异步函数组件114可。

16、被配置成标识这些函数以及相关调用。可以理解,调用点标识函数也用关于实现模式的特殊信息来注释。因此,扫描组件110也可标识该信息。0035在检测到时,扫描仪组件110可向编写器组件120发送一个或多个方法、函数和/或调用的身份或使得编写器组件120可访问这些身份。还可向编写器组件120提供包括但不限于实现模式的其他信息,如将在稍后章节中进一步描述的。0036在接收到或检索到扫描仪信息后,编写器组件120可生成或产生方法、函数和/或调用的异步版本。方法和函数可根据对应的同步方法以及包括可用的实现模式在内的其他属性或注释信息来生成。在一个实现中,编写器组件120可根据所标识的同步方法的实际定义或表达。

17、树表示来重写该同步方法并在适当的位置注入异步机制。调用可根据任何所提供的实现模式来被重写成异步调用。特定异步机制或异步模式可包括本领域内所知道的那些。0037转向图2,描绘了根据所要求保护的主题的一方面的代表性方法注释组件200。注释组件200可以是图1的扫描仪组件110所寻求的输入。此外,注释组件200包括多个子组件,包括异步属性210、同步标识符220、异步标识符230、结果返回标识符240、实现标识符250、以及处理阶段组件260。异步属性210对应于诸如“ASYNC”等表示需要异步方法的独特属性或标识符。同步标识符220标识将用于生成异步方法的同步方法。例如,在“ASYNC“F”中,“。

18、F”标识对应的同步方法。异步标识符230为新生成的异步方法提供名称,其中该名称与例如同步名称不同。返回结果标识符240指定用于返回结果的机制,诸如回调、前景或表示异步计算的任何其他类型或机制等。实现标识符250指定所需异步实现或实现风格IDIOM,诸如“开始调用结束调用”或XMLHTTP请求等。处理阶段标识符260定义将要执行处理生成或变换的哪一阶段或层。例如,这可对应于源到中间语言IL编译、IL到IL变换、加载、或及时编译JITING等。0038代表性注释组件200只提供作为可能的子组件的子集。当然,所构想的并在所要求保护的主题的范围内的其他子组件是可能的。此外,应当注意,可以使用或不使用子。

19、组件,子组件可以按或不按各种方式组合。例如,异步属性210可结合同步标识符而不是异步标识符230来采用。或者,异步属性210可以结合异步标识符240来利用,其中同步标识符或许由图1的扫描仪组件110或其子组件来从异步标识符中推断。0039图3描绘了根据所要求保护的主题的代表性异步编写器组件120。生成组件310说明书CN101965561ACN101965562A4/10页7产生异步方法或调用。换言之,生成组件310可通过注入其中至少某一些在本领域内是已知的异步机制来将同步方法或调用重写成异步方法或调用。对于具体方法,该生成可基于相关或对应的同步方法定义或实现,该同步方法定义或实现可以显式地指。

20、定或以其他方式确定或推断。此外,生成组件310可根据附加声明属性、偏好等来产生异步方法或调用,由此提供对异步生成的控制。在未显式定义这些细节的情况下,生成组件310可根据上下文信息来推断适当的细节。0040如图所示,生成组件310可以与返回结果组件320交互。该组件向生成组件310提供信息以便于实现不同的返回结果机制。异步方法的重要特征是调用另一方法并且继续处理并在稍后时间接受结果而不是阻塞并等待响应的能力。这些结果可由不同的返回结果机制来提供,包括但不限于回调、前景或表示异步计算的其他类型或机制。简而言之,回调是被传递给可以在被调用者计算出结果后回调调用者的方法的函数。相反,前景是担当方法调。

21、用的结果的占位符的对象。当调用者调用被调用者而不是等待响应时,返回作为计算结果的占位符的前景对象,以允许调用者继续执行计算。0041生成组件310还可利用实现组件330所提供的信息来生成异步方法。基于给定程序上下文,可能需要或优选异步方法的不同实现。例如,一种常规实现模式被称为“开始调用和结束结束调用”。此处,创建委托并且将调用分成开始和结束操作。虽然这在许多情形中是有用的,但对于处理网络事务可能并非最佳。在这种情况下,可改为利用XMLHTTP请求模式。实现组件330向生成组件310提供关于如所需特定实现的生成的信息。0042与实现组件330的交互可通过注释来管控。然而,在未显式提供这一信息的。

22、情况下,生成组件310可基于可用上下文信息来采用默认实现或推断适当的设置。例如,如果已知或可以推断出相关联的应用程序或其相干部分处理网络事务,则生成组件310可以与实现组件330交互以利用XMLHTTP请求模式来帮助生成异步方法。0043出于清楚的目的,呈现了帮助描述所要求保护的主题的各方面的几个示例。这些仅是示例。这些示例并不意味着将本发明的范围限于这些示例,而是帮助理解某些方面。第一个示例涉及对于被调用者的方法生成,而第二个示例关注调用者。0044首先考虑以下用高级结构化编程语言来编写的同步方法“PUBLICINTFSTRINGS”。在这种情况下,向同步函数“F”传递字符串“S”并且该函数。

23、返回一整数。在需要利用该方法的异步版本的情况下,可指定以下内容0045ASYNC“F”0046PUBLICEXTERNVOIDFOOSTRINGS,ACTIONCALLBACK;0047此处,异步属性是“ASYNC异步”而同步方法标识符是“F”。其他标识符在该异步属性和同步方法标识符下面的异步方法签名或声明中提供。在这种情况下,异步标识符是“FOO”并且返回结果机制是回调CALLBACK。换言之,需要方法“F”的利用回调机制来提供结果的名为“FOO”的异步版本。在操作中,调用者向被调用者传递方法“FOO”取整数以及字符串的回调函数,并且被调用者在完成计算时调用该函数。虽然此处未示出,但还应注意。

24、,异步方法签名可包括另一回调,即可以在异步方法由于例如计算或网络故障而失败的情况下调用的失败回调。通常,如果正在同一线程中执行并且发生故障,则抛出异常。然而,因为异步代码不在同一线程中运行,所以代码可能不知道冒出的异常。失败回调是可提供这一异常的通知的机制。说明书CN101965561ACN101965562A5/10页80048响应于以上声明的意图,方法主体可自动生成,如下0049ASYNCF0050PUBLICVOIDFOOSTRINGS,CALLBACKCALLBACK00510052OBJECTPARAMETERSNEWOBJECTS;0053PROXYASYNCCALLCALLBAC。

25、K,HTTP/LOCALHOST8081/CAGI,2,NEW0054GUIDTHIS_INSTANCE,PARAMETERS;00550056注意,在该简化示例中,实现调用服务器侧“F”,但该实现是异步地这样做的。最后,用户只需指定“什么”而“如何”是自动注入的。0057在第一个示例中,对方法应用注释。这呈现对其中定义同步和异步方法两者的位置的控制。因此,想要提供作出同步和异步调用的能力的库编写器能够以此方式这样做。将定义同步方法并且然后不采用实现而采用声明性注释来定义异步方法。不幸的是,如果某个人想要以异步方式调用第三方代码,则该方法可能不适当,因为没有对相关代码的访问权。在这种情况下,可。

26、利用调用侧注释。0058第二个示例涉及这一调用侧注释。例如,考虑同步方法调用“XCF”。为了将该调用变换成异步调用,可以如在“XASYNCCF”中那样包括诸如“ASYNC异步”等标识方法/函数。该异步方法可如下表示0059FUTUREASYNCTVALUERETURNNEWFUTUREVALUE;0060换言之,它同步执行。然而,可变换调用点以使其异步地运行,如下0061XNEWFUTURECF;0062插入前景FUTURE构造并向其传递同步调用,而不是作出调用。然后,如果直到稍后才使用“X”,则该代码将异步地运行并且直到需要“X”的值时才阻塞。此处,“FUTURE”可用于替换“T”并担当形实。

27、替换程序。0063根据本发明的另一方面,可以理解,调用点标识函数可以用标识实现模式等的信息来注释。例如0064ASYNCCALLSITE实现/可任选的0065PUBLICEXTERNFUTUREASYNCTT0066自动生成或变换可以在各个程序级执行。级别可由具体实施例来指示。然而,程序员可通过提供如上所述的处理标识符来影响用于变换的级别。图47示出了几个不同的示例性实施例。当然,这些实施例不是穷尽性的,并且其他实施例也是可能的。0067转向图4,示出了根据所要求保护的主题的主题的一方面的代码变换组件400。可提供用一种或多种编程语言例如,C、VB、JAVA、C指定的源代码,并且这些源代码可由。

28、源到IL编译器组件410以其他方式获取。随后,源到IL编译器410可将源代码编译或变换成中间语言IL代码。IL到IL编译器/转换器组件420可提供对IL代码的进一步处理。此处,IL到IL编译器/转换器420包括如上所述的异步方法生成系统100作为子组件。因此,可注入代码以便为缺少异步实现的方法或方法调用提供被标识为异步的实现。随后,IL代码可由IL到目标编译器/转换器组件430来编译或转换成目标代码。在说明书CN101965561ACN101965562A6/10页9一个具体实现中,IL代码可被变换成诸如ECMASCRIPTJAVASCRIPT、JSCRIPT等语言,以便在WEB浏览器中解释并。

29、执行。0068在IL级调用异步方法生成具有几个优点。第一,开发者可将异步句法注释插入到编译成IL的任何编程语言中。这使得能够用许多语言来生成异步方法。第二,源代码未被异步复杂性搞乱。相反,代码包括可理解的声明性注释即可。第三,该实施例是稳定的。诸如用于创建源代码的编程语言不断地演化以添加新特征,但IL即使不是完全没有改变,其改变频率也低得多。此外,对紧密地耦合到所采用的语言的工具操作存在接近于零的影响,因为在IL级所有工具操作都是上行的。0069图5示出了其中异步代码生成/变换在源代码级执行的代码变换系统500。如图所示,系统500包括源到IL编译器410。如上所述,编译器410将来自一种或多。

30、种语言的源代码转换成中间语言代码。另外,源到IL编译器410包括异步方法生成系统100作为其组件。编译器410因此能够根据注释或其他特殊句法来为异步方法或对这些方法的调用生成实现。这些异步实现然后能够以与其他代码相同的方式被转换成中间语言。所生成的IL然后可任选地被提供给IL到IL编译器/转换器420以提供对IL代码的进一步变换。所得IL代码可担当对于IL到目标语言编译器/转换器430的输入。例如,IL可被编译成供在WEB浏览器中执行的脚本语言。该实施例的实现可导致产生用于每一个语言编译器的异步方法生成组件110。0070注意力转向图6,描绘了根据所要求保护的主题的一方面的代码变换系统600。。

31、系统600可包括源到IL编译器410以及IL到IL编译器/转换器420,如上所述。此外,系统600包括IL到目标编译器/转换器组件430。在该实施例中,异步方法生成系统100可以是IL到目标编译器/转换器组件430的组件。在一种情况下,组件430可对应于及时JIT编译器。因此,异步实现可在运行时根据异步注释或其他特殊句法来动态地注入。0071图7示出了根据所要求保护的主题的一方面的程序加载器系统700。加载器系统700包括加载器组件710,该组件接收或以其他方式获取可执行计算机程序并将其加载到存储器720中。这使得程序准备好随后从存储器720中执行。与常规系统不同,加载器组件710包括上述异步。

32、方法生成系统100作为组件。在加载到存储器中之前,异步方法实现和/或调用可分别根据声明性注释和/或调用点标识函数来注入。0072转向图8,提供了根据所要求保护的主题的主题的一方面的注释指定系统800。系统800包括用户界面组件810和注释生成组件820。用户界面组件810方便用户与系统800交互。更具体而言,关于声明性地标识异步方法和/或调用的信息可向用户给予和/或从用户获取。注释生成组件820产生生成根据本发明的所要求保护的主题的异步方法和/或调用所必需的属性或注释。注释生成组件由此提供代码重构功能。0073注释生成组件820可被动或主动获取用于生成属性或注释的信息。例如,用户界面组件810。

33、可简单地担当用于接收信息并将其传递给注释生成组件820的机制。或者,注释生成组件820可以主动经由用户界面组件810向用户请求信息。作为示例,注释生成组件820可担当请求诸如同步方法名、异步方法名、返回结果机制、和/或异步实现风格等信息的向导。在一个实施例中,系统800可以是一个或多个开发工具或形成开发工具的一部分。结果,异步声明甚至可以比直接指定更早地作出。0074已经关于一些组件之间的交互描述了上述系统、体系结构等。应该明白,此类系说明书CN101965561ACN101965562A7/10页10统和组件可以包括在此所指定的那些组件或子组件、所指定组件或子组件中的一部分、和/或另外的组件。

34、。子组件也可以被实现为在通信上被耦合到其他组件而不是被包括在父组件中的组件。此外,一个或多个组件和/或子组件可以结合成提供聚集功能的单个组件。系统、组件、和/或子组件之间的通信可以根据推PUSH和/或拉模型来实现。各组件也可以与一个或多个其他组件进行交互,出于简要考虑在此未具体描述该组件但本领域的技术人员均已知。0075此外,应该明白,以上公开的系统以及以下方法的不同部分可以包括或包含基于人工智能、机器学习或知识或规则的组件、子组件、进程、装置、方法、或机制例如,支持向量机、神经网络、专家系统、贝叶斯信任网络、模糊逻辑、数据融合引擎、分类器。此类组件和其他组件可以自动化地执行特定机制或进程,由。

35、此使得系统和方法的各部分变得更加自适应、高效及智能。作为示例而非限制,异步组件120可利用这一机制来推断或以其他方式确定未显式提供的属性信息。例如,在指定具有异步方法签名但不具有同步名称的异步属性的情况下,可以推断异步或同步方法名是相同的。0076考虑到以上描述的示例性系统,参考图911的流程图将可以更好地理解根据所公开的主题实现的方法。尽管出于说明简单的目的,各方法被显示和描述为一系列框,但应该理解和领会,所要求保护的主题不受框次序的限制,因为一些框能够以不同的次序和/或与在此描绘和描述的其他框并发地发生。而且,并非所有示出的框都是实现以下描述的方法所必需的。0077参考图9,描绘了根据所要。

36、求保护的主题的一方面的异步方法声明方法900。在附图标记910,标识同步方法或函数。所标识的方法对应于对于其需要异步通信的方法。在标记920,声明性地标识对所标识的方法指示对异步版本的需求的异步意图。这可通过在方法或方法声明上提供专用句法或注释来实现。例如,属性“ASYNC异步”可被附加到同步方法定义或可异步方法的空声明。该属性是单独的或结合与其相关联的可影响异步方法的生成的其他信息,诸如异步方法名、返回结果机制、以及实现风格等。可以理解,方法调用能够以类似的方式声明和生成,不同之处在于在同步调用点处存在诸如“ASYNC”等指示要异步地而不是同步地执行该调用的意图的特殊函数调用,而不是利用属性。

37、。0078图10示出了根据本发明的主题的一方面的异步方法生成方法1000。在附图标记1010,标识异步方法属性。例如,可以在程序中扫描附加到方法定义或声明的名为“ASYNC”等的属性。在标记1020,标识相关同步方法/函数。在异步属性直接附加到同步方法定义的情况下,能够容易地标识同步方法。在另一实现中,可检索与该属性相关联的其他信息以标识这一方法。例如,“ASYNC“F”可指示需要名为“F”的同步方法的异步版本。如果未显式标识同步方法名,则可以例如基于异步方法签名等来推断该同步方法名。在标记1030,根据异步属性和其他相关联的信息以及相关同步方法来产生异步方法代码。换言之,根据注释来经由注入异。

38、步机制将同步方法变换成异步方法。0079参考图11,流程图示出了异步调用生成方法1100。在附图标记1110,在同步调用点标识特殊函数。例如,该函数可以是如“XASYNCCF”中的“ASYNC”。这种类型的函数是“FUTUREASYNCTT”或异步计算的某一其他表示。在附图标记1120,将调用重写为异步调用。换言之,生成并注入异步调用。例如,“XASYNCCF”可被重写为“XNEWFUTURECF”。说明书CN101965561ACN101965562A8/10页110080注意力转向图12,提供了示出根据所要求保护的主题的一方面的异步注释生成方法1200的流程图。根据一个实施例中,方法120。

39、0可由与集成开发环境IDE相关联的一个或多个开发工具来执行。在附图标记1210处,向用户请求关于异步的信息。例如,这一请求可包括对应的同步方法的标识以及关于所需实现的细节等。在标记1220,从用户接收信息。该信息可以是动作1210所请求的信息或未经请求的信息。在标记1230,根据接收到的信息来生成属性。该属性可包括各种信息,包括关于实现的偏好。然而,在最简单的情况下,该属性仅仅可以是注入“ASYNC”等标识符。在附图标记1240,用该属性及任何相关信息/参数来注释程序代码。0081总之,方法1200帮助方便代码注释,更具体而言是方便异步方法生成/变换。作为示例,在IDE中,用户可右击方法以启动。

40、重构成方法的异步版本或该异步版本的生成。IDE然后可将异步属性附加到该方法。另外,右击可导致产生询问用户如下问题的对话框您想要让异步版本具有不同的名称还是相同的名称您想要使用回调机制还是前景对于底层实现你想要采用哪种设计模式或风格然后可产生捕捉所有这些用户提供的信息的注释。否则,可采用默认设置或根据上下文信息来推断最优参数。0082术语“方法”和“函数”在此可互换地利用。“函数”常规上指的是执行操作的代码片段。另一方面,“方法”是关于对象的函数。然而,在实践中并且在此处,这些术语可互换地使来简单地指示指定特定例程或操作的代码片段而不管是否涉及对象。0083在本文中使用的词语“示例性”或其各种形。

41、式意味着用作示例、实例或说明。在此被描述为“示例性”的任何方面或设计并不一定要被解释为相比其他方面或设计更优选或有利。此外,各示例只是出于清楚和理解的目的来提供的并且并不意味着以任何方式限制或约束所要求保护的主题或本发明的相关部分。可以理解,本可呈现不同范围的多个其它或替换示例,但已出于简明的目的而省略了。0084如此处所使用,术语“推论”或“推断”通常指的是从经由事件和/或数据捕捉的一组观察结果来推理或推断系统、环境、和/或用户状态的过程。例如,推断可用于标识特定的上下文或动作,或可生成状态的概率分布。推论可以是概率性的,即,基于数据和事件的考虑计算感兴趣的状态的概率分布。推断也可以指用于从。

42、一组事件和/或数据组成更高级事件的技术。这类推断导致从一组观察到的事件和/或存储的事件数据中构造新的事件或动作,而无论事件是否在相邻时间上相关,也无论事件和数据是来自一个还是若干个事件和数据源。各种分类方案和/或系统例如,支持向量机、神经网络、专家系统、贝叶斯信任网络、模糊逻辑、数据融合引擎可结合执行关于本发明的自动化和/或推断的动作来采用。0085此外,本发明的所有或部分可实现为方法、装置或制品,这是使用标准编程和/或工程设计技术而生产的软件、固件、硬件或其任何组合并用以控制计算机实现所公开的发明。如在此使用的术语“制品”旨在涵盖可以从任何计算机可读设备或介质访问的计算机程序。例如,计算机可。

43、读介质可以包括但不限于磁存储设备例如,硬盘、软盘、磁带、光盘例如,紧致盘CD、数字多功能盘DVD、智能卡和闪存设备例如,卡、棒、键驱动器。另外应该明白,可以使用载波来承载计算机可读电子数据,例如那些用于发送和接收电子邮件或用于访问如因特网或局域网LAN等网络的数据。当然,本领域的技术人员将会认识到,在不背离所要求保护的主题的范围或精神的前提下可以对这一配置进说明书CN101965561ACN101965562A9/10页12行许多修改。0086为了对所公开的主题的各个方面提供上下文,图13和14以及以下讨论旨在提供对其中可实现所公开的主题的各方面的合适的环境的简要、概括描述。尽管以上在运行于一。

44、台或多台计算机上的程序的计算机可执行指令的一般上下文中描述了本主题,但本领域的技术人员将认识到,本发明也可结合其它程序模块实现。一般,程序模块包括执行特定任务和/或实现特定抽象数据类型的例程、程序、组件、数据结构等。此外,本领域的技术人员可以理解,系统/方法可用其他计算机系统配置实现,包括单处理器、多处理器或多核处理器计算机系统、小型计算设备、大型计算机、以及个人计算机、手持式计算设备例如,个人数字助理PDA、电话、手表、基于微处理器或可编程消费者或工业电子设备等。所示各方面也可在任务由通过通信网络链接的远程处理设备中执行的分布式计算环境中实现。然而,所要求保护的主题的一些方面,如果不是全部方。

45、面,可以在独立计算机上实施。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。0087参考图13,用于实现此处所公开的各方面的示例性环境1310包括计算机1312例如,台式机、膝上型计算机、服务器、手持式、可编程消费或工业电子产品。计算机1312包括处理单元1314、系统存储器1316和系统总线1318。系统总线1318将包括但不限于系统存储器1316的系统组件耦合到处理单元1314。处理单元1314可以是各种可用处理器中的任意一种。可以理解,双微处理器、多核、和其它多处理器体系结构也可用作处理单元1314。0088系统存储器1316包括易失性和非易失性存储器。基本输入/输出系统。

46、BIOS包含诸如在启动期间在计算机1312的元件之间传送信息的基本例程,它被存储在非易失性存储器中。作为示例而非限制,非易失性存储器可包括只读存储器ROM。易失性存储器包括随机存取存储器RAM,它可被用作为外部高速缓冲存储器以帮助处理。0089计算机1312还包括可移动/不可移动、易失性/非易失性计算机存储介质。例如,图13示出了大容量存储1324。大容量存储1324包括但不限于,诸如磁盘或光盘驱动器、软盘驱动器、闪存或记忆棒之类的设备。另外,大容量存储1324可以包括独立的或者与其它存储介质结合的存储介质。0090图13提供用作用户和/或其它计算机之间以及在合适的操作环境1310中描述的基本。

47、计算机资源之间的中介的软件应用程序1328。这种软件应用程序1328包括系统和应用程序软件的一个或两者。系统软件可以包括存储在大容量存储1324上的操作系统,该操作系统用于控制并分配计算机系统1312的资源。应用程序软件通过存储在系统存储器1316和大容量存储1324的任一或两者之上的程序模块和数据来利用系统软件对资源的管理。0091计算机1312还包括通信地耦合到总线1318并方便与计算机1312的交互的一个或多个接口组件1326。作为示例,接口组件1326可以是端口例如,串行、并行、PCMCIA、USB、火线或接口卡例如,声音、视频、网络等等。接口组件1326可以接收输入和提供输出有线地或。

48、无线地。例如,输入可以从以下设备接收,这些设备包括但不限于,诸如鼠标、跟踪球、指示笔、触摸垫等定点设备,键盘,话筒,操纵杆,游戏手柄,圆盘式卫星天线,扫描仪,照相机,其它计算机等。还可以由计算机1312经由接口组件1326向输出设备提供输出。输出设备可以包括显示器例如,CRT、LCD、等离子、扬声器、打印机说明书CN101965561ACN101965562A10/10页13和其它计算机等等。0092图14是本发明可与其交互的示例计算环境1400的示意框图。系统1400包括一个或多个客户机1410。客户机1410可以是硬件和/或软件例如,线程、进程、计算设备。系统1400还包括一个或多个服务器。

49、1430。因此,系统1400可对应于两层客户机服务器模型或多层模型例如,客户机、中间层服务器、数据服务器以及其它模型。服务器1430也可以是硬件和/或软件例如,线程、进程、计算设备。服务器1430可以容纳各线程以通过例如利用本发明的各方面来执行转换。客户机1410和服务器1430之间的一种可能的通信可以是在两个或多个计算机进程之间传输的数据分组的形式。0093系统1400包括可以用来使客户机1410和服务器1430之间通信更容易的通信框架1450。客户机1410可在操作上连接至一个或多个客户机数据存储1460,客户机数据存储可用来存储对客户机1410本地的信息。同样地,服务器1430可在操作上连接到可以用来存储对服务器1430本地的信息的一个或多个服务器数据存储1440。0094客户机/服务器交互可参考所要求保护的主题的各方面来利用。作为示例而非限制,方法调用可以跨通信框架1450在客户机1410和服务器1430之间执行。此外,所公开的各方面可被结合到对客户机1410或服务器1430执行分层拆分的特定编译器或转换器中,其中应用程序代码被拆分或分发以便在一个或多个客户机1410和服务器1430上执行。这可使得开发者能够容易地编写强大的多层代码,同时保留如对象身份等基本程序语义。0095以上所已经描述的内容包括所要求保护的主题的各方面的示。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1