Connect public, paid and private patent data with Google Patents Public Datasets

动态自适应编程

Download PDF

Info

Publication number
CN102289384B
CN102289384B CN 201110171604 CN201110171604A CN102289384B CN 102289384 B CN102289384 B CN 102289384B CN 201110171604 CN201110171604 CN 201110171604 CN 201110171604 A CN201110171604 A CN 201110171604A CN 102289384 B CN102289384 B CN 102289384B
Authority
CN
Grant status
Grant
Patent type
Application number
CN 201110171604
Other languages
English (en)
Other versions
CN102289384A (zh )
Inventor
K·J·克瓦里纳
W·哈格德
Original Assignee
微软技术许可有限责任公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Grant date

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformations of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformations of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for programme control, e.g. control unit
    • G06F9/06Arrangements for programme control, e.g. control unit using stored programme, i.e. using internal store of processing equipment to receive and retain programme
    • G06F9/44Arrangements for executing specific programmes
    • G06F9/445Programme loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Abstract

本发明涉及动态自适应编程。创建和执行平台便携式代码。一种方法包括声明对象是程序中的动态对象。程序是所用静态语言编译的程序,不同之处在于动态对象在程序被编译时被排除在对对象的静态分析之外。动态对象包括对平台专用API的依赖调用。平台专用API在对其部署程序的经编译版本的一个或多个平台上是可用的,但是在对其部署程序的经编译版本的一个或多个其它平台上是不可用的。

Description

动态自适应编程

技术领域

[0001] 本申请涉及动态自适应编程,尤其涉及创建和执行平台便携式代码的方法。

背景技术

[0002] 计算机和计算系统已经影响了现代生活的几乎每个方面。计算机通常在工作、消 遣、保健、运输、娱乐、家政管理等中都有涉猎。

[0003] 便携式程序(即可在多个平台上运行的程序)当其在特定平台上运行时通常需要 执行平台专用指令。不同的平台表示软件所运行的环境或底层系统的不同,并可通过作为 或具有不同设备、不同操作系统、或者甚至相同操作系统的不同版本来表征。作为源代码分 发的便携式程序可例如用#ifdefs相当容易地实现这一点。#ifdefs是用于编译器的标记。 开发者为不同的平台提供多种版本的指令。编译器确定平台并从多个版本中选择适合该平 台的代码。然后将所选择的代码编译成二进制代码。#ifdefs导致单个源代码文档和多个 经编译二进制代码。

[0004] 然而,当二进制代码需要是便携式时,执行这种平台专用指令将困难得多。这对静 态编译的语言和具有加载时间验证的运行时环境尤其如此。静态编译的语言是在编译时设 法检测编程错误的语言。如果开发者尝试包括多个版本的指令,那么将产生错误,因为除了 一个版本之外的所有版本将被编译器标记为错误。具体而言,编译器通常产生平台专用二 进制代码,并将为其它平台编写的代码检测为错误。类似地,加载时间验证系统将尝试在运 行时检查代码中的错误。用于其它平台的代码版本将被检测为错误。这些语言和运行时通 常需要使用平台自适应层(PAL)来提供在所有目标平台中呈现的抽象,即使某些平台不支 持这些抽象的有意义的实现。PAL可使用面向对象的继承来防止错误被检测出。具体而言, 不同的库加载在不同的平台,使得不会为特定平台工作的代码版本也不被部署到该平台, 从而不会有对平台专用API的不适当的调用。在开发者需要确保继承是适当的并且库被部 署的情况下,PAL的实现是复杂的。

[0005] 在此要求保护的主题不限于解决任何缺点或仅在诸如上述环境中操作的各个实 施方式。相反,提供该背景仅用以示出在其中可实践在此描述的部分实施方式的一个示例 性技术领域。

发明内容

[0006] -个实施方式涉及创建平台便携式代码的方法。该方法包括声明对象是程序中的 动态对象。该程序是使用支持动态调用的静态语言编译的程序。声明对象为动态对象使得 被声明为动态对象的对象在程序被编译时被排除在对对象的静态分析之外。动态对象包括 对平台专用API的依赖调用。平台专用API在对其部署程序的经编译版本的一个或多个平 台上是可用的,但是在对其部署程序的经编译版本的一个或多个其它平台上是不可用的。 该方法还包括将程序静态编译成平台便携式代码。然后将平台便携式代码部署至不同平 台,并在不同平台上成功执行。将程序静态编译成平台便携式代码包括将动态对象排除在 编译期间对程序中的未被声明为动态的其它对象执行的静态分析之外,作为该对象被声明 为动态对象的结果。

[0007] 另一实施方式包括执行平台便携式代码的方法。该方法包括访问从静态语言程序 编译的经编译程序中包括的动态对象。动态对象被排除在经编译程序的编译期间的静态分 析之外。动态对象包括用作代理对象的功能,代理对象被配置成在平台专用对象在运行时 在执行经编译程序的平台上是可访问的情况下在运行时加载平台专用对象。该方法还包括 测试代理对象,以确定平台专用对象是否成功加载。作为测试结果,该方法包括确定平台专 用对象成功加载,并因此调用平台专用对象的API。

[0008] 提供本发明内容是为了以精简的形式介绍将在以下具体实施方式中进一步描述 的一些概念。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨 在用于帮助确定所要求保护的主题的范围。

[0009] 另外的特征和优点将在以下的描述中阐述,并且部分可从该描述中显而易见,或 者可以从此处的教示实践中习得。本发明的特征和优点可以通过在所附权利要求中特别指 出的手段和组合来实现并获取。本发明的特征将从以下描述和所附权利要求书中变得完全 显而易见,或者可通过如下所述对本发明的实践而获知。

附图说明

[0010] 为了描述能够获得上述和其他优点和特征的方式,将通过参考附图中示出的各具 体实施方式来呈现对以上简述的主题的更为具体的描述。应该理解,这些附图仅描绘了各 典型实施方式,因此其不应被认为是对范围的限制,各实施方式将通过使用附图用附加特 征和细节来描述并解释,在附图中:

[0011] 图1A示出使用代理对象的对象图和确定在平台上是否支持功能的方法;

[0012] 图1B示出使用代理对象的对象图和确定在多个不同平台的平台上是否支持功能 的方法;

[0013] 图1C示出使用代理对象的对象图和确定哪个平台正被使用的方法;

[0014] 图2示出创建平台便携式代码的方法;以及

[0015] 图3示出执行平台便携式代码的方法。

具体实施方式

[0016] 此处描述的某些实施方式使用静态语言中定义的动态对象。动态对象可包括对存 在于某些平台中但不存在于其它平台中的对象的依赖调用。这可以出于多个不同理由来实 现。例如,在某些实施方式中,某些平台可支持在其它平台上不支持的特定功能。或者,不 同平台可支持相同功能,但可使用不同对象形式的机制来提供支持。通过在静态语言中使 用动态对象,某些实施方式能够方便单个源代码/单个二进制代码解决方案,而不是单个 源代码/多个二进制代码解决方案。通过这种方法,单个二进制代码可被分发至多个不同 平台,由此减少对为多个不同平台创建、存储和传递多个二进制代码的需求。

[0017] 在编译时不静态地细查动态对象,因此静态语言编译器不会导致由于包括与给定 平台不兼容的代码的动态对象而产生的错误,例如对不存在的对象的调用。具体而言,动态 语言允许开发者创建在编译时不静态地细查的代码。相反,在运行时,如果在代码中做出不 适当的调用,则程序将抛出异常。本质上,开发者可编码他们想要的任何事物,而不必担心 非运行时编译器错误。因此,各实施方式可在静态语言代码中使用动态对象,使得在静态编 译期间不细查动态对象。

[0018] 在此处所示的示例中,示出了各种替换方式。具体而言,一个实施方式包括"if supported(是否支持)"方法,该方法只在"if supported"调用中引用的对象存在于"if supported"方法在其上被调用的平台上时才完全运行。"if supported"方法可用于实施方 式以实现在某些平台上功能上可用,而在其它平台上不可用。该情况的一个示例在图1A中 示出。图1A示出执行对象映射形式的平台便携式代码。图1A示出调用第一对象102。第 一对象102调用代理对象104,代理对象104是在静态编译便携式代码程序中的动态编译对 象,如以下将要更详细解释的。代理对象104包括IsSupported(受到支持)方法106。该 IsSupported方法是对另一对象108的条件调用。该调用只在其它对象108在执行平台便 携式代码的平台上可用且可执行时进行。如果其它对象108不可用,那么代理对象104 (使 用IsSupported方法)将用作确定对其它对象的调用是否安全的门,从而防止抛出运行时 异常。

[0019] 通过使用多个"if supported(如果支持)"方法,各实施方式可支持具有类似功 能的不同平台,而使用不同机制,如不同对象。该情况的一个示例在图1B中示出。图1B示 出调用代理对象112的第一对象110。代理对象112是动态对象,它是静态编译的平台便携 式代码的一部分(不同于以下将详细解释的动态对象)。代理对象包括IsSupported方法 114,它用作确定在代理对象112上调用其它方法是否安全的门。IsSupported方法可包括 对诸如对象116、118和120的对象的条件调用。这些对象116、118和120的每一个可以是 支持类似功能但位于不同平台的对象。IsSupported方法114允许为适当平台调用适当对 象。这防止调用不支持的方法在平台上被调用,从而防止运行时异常。

[0020] 在替换实施方式中,可运行对于不同框架具有替换路径的方法。该情况的一个示 例在图1C中示出。图1C示出第一方法122。第一方法调用代理对象124。代理对象124 是动态对象,它是静态编译的平台便携式代码的一部分(不同于以下将详细解释的动态对 象)。代理对象124包括两个替换方法,IsRunningOnPlatformX(在平台X上运行)126 and IsRunningOnPlatformY(在平台Y上运行)128。这些方法各自包括使对对象130和132的 调用分别依赖于平台便携式代码正运行于哪个平台的功能。

[0021] 现在示出这些实施方式的更详细的示例。

[0022] 来自华盛顿州雷德蒙市的微软公司的CLR 4.0 ibr .NeA•'框架包括对静态 语言中的动态对象的支持。具体而言,该框架包括可用于静态语言中的动态对象类型 (DynamicObject)。因此,某些实施方式使用静态语言(C#and VB是静态语言的示例)的动 态特征来编写使用动态调用的自适应代码。静态语言通常在编译时检查错误,并且错误检 查通常依赖于平台,而动态语言就在执行前检查代码中的错误。在静态语言中使用动态对 象允许开发者在设计时调用可能不存在于某些支持平台上的任意API,而不必担心编译时 错误。

[0023] 例如,第一 API可存在于第一平台上而不存在于第二平台上,而第二API可存在于 第二平台上而不存在于第一平台上。因此,如果使用在静态语言中实现的动态对象来进行 对第一和第二API的调用,对第一平台的编译将不会由于对第二API的调用而导致错误,并 且对第二平台的编译将不会由于对第一API的调用而导致错误。然而,在运行时,如果第一 平台调用第二API或者第二平台调用第一 API,则将抛出运行时异常。因此,各实施方式可 实现可防止平台对不支持的对象的调用的专门类型,即使这些调用存在于经编译的二进制 代码中。

[0024] 一个示意性实施方式包括特殊类型,它在本示例中是CLR 4,0 for .Ne你框架中 的DynamicObject (动态对象)的子类型。如上所述,DynamicObject是CLR 4.0中的不被 静态编译器细查的对象。DynamicObject表示对任意API的动态代理。在本示例中,该特殊 类型对象在此被称为LightupDynamicObject (启用动态对象,在下文中称为"LD0")。虽然 "启用"表示当在特定平台上可用时启用特征的能力,但是LD0也可用于使用不同机制在不 同平台上实现类似功能。当创建了这种类型的实例时,开发者提供描述该LD0表示哪个平 台专用API的信息。

[0025] 例如,以下示出使用语音合成器功能的LD0的一示例,其类似于图1A所示示例。值 得注意的是,为了说明的目的,语音合成器API存在于可从华盛顿州雷德蒙市的微软公司 获得的.NET®框架上,但是不存在于也可从微软公司获得的Silverlight®中。因此,这两个 平台可用于示出如何在各种平台中使用LD0以及如何在可用时将LD0用于启用语音功能。 以下代码创建表示语音合成器API的LD0的示例:

[0026] dynamic speech = new

[0027] LightupDynamicOb ject ( "System. Speech. SpeechSynthetizer,System. Speech',);

[0028] 这将字符串传递给包括类型名称("System. Speech. SpeechSynthetizer")和 dll( "System. Speech")的构造函数。现在,语音对象可使用如下(即使在运行在诸如 Sih'erHght^;的不支持语音的平台上的程序中):

[0029] if (speech. IsSupported) {

[0030] speech. Speak ( "Hi ! ");

[0031] }

[0032] IsSupported是LD0的方法,且用于确定在语音对象所用的平台上是否支持语音 API。对"Speak(说话)"的调用是动态调用,所以它在编译时或加载时不失效,象如果调用 不是动态的那样。

[0033] 如上所述,在LD0的所示示例中,LD0包括对实例的称为" IsSupported"动态成员。 该成员允许代码查询平台是否支持在构造期间所指示的API。如果没有"if (是否)"检查, 对Speak的调用可能在运行时在某些平台上失效。

[0034] 虽然上述示例示出如何通过防止动态成员在不支持该成员的平台上被调用来保 护动态成员以免运行时异常,但是可用静态成员来实现类似功能。例如,以下示出使用LD0 对静态成员的代理调用。

[0035] dynamic console = new LightupDynamicOb ject ( "System. Console, mscorlib");

[0036] if (console. IsSupported) console. WriteLine ( "Hi !");

[0037] 在上述示例中,"WriteLine (写入行)"是静态成员。

[0038] "IsSupported"(或其它实施方式中具有类似功能的方法)也可用于支持具有类 似功能的平台,但使用如图1B所示的不同的机制实现。例如,不同的平台可都包括初始化 功能,但可使用不同的API来实现初始化功能。以下示例示出在虚构平台X和Y上的该功 能,每个平台的平台初始化方法为:

[0040] 虽然上述示例已示出使用方法来确定API是否支持平台然后执行API,但是其它 实施方式可使用允许替换调用的方法,如以上图1C中所示。例如,方法可能能够具体识别 二进制代码正运行在哪个平台,并且然后调用适当的API。以下示出使用允许用于不同平台 的替换方法调用的方法的示例。具体而言,以下示例示出在虚构平台X和Y上的该功能,每 个平台的平台初始化方法为:

[0043] 在上述示例中,确定二进制代码正在哪个平台上执行。如果平台X正执行二进制 代码,则调用platlnit. PlatformXSpecificMethodCall (· · ·)。如果平台Y正执行二进制代 码,则调用 platlnit. PlatformYSpecificMethodCall (· · ·)。

[0044] 某些实施方式在允许自适应代码调用任意API方面是有用的,而先前的方案要求 为自适应代码具体指定平台专用API。此外,某些实施方式允许具有强加载时间验证的静态 类型语言(如CLR或Java VM)中的自适应二进制代码。

[0045] 以下讨论现在涉及多种方法以及可以执行的方法动作。虽然用特定次序讨论或用 以特定次序发生的流程图示出了各个方法动作,但除非明确规定否则不需要特定次序,或 因为一动作依赖于另一动作在执行该动作之前完成而需要特定次序。

[0046] 现在参考图2,示出了方法200。该方法可以在包括静态编译的语言的计算环境中 实施。静态编译的语言规定动态编译元素。该方法包括用于创建平台便携式代码的动作。 该方法包括声明对象是程序中的动态对象(动作202)。程序是使用静态语言编译的程序。 声明对象为动态对象使得被声明为动态对象的对象在程序被编译时被排除在对对象的静 态分析之外。动态对象包括对平台专用API的依赖调用。平台专用API在对其部署程序的 经编译版本的一个或多个平台上是可用的,但是在对其部署程序的经编译版本的一个或多 个其它平台上是不可用的。

[0047] 方法200还包括将程序静态编译为平台便携式代码,并同时将动态对象排除在静 态分析之外(动作204)。然后将平台便携式代码部署至不同平台,并在不同平台上成功执 行。如上所述,将程序静态编译成平台便携式代码包括将动态对象明确排除在编译期间对 程序中的未被声明为动态的其它对象执行的静态分析之外,作为将对象声明为动态对象的 结果。

[0048] 可实施方法200的实施方式,其中对平台专用API的依赖调用依赖于经编译程序 中包括的动态对象的方法确定支持平台专用API。例如,图1A和1B以及上述其它示例示出 使用IsSupported方法106和114,该方法可用于确定在平台上是否支持特定功能、对象和 /或API。对平台专用API的调用依赖于确定是否支持API结果。

[0049] 在方法200的替换实施方式中,可实施方法200,其中对平台专用API的依赖调用 依赖于经编译程序中包括的动态对象的方法确定经编译程序正在其上运行的平台。例如, 如图1C所示和上述其它实施方式所示,方法126和128可用于确定正在使用哪个平台,并 且可基于正在使用的平台做出对平台专用API的适当调用。

[0050] 可实施方法200的实施方式,其中该方法创建作为平台便携式二进制代码的平台 便携式代码。在该实施方式中,从单个源代码程序中创建单个二进制代码,其不同于单个源 /多个二进制代码方案。单个二进制代码可分发至多个不同平台。如上所述,不同平台可包 括具有不同操作系统的平台;不同平台可包括具有操作系统的不同版本的平台;不同虚拟 机(如桌上CLR对SUverhghU®运行时对移动电话运行时等),不同设备;和/或软件所运 行的环境或底层系统的不同,例如硬件或软件配置的不同。

[0051] 可实施方法200的实施方式,其中对平台专用API的依赖调用方便在对其部署经 编译程序的一个或多个平台上启用功能的启用能力,被启用的功能在对其部署经编译程序 的一个或多个其它平台上不存在。以上示出了该情况的示例,其中语音功能在某些平台上 可用而在其它平台上不可用。可测试是否支持,并在支持时启用语音功能。

[0052] 可实施方法200的实施方式,其中对平台专用API的依赖调用方便使用替换机制 来在对其部署经编译程序的不同平台上实现类似功能,其中每个平台具有类似功能但使用 不同API来实现该功能。该情况的示例在图1B和1C和上述其它示例中示出。

[0053] 现在参考图3,示出了方法300。方法300可以在包括静态编译的语言的计算环境 中实施。静态编译的语言规定动态编译元素。该方法包括用于执行平台便携式代码的动 作。该方法包括访问从静态语言程序编译的经编译程序中包括的动态对象(动作302)。动 态对象被排除在经编译程序的编译期间的静态分析之外。动态对象包括用作代理对象的功 能,代理对象被配置成在平台专用对象在运行时在执行经编译程序的平台上是可访问的情 况下在运行时加载平台专用对象。

[0054] 该方法还包括测试代理对象,以确定平台专用对象是否成功加载(动作304)。可 实施实施方式,其中测试代理对象以确定平台专用对象是否成功加载包括经编译程序中包 括的动态对象的方法确定支持平台专用对象。例如,图1A和1B示出使用IsSupported方 法来确定是否支持平台专用对象。或者,可实施实施方式,其中测试代理对象以确定平台专 用对象是否成功加载包括经编译程序中包括的动态对象的方法确定经编译程序正在其上 执行的平台。例如,图1C示出确定动态对象正在哪个平台上执行的方法。

[0055] 方法300还包括,作为测试代理对象的结果,确定平台专用对象成功加载,并因此 调用平台专用对象的API (动作306)。

[0056] 此外,该方法可以由包括一个或多个处理器和诸如计算机存储器等计算机可读介 质的计算机系统来实施。具体而言,计算机存储器可以存储计算机可执行指令,计算机可执 行指令在由一个或多个处理器执行时使得执行各种功能,如在各实施方式中所述的那些动 作。

[0057] 本发明的各实施方式可以包括或利用包含计算机硬件的专用或通用计算机,这将 在下文中更详细地讨论。本发明范围内的各实施方式还包括用于承载或存储计算机可执行 指令和/或数据结构的物理计算机可读介质和其他计算机可读介质。这样的计算机可读介 质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算 机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由 此,作为示例而非限制,本发明的各实施方式可包括至少两种完全不同的计算机可读介质: 物理计算机可读存储介质和传输计算机可读介质。

[0058] 物理计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储(如CD、DVD 等)、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需 程序代码装置且可由通用或专用计算机访问的任何其他介质。

[0059] "网络"被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子 数据的一个或多个数据链路。当信息通过网络或另一通信连接(硬连线、无线、或硬连线或 无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质 可包括可用于承载计算机可执行指令或数据结构形式的所需程序代码装置并可由通用或 专用计算机访问的网络和/或数据链路。以上介质的组合也被包括在计算机可读介质的范 围内。

[0060] 此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程 序代码装置可从传输计算机可读介质自动转移到物理计算机可读存储介质(或者相反)。 例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模 块(例如,"NIC")内的RAM中,然后最终被传送到计算机系统RAM和/或计算机系统处的 较不易失性的计算机可读物理存储介质。因此,计算机可读物理存储介质可被包括在同样 (或甚至主要)利用传输介质的计算机系统组件中。

[0061] 计算机可执行指令例如包括,使通用计算机、专用计算机、或专用处理设备执行某 一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语 言或微软中间语言《的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专 用的语言描述了本主题,但可以理解的是,所附权利要求书中定义的主题不必限于上述特 征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。

[0062] 本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络 计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息 处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型 计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可以在其中通 过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路 的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实践。在分布式系 统环境中,程序模块可以位于本地和远程存储器存储设备二者中。

[0063] 本发明可具体化为其他具体形式而不背离其精神或特征。所描述的实施方式在所 有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非 前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变被权利要求书的范 围所涵盖。

Claims (15)

1. 一种计算环境中的创建平台便携式代码的方法,所述计算环境包括使用静态编译的 语言编写的程序,其中所述静态编译的语言规定动态编译元素,所述方法包括: 声明对象是程序中的动态对象(202),所述程序是使用静态语言编译的程序,其中声明 对象为动态对象使得被声明为动态对象的对象在编译程序时被排除在对对象的静态分析 之外,其中动态对象包括对平台专用API的依赖调用,平台专用API在将对其部署所述程序 的经编译版本的一个或多个平台上是可用的,但是在将对其部署所述程序的经编译版本的 一个或多个其它平台上是不可用的;以及 将所述程序静态编译成平台便携式代码,所述平台便携式代码然后被部署至不同平台 并在不同平台上成功执行(204),其中将所述程序静态编译成平台便携式代码包括将所述 动态对象排除在编译期间对所述程序中的未被声明为动态的其它对象执行的静态分析之 外 。
2. 如权利要求1所述的方法,其特征在于,所述对平台专用API的依赖调用依赖于经编 译程序中包括的动态对象的方法确定支持平台专用API。
3. 如权利要求1所述的方法,其特征在于,所述对平台专用API的依赖调用依赖于所述 经编译程序中包括的动态对象的方法确定所述经编译程序正在其上执行的平台。
4. 如权利要求1所述的方法,其特征在于,所述方法创建作为平台便携式二进制代码 的平台便携式代码,使得从包括一个或多个源代码文件的单个源代码程序中创建单个二进 制代码,其中所述单个二进制代码可分发至多个不同平台。
5. 如权利要求1所述的方法,其特征在于,所述对平台专用API的依赖调用方便在对其 部署所述经编译程序的一个或多个平台上启用功能的启用能力,被启用的功能在对其部署 所述经编译程序的一个或多个其它平台上不存在。
6. 如权利要求1所述的方法,其特征在于,所述对平台专用API的依赖调用方便使用替 换机制来在对其部署所述经编译程序的不同平台上实现类似功能,其中每个平台具有类似 功能但使用不同API来实现该功能。
7. 如权利要求1所述的方法,其特征在于,不同平台包括具有不同操作系统的平台。
8. 如权利要求1所述的方法,其特征在于,不同平台包括具有操作系统的不同版本的 平台。
9. 如权利要求1所述的方法,其特征在于,不同平台包括具有不同硬件或软件配置中 的至少一个的平台。
10. 如权利要求1所述的方法,其特征在于,不同平台包括具有不同虚拟机的平台。
11. 一种在计算环境中的执行平台便携式代码的方法,所述计算环境包括静态编译的 语言,其中所述静态编译的语言规定动态编译元素,所述方法包括: 访问从静态语言程序编译的经编译程序中包括的动态对象(302),但其中所述动态对 象被排除在所述经编译程序的编译期间的静态分析之外,并且其中所述动态对象包括用作 代理对象的功能,所述代理对象被配置成在平台专用对象能在运行时在执行所述经编译程 序的平台上访问的情况下,在运行时加载所述平台专用对象; 测试所述代理对象以确定所述平台专用对象是否成功加载(304);以及 确定所述平台专用对象成功加载,并因此调用平台专用对象的API (306)。
12. 如权利要求11所述的方法,其特征在于,测试所述代理对象以确定所述平台专用 对象是否成功加载包括:所述经编译程序中包括的动态对象的方法确定支持所述平台专用 对象。
13. 如权利要求11所述的方法,其特征在于,测试所述代理对象以确定所述平台专用 对象是否成功加载包括:所述经编译程序中包括的动态对象的方法确定所述经编译对象正 在其上执行的平台。
14. 如权利要求11所述的方法,其特征在于,所述经编译程序是平台便携式二进制代 码,并且是从单个源代码程序中创建的单个二进制代码,其中所述单个二进制代码可分发 至多个不同平台。
15. 如权利要求11所述的方法,其特征在于,所述对平台专用API的调用方便在对其部 署所述经编译程序的一个或多个平台上启用功能的启用能力,被启用的功能在对其部署所 述经编译程序的一个或多个其它平台上不存在。
CN 201110171604 2010-06-15 2011-06-15 动态自适应编程 CN102289384B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US12/816,249 2010-06-15
US12816249 US8572591B2 (en) 2010-06-15 2010-06-15 Dynamic adaptive programming

Publications (2)

Publication Number Publication Date
CN102289384A true CN102289384A (zh) 2011-12-21
CN102289384B true CN102289384B (zh) 2016-05-18

Family

ID=45097318

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201110171604 CN102289384B (zh) 2010-06-15 2011-06-15 动态自适应编程

Country Status (2)

Country Link
US (1) US8572591B2 (zh)
CN (1) CN102289384B (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8473971B2 (en) 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
US20080320453A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding
US8752193B2 (en) * 2009-11-16 2014-06-10 Sandisk Technologies Inc. Content binding at first access
US8997069B2 (en) * 2011-04-13 2015-03-31 Microsoft Technology Licensing, Llc API descriptions
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships
US8776094B2 (en) 2011-08-11 2014-07-08 Microsoft Corporation Runtime system
US9015677B2 (en) * 2011-12-06 2015-04-21 Nice Systems Ltd. System and method for developing and testing logic in a mock-up environment
US8910115B2 (en) * 2012-04-02 2014-12-09 Kony Solutions, Inc. Systems and methods for application development
US20140096014A1 (en) * 2012-09-29 2014-04-03 Oracle International Corporation Method for enabling dynamic client user interfaces on multiple platforms from a common server application via metadata
US9800458B1 (en) * 2013-05-14 2017-10-24 Google Inc. Dynamic, interactive objects for posting
WO2015183241A1 (en) * 2014-05-27 2015-12-03 Hewlett-Packard Development Company, L.P. Distributed compilation of statically typed languages
US20160110229A1 (en) * 2014-10-16 2016-04-21 Microsoft Corporation Api versioning independent of product releases

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1577265A (zh) * 2003-07-23 2005-02-09 微软公司 用于可扩充编译器和工具基础结构的描述语言
JP2009053802A (ja) * 2007-08-24 2009-03-12 Toshiba Corp プログラム処理方法およびプログラム

Family Cites Families (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5488727A (en) 1991-09-30 1996-01-30 International Business Machines Corporation Methods to support multimethod function overloading with compile-time type checking
US5692195A (en) 1994-08-31 1997-11-25 International Business Machines Corporation Parent class shadowing
US5485615A (en) 1992-06-10 1996-01-16 Telefonaktiebolaget L M Ericsson System and method of interactively developing desired computer programs by using plurality of tools within a process described in graphical language
JP3178151B2 (ja) 1993-03-19 2001-06-18 富士ゼロックス株式会社 オブジェクト指向言語のメッセージコンパイル装置
US5500881A (en) 1993-07-12 1996-03-19 Digital Equipment Corporation Language scoping for modular, flexible, concise, configuration descriptions
US5748961A (en) 1993-07-12 1998-05-05 Digital Equipment Corporation Efficient method and apparatus for compiling and linking modules of computer code in a large software system
US6425124B1 (en) 1993-11-08 2002-07-23 Matsushita Electric Industrial Co. Ltd. Resource allocation device for reducing the size and run time of a machine language program
US5742828A (en) 1994-08-03 1998-04-21 Microsoft Corporation Compiler and method for evaluation of foreign syntax expressions in source code
US5748963A (en) 1995-05-12 1998-05-05 Design Intelligence, Inc. Adaptive binding
US5687377A (en) 1995-10-06 1997-11-11 Electronic Data Systems Corporation Method for storing variables in a programming language
US5872973A (en) 1995-10-26 1999-02-16 Viewsoft, Inc. Method for managing dynamic relations between objects in dynamic object-oriented languages
US6072950A (en) 1996-06-18 2000-06-06 Microsoft Corporation Pointer analysis by type inference combined with a non-pointer analysis
US6100885A (en) 1996-07-06 2000-08-08 International Business Machines Corporation Supporting modification of properties via a computer system's user interface
US6041179A (en) 1996-10-03 2000-03-21 International Business Machines Corporation Object oriented dispatch optimization
JPH10124325A (ja) 1996-10-25 1998-05-15 Toshiba Corp 変数の最適配置方法、変数の最適配置装置及び変数の最適配置プログラムを格納したコンピュータ読み取り可能な記録媒体
US6134708A (en) 1997-02-13 2000-10-17 Nec Corporation Program compilation execution system
US6041180A (en) 1997-04-28 2000-03-21 International Business Machines Corporation System and method for optimizing template object files
US5842220A (en) 1997-05-02 1998-11-24 Oracle Corporation Methods and apparatus for exposing members of an object class through class signature interfaces
US6026233A (en) 1997-05-27 2000-02-15 Microsoft Corporation Method and apparatus for presenting and selecting options to modify a programming language statement
US6314559B1 (en) 1997-10-02 2001-11-06 Barland Software Corporation Development system with methods for assisting a user with inputting source code
CA2219557C (en) 1997-10-29 2002-12-10 Ibm Canada Limited-Ibm Canada Limitee Run-time instrumentation for object oriented programmed applications
US6330717B1 (en) 1998-03-27 2001-12-11 Sony Corporation Of Japan Process and system for developing an application program for a distributed adaptive run-time platform
US5983021A (en) 1998-05-27 1999-11-09 Sun Microsystems Dynamically switching statically bound function calls to dynamically bound function calls without recompilation
US6018628A (en) 1998-06-16 2000-01-25 Sun Microsystems, Inc. Method of implementing parameterized types to be compatible with existing unparameterized libraries
US6237135B1 (en) 1998-06-18 2001-05-22 Borland Software Corporation Development system with visual design tools for creating and maintaining Java Beans components
US6915301B2 (en) 1998-08-25 2005-07-05 International Business Machines Corporation Dynamic object properties
US6415316B1 (en) 1998-09-01 2002-07-02 Aidministrator Nederland B.V. Method and apparatus for implementing a web page diary
US6477543B1 (en) * 1998-10-23 2002-11-05 International Business Machines Corporation Method, apparatus and program storage device for a client and adaptive synchronization and transformation server
US6502233B1 (en) 1998-11-13 2002-12-31 Microsoft Corporation Automated help system for reference information
US6842877B2 (en) 1998-12-18 2005-01-11 Tangis Corporation Contextual responses based on automated learning techniques
US7080322B2 (en) 1998-12-18 2006-07-18 Tangis Corporation Thematic response to a computer user's context, such as by a wearable personal computer
US6678745B1 (en) 1999-06-01 2004-01-13 Bruce Hodge Dynamic object synthesis with automatic late binding
CA2279118A1 (en) 1999-07-29 2001-01-29 Ibm Canada Limited-Ibm Canada Limitee Tooling framework system and method for code generation
US6560774B1 (en) 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6986132B1 (en) 2000-04-28 2006-01-10 Sun Microsytems, Inc. Remote incremental program binary compatibility verification using API definitions
US6981249B1 (en) 2000-05-02 2005-12-27 Microsoft Corporation Methods for enhancing type reconstruction
US6973646B1 (en) 2000-07-21 2005-12-06 International Business Machines Corporation Method for compiling program components in a mixed static and dynamic environment
US20020129345A1 (en) 2000-09-27 2002-09-12 Tilden Mark D. Scripting business logic in a distributed object oriented environment
US6957394B1 (en) 2000-12-01 2005-10-18 Microsoft Corporation Rendering controls of a web page according to a theme
US7437710B2 (en) 2001-07-02 2008-10-14 Bea Systems, Inc. Annotation based development platform for stateful web services
US7120897B2 (en) 2001-07-10 2006-10-10 Microsoft Corporation User control objects for providing server-side code generation from a user-defined dynamic web page content file
US7117504B2 (en) * 2001-07-10 2006-10-03 Microsoft Corporation Application program interface that enables communication for a network software platform
US6928425B2 (en) 2001-08-13 2005-08-09 Xerox Corporation System for propagating enrichment between documents
US20030131347A1 (en) 2001-10-12 2003-07-10 Allison David S. Method and apparatus for runtime binding of object members
US20030097648A1 (en) 2001-10-12 2003-05-22 Allison David S. Method and apparatus for determining runtime size and type information in dynamically typed languages
US6965990B2 (en) 2001-10-23 2005-11-15 International Business Machines Corporation Method and apparatus for providing programming assistance
US7152229B2 (en) 2002-01-18 2006-12-19 Symbol Technologies, Inc Workflow code generator
US7017117B2 (en) 2002-02-14 2006-03-21 Symantec Corporation Attenuating and amplifying user interface themes
US7127707B1 (en) 2002-10-10 2006-10-24 Microsoft Corporation Intellisense in project upgrade
US7546607B2 (en) 2002-11-19 2009-06-09 Microsoft Corporation Native code exposing virtual machine managed object
US7051322B2 (en) 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US8032860B2 (en) 2003-02-26 2011-10-04 Oracle International Corporation Methods for type-independent source code editing
US7246361B1 (en) 2003-03-20 2007-07-17 Intuit, Inc. Supporting multiple late binding objects with the same identifier
US7389498B2 (en) 2003-03-25 2008-06-17 Microsoft Corporation Core object-oriented type system for semi-structured data
US7620959B2 (en) 2003-05-12 2009-11-17 Microsoft Corporation Reflection-based processing of input parameters for commands
US7197702B2 (en) 2003-06-13 2007-03-27 Microsoft Corporation Web page rendering mechanism using external programmatic themes
US7647610B2 (en) * 2003-08-19 2010-01-12 Lg Electronics Inc. Interfacing system between digital TV and plurality of remote controllers, method thereof, remote controller thereof, and remote controller signal transmitting method thereof
US8307109B2 (en) 2003-08-27 2012-11-06 International Business Machines Corporation Methods and systems for real time integration services
US7818729B1 (en) 2003-09-15 2010-10-19 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
US20050081139A1 (en) 2003-10-10 2005-04-14 George Witwer Clustering based personalized web experience
WO2005038610A3 (en) 2003-10-14 2005-10-13 Donn Delson A method and system for using cascading style sheets (css) to customize an online store
US7676798B2 (en) 2003-10-24 2010-03-09 Microsoft Corporation Mechanism for obtaining and applying constraints to constructs within an interactive environment
US20050198177A1 (en) 2004-01-23 2005-09-08 Steve Black Opting out of spam
US20050278695A1 (en) 2004-06-14 2005-12-15 Synovic Michael J System and method for modifying code assist within an integrated development environment
US7693856B2 (en) 2004-06-25 2010-04-06 Apple Inc. Methods and systems for managing data
US20060015817A1 (en) 2004-07-15 2006-01-19 Giuseppe Fioretti Method to dynamically customize a web user interface
GB0416867D0 (en) 2004-07-29 2004-09-01 Ibm Automatic content completion of valid values for method argument variables
US20060100975A1 (en) * 2004-10-25 2006-05-11 Microsoft Corporation Strongly-typed object oriented GUI automation framework
US7490316B2 (en) * 2004-12-02 2009-02-10 International Business Machines Corporation Method and apparatus to implement adaptive scripting tool
US7571189B2 (en) 2005-02-02 2009-08-04 Lightsurf Technologies, Inc. Method and apparatus to implement themes for a handheld device
US7730448B2 (en) 2005-08-11 2010-06-01 Microsoft Corporation Layered type systems
US8473971B2 (en) 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
US7765519B2 (en) * 2005-12-16 2010-07-27 International Business Machines Corporation Efficient builds for installation software
US7958493B2 (en) 2006-01-20 2011-06-07 Kevin Edward Lindsey Type inference system and method
US8615743B2 (en) 2006-02-27 2013-12-24 Microsoft Corporation Adaptive compiled code
US7849451B2 (en) 2006-03-02 2010-12-07 Oracle America Inc. Dynamic delegation chain for runtime adaptation of a code unit to an environment
US8225294B2 (en) 2006-04-27 2012-07-17 Oracle America, Inc. Method and apparatus for expressing and checking relationships between types
US20080320453A1 (en) 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding
US8321836B2 (en) * 2007-06-21 2012-11-27 Microsoft Corporation Late bound programmatic assistance

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1577265A (zh) * 2003-07-23 2005-02-09 微软公司 用于可扩充编译器和工具基础结构的描述语言
JP2009053802A (ja) * 2007-08-24 2009-03-12 Toshiba Corp プログラム処理方法およびプログラム

Also Published As

Publication number Publication date Type
US8572591B2 (en) 2013-10-29 grant
CN102289384A (zh) 2011-12-21 application
US20110307869A1 (en) 2011-12-15 application

Similar Documents

Publication Publication Date Title
US6993751B2 (en) Placing exception throwing instructions in compiled code
US6704927B1 (en) Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading
US5999732A (en) Techniques for reducing the cost of dynamic class initialization checks in compiled code
US7320123B2 (en) Method and system for detecting deprecated elements during runtime
US6507946B2 (en) Process and system for Java virtual method invocation
US7373632B1 (en) System and method for dynamic generation of proxies for isomorphic interfaces
US20060212847A1 (en) Type checker for a typed intermediate representation of object-oriented languages
US6412108B1 (en) Method and apparatus for speeding up java methods prior to a first execution
US20040255268A1 (en) Systems and methods providing lightweight runtime code generation
US20050262513A1 (en) Modified computer architecture with initialization of objects
US6233725B1 (en) Method and apparatus to coordinate and control the simultaneous use of multiple just in time compilers with a java virtual machine
Leroy Java bytecode verification: an overview
US6918106B1 (en) Method and apparatus for collocating dynamically loaded program files
US20060130038A1 (en) Apparatus, system, and method for facilitating dynamic modification of existing software objects defined in a strongly-typed programming language
US20060242634A1 (en) Version adaptation interface for integration of different virtual machines
US6944846B2 (en) Algorithm for localization of a JAVA application using reflection API and a custom class loader
Soares et al. Distribution and persistence as aspects
US6003095A (en) Apparatus and method for demand loading a dynamic link library
US20030177480A1 (en) On demand, network accessible, run time compile server
US6349408B1 (en) Techniques for implementing a framework for extensible applications
US20060080680A1 (en) Platform independent dynamic linking
US20120084864A1 (en) System and method for a mobile cross-platform software system
US20040267804A1 (en) Hybrid system implementing distinct and co-existing application execution environments and methods for implementing the same
US20050216885A1 (en) Attribute-Based Component Programming System and Methodology for Object-Oriented Languages
US5761513A (en) System and method for exception handling in dynamically linked programs

Legal Events

Date Code Title Description
C06 Publication
C10 Entry into substantive examination
C41 Transfer of patent application or patent right or utility model
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150717

C14 Grant of patent or utility model
C41 Transfer of patent application or patent right or utility model