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

动态自适应编程制造技术

技术编号:6972981 阅读:186 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及动态自适应编程。创建和执行平台便携式代码。一种方法包括声明对象是程序中的动态对象。程序是所用静态语言编译的程序,不同之处在于动态对象在程序被编译时被排除在对对象的静态分析之外。动态对象包括对平台专用API的依赖调用。平台专用API在对其部署程序的经编译版本的一个或多个平台上是可用的,但是在对其部署程序的经编译版本的一个或多个其它平台上是不可用的。

【技术实现步骤摘要】

本申请涉及动态自适应编程,尤其涉及创建和执行平台便携式代码的方法。
技术介绍
计算机和计算系统已经影响了现代生活的几乎每个方面。计算机通常在工作、消遣、保健、运输、娱乐、家政管理等中都有涉猎。便携式程序(即可在多个平台上运行的程序)当其在特定平台上运行时通常需要执行平台专用指令。不同的平台表示软件所运行的环境或底层系统的不同,并可通过作为或具有不同设备、不同操作系统、或者甚至相同操作系统的不同版本来表征。作为源代码分发的便携式程序可例如用#ifdefs相当容易地实现这一点。#ifdefs是用于编译器的标记。 开发者为不同的平台提供多种版本的指令。编译器确定平台并从多个版本中选择适合该平台的代码。然后将所选择的代码编译成二进制代码。#ifdefs导致单个源代码文档和多个经编译二进制代码。然而,当二进制代码需要是便携式时,执行这种平台专用指令将困难得多。这对静态编译语言和具有加载时间验证的运行时环境尤其如此。静态编译语言是在编译时设法检测编程错误的语言。如果开发者尝试包括多个版本的指令,那么将产生错误,因为除了一个版本之外的所有版本将被编译器标记为错误。具体而言,编译器通常产生平台专用二进制代码,并将为其它平台编写的代码检测为错误。类似地,加载时间验证系统将尝试在运行时检查代码中的错误。用于其它平台的代码版本将被检测为错误。这些语言和运行时通常需要使用平台自适应层(PAL)来提供在所有目标平台中呈现的抽象,即使某些平台不支持这些抽象的有意义的实现。PAL可使用面向对象的继承来防止错误被检测出。具体而言,不同的库加载在不同的平台,使得不会为特定平台工作的代码版本也不被部署到该平台,从而不会有对平台专用API的不适当的调用。在开发者需要确保继承是适当的并且库被部署的情况下,PAL的实现是复杂的。在此要求保护的主题不限于解决任何缺点或仅在诸如上述环境中操作的各个实施方式。相反,提供该背景仅用以示出在其中可实践在此描述的部分实施方式的一个示例性

技术实现思路
一个实施方式涉及创建平台便携式代码的方法。该方法包括声明对象是程序中的动态对象。该程序是使用支持动态调用的静态语言编译的程序。声明对象为动态对象使得被声明为动态对象的对象在程序被编译时被排除在对对象的静态分析之外。动态对象包括对平台专用API的依赖调用。平台专用API在对其部署程序的经编译版本的一个或多个平台上是可用的,但是在对其部署程序的经编译版本的一个或多个其它平台上是不可用的。 该方法还包括将程序静态编译成平台便携式代码。然后将平台便携式代码部署至不同平台,并在不同平台上成功执行。将程序静态编译成平台便携式代码包括将动态对象排除在编译期间对程序中的未被声明为动态的其它对象执行的静态分析之外,作为该对象被声明为动态对象的结果。另一 实施方式包括执行平台便携式代码的方法。该方法包括访问从静态语言程序编译的经编译程序中包括的动态对象。动态对象被排除在经编译程序的编译期间的静态分析之外。动态对象包括用作代理对象的功能,代理对象被配置成在平台专用对象在运行时在执行经编译程序的平台上是可访问的情况下在运行时加载平台专用对象。该方法还包括测试代理对象,以确定平台专用对象是否成功加载。作为测试结果,该方法包括确定平台专用对象成功加载,并因此调用平台专用对象API。提供本
技术实现思路
是为了以精简的形式介绍将在以下具体实施方式中进一步描述的一些概念。本
技术实现思路
并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。另外的特征和优点将在以下的描述中阐述,并且部分可从该描述中显而易见,或者可以从此处的教示实践中习得。本专利技术的特征和优点可以通过在所附权利要求中特别指出的手段和组合来实现并获取。本专利技术的特征将从以下描述和所附权利要求书中变得完全显而易见,或者可通过如下所述对本专利技术的实践而获知。附图说明为了描述能够获得上述和其他优点和特征的方式,将通过参考附图中示出的各具体实施方式来呈现对以上简述的主题的更为具体的描述。应该理解,这些附图仅描绘了各典型实施方式,因此其不应被认为是对范围的限制,各实施方式将通过使用附图用附加特征和细节来描述并解释,在附图中图IA示出使用代理对象的对象图和确定在平台上是否支持功能的方法;图IB示出使用代理对象的对象图和确定在多个不同平台的平台上是否支持功能的方法;图IC示出使用代理对象的对象图和确定哪个平台正被使用的方法;图2示出创建平台便携式代码的方法;以及图3示出执行平台便携式代码的方法。具体实施例方式此处描述的某些实施方式使用静态语言中定义的动态对象。动态对象可包括对存在于某些平台中但不存在于其它平台中的对象的依赖调用。这可以出于多个不同理由来实现。例如,在某些实施方式中,某些平台可支持在其它平台上不支持的特定功能。或者,不同平台可支持相同功能,但可使用不同对象形式的机制来提供支持。通过在静态语言中使用动态对象,某些实施方式能够方便单个源代码/单个二进制代码解决方案,而不是单个源代码/多个二进制代码解决方案。通过这种方法,单个二进制代码可被分发至多个不同平台,由此减少对为多个不同平台创建、存储和传递多个二进制代码的需求。在编译时不静态地细查动态对象,因此静态语言编译器不会导致由于包括与给定平台不兼容的代码的动态对象而产生的错误,例如对不存在的对象的调用。具体而言,动态语言允许开发者创建在编译时不静态地细查的代码。相反,在运行时,如果在代码中做出不适当的调用,则程序将抛出异常。本质上,开发者可编码他们想要的任何事物,而不必担心非运行时编译器错误。因此,各实施方式可在静态语言代码中使用动态对象,使得在静态编译期间不细查动态对象。在此处所示的示例中,示出了各种替换方式。具体而言,一个实施方式包括“if supported(是否支持)”方法,该方法只在“if supported”调用中引用的对象存在于“if supported”方法在其上被调用的平台上时才完全运行。"if supported”方法可用于实施方式以实现在某些平台上功能上可用,而在其它平台上不可用。该情况的一个示例在图IA中示出。图IA示出执行对象映射形式的平台便携式代码。图IA示出调用第一对象102。第一对象102调用代理对象104,代理对象104是在静态编译便携式代码程序中的动态编译对象,如以下将要更详细解释的。代理对象104包括IsSupported(受到支持)方法106。该 IsSupported方法是对另一对象108的条件调用。该调用只在其它对象108在执行平台便携式代码的平台上可用且可执行时进行。如果其它对象108不可用,那么代理对象104(使用IsSupported方法)将用作确定对其它对象的调用是否安全的门,从而防止抛出运行时异常。通过使用多个“ifsupported(如果支持)”方法,各实施方式可支持具有类似功能的不同平台,而使用不同机制,如不同对象。该情况的一个示例在图IB中示出。图IB示出调用代理对象112的第一对象110。代理对象112是动态对象,它是静态编译的平台便携式代码的一部分(不同于以下将详细解释的动态对象)。代理对象包括IsSupported方法 114,它用作确定在代理对象112上调用其它方法是否安本文档来自技高网
...

【技术保护点】
1.一种计算环境中的创建平台便携式代码的方法,所述计算环境包括使用静态编译语言编写的程序,其中所述静态编译语言规定动态编译元素,所述方法包括:声明对象是程序中的动态对象(202),所述程序是所用静态语言编译的程序,其中声明对象为动态对象使得被声明为动态对象的对象在编译程序时被排除在对对象的静态分析之外,其中动态对象包括对平台专用API的依赖调用,平台专用API在将对其部署所述程序的经编译版本的一个或多个平台上是可用的,但是在将对其部署所述程序的经编译版本的一个或多个其它平台上是不可用的;以及将所述程序静态编译成平台便携式代码,所述平台便携式代码然后被部署至不同平台并在不同平台上成功执行(204),其中将所述程序静态编译成平台便携式代码包括将所述动态对象排除在编译期间对所述程序中的未被声明为动态的其它对象执行的静态分析之外。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:K·J·克瓦里纳W·哈格德
申请(专利权)人:微软公司
类型:发明
国别省市:US

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

1