编译时可解释代码检错的制作方法

文档序号:6570377阅读:229来源:国知局
专利名称:编译时可解释代码检错的制作方法
编译时可解释代码检错 背景背景和相关技术计算系统已经彻底改变了我们工作和游戏的方式。计算系统有各种各样 的形式,包括膝上型计算机、台式计算机、个人数字助理、电话甚至常规上不 与计算系统相关联的设备,诸如例如冰箱和汽车。计算系统甚至可包括经由网 络互连的多个组成计算系统。因此,某些计算系统小到足以放在手掌里,而其 他计算系统则可扩展到全球的许多地方。无论其物理形式是怎样的,计算系统通常都由硬件和软件组成。硬件最 基本地包括至少一个处理器和存储器。软件包括可包含在存储器或存储中、且 可由处理器访问和执行以引导计算系统的总体功能的指令。因此,软件在启用 和引导计算系统的功能方面是至关重要的。软件一开始通常使用"源代码"来起草,源代码使用更加人类可读的编程 语言表示软件的所需功能。在软件执行之前,软件被转换成计算系统的处理器 可读的形式。存在两种可引起这样的转换的基本进程,即编译和解释。在编译或解释时,编译器(编译的情况中)或解释器(解释的情况中)访 问根据编程语言起草的源代码。如果源代码遵循编程语言且不包括明显的功能 错误,则编译器或解释器生成可由计算系统执行的可执行代码。如果源代码包 括错误,则编译和解释功能通常生成允许作者对源代码进行改正的出错消息。 编译通常在可执行代码要运行之前很久就进行。编译器可仅生成可执行文件, 后者可在稍后在某一适当时间执行。而另一方面,解释在运行时进行,刚好在 可执行代码生成之前。有时,可解释代码被嵌入在可编译代码内。在这种情况中,可编译代码被 编译成可执行文件,但可解释代码在运行时之前不被解释。因此,如果在可解 释代码中存在错误,则整个代码的功能可能存在风险。简要概述本发明实施例的各方面涉及便于在可解释代码的运行时之前在可解释代 码中检错。在访问可解释代码之后,可解释命令的相应的构造规则用于制定遵 循构造规则的可解释命令的可编译可链接表示。可生成在编译时创建并填充链 接至可编译可链接表示的对象的源代码。如果发生编译错误,则如有需要这些 错误可在运行时之前被修补。如果不存在编译错误,则可执行对象从而调用可 解释命令。因此,代替等待直到运行时来确定可解释命令的调用是否会发生错 误,可编译相应的可编译代码以在运行时之前发现任何错误。提供本概述以便以简化形式介绍将在以下详细描述中进一步描述的一些 概念。该概述不旨在标识所要求保护的主题的关键特征或本质特征,也不旨在 用于帮助确定所要求保护的主题的范围。附图简述为了描述可获取本发明的上述和其他优点和特征的方式,将通过引用附图 中示出的本发明的特定实施例来呈现以上简要描述的本发明的更具体描述。可 以理解这些附图仅描述本发明的典型实施例,从而不被认为是对其范围的限 制,本发明将通过使用附图用附加特征和细节来描述和说明,在附图中-

图1示出了可在其中釆用本发明的原理的合适的计算环境; 图2示出了根据本发明原理的一方面的其中编译代码生成器基于可解释 代码的构造规则制定可解释代码的可编译可链接表示的环境,且该可编译可链 接标识用于在编译时而不必在运行时标识调用可解释命令的可编译标识时的 任何错误;以及图3示出了根据本发明的一方面的用于便于在可解释代码的运行时之前 在可解释代码中进行检错的方法的流程图。详细描述本发明涉及便于在可解释代码的运行时之前在可解释代码的调用中检错。 首先,将参考图l描述本发明的原理可在其中操作的示例计算系统。然后,将 参考后续附图进一步详细描述本发明的原理。本发明的实施例可以包括含有各 种计算机硬件的专用或通用计算机,这将在以下做出进一步讨论。图1示出可用于实现本发明的特征的示例计算系统100的示意图。所述计 算系统只是这样的一个合适的计算系统的示例,而并不旨在对本发明使用范围 或功能提出任何限制。也不应该把本发明解释为对图1中示出的任一组件或其 组合有任何依赖性或要求。计算系统现在越来越多地采用各种形式。计算系统可例如是手持式设备、 装置、膝上型计算机、台式计算机、大型机、或分布式计算系统。在本描述以 及权利要求书中,术语"计算系统"被广义地定义为包括包含至少一个处理器 以及其上能含有可由处理器执行的计算机可执行指令的存储器的任何设备或 系统(或其组合)。存储器可采取任何形式,且可取决于计算系统的本质和形 式。计算系统可在网络环境上分布,且可包括多个组成计算系统。参考图l,在其最基本配置中,计算系统100—般包括至少一个处理单元102和存储器104。存储器104可以是易失性、非易失性、或两者的某种组合,且表示一个或多个物理计算机可读介质。易失性存储器的示例包括随机存取存储器(RAM)。非易失性存储器的示例包括只读存储器(ROM)、闪存等。 术语"存储器"也可在此处用来指示非易失性海量存储。这样的存储可以是可 移动或不可移动的,且可包括(但不限于)PCMCIA卡、磁盘和光盘、磁带等。如此处所使用的,术语"模块"或"组件"可指的是在计算系统上执行的 软件对象或例程。此处描述的不同的组件、模块、引擎和服务可被实现为在计 算系统上作为协议的一部分执行的对象或进程(例如,作为分开的线程)。尽 管此处描述的系统和方法可用软件实现,但用硬件以及软件和硬件的组合的实 现也是可能的且已被想到。在以下描述中,参考由一个或多个计算系统执行的动作描述本发明的实施 例。如果这样的动作用软件实现,则相关联计算系统中执行该动作的一个或多 个处理器响应于执行了计算可执行指令而引导计算系统的操作。这样的操作的示例涉及对数据的操纵。计算机可执行指令(和所操纵的数据)可被存储在计 算系统100的存储器104中。计算系统IOO也可包含允许计算系统IOO例如在网络IIO上与其他计算系 统通信的通信信道108。通信信道108是通信介质的示例。通信介质一般具体 化成诸如载波或其它传输机制等经调制数据信号中的计算机可读指令、数据结 构、程序模块或其它数据,并且包括任何信息传递介质。作为示例而非限制, 通信介质包括有线介质,诸如有线网络或直接接线连接,以及无线介质,诸如 声学、无线电、红外线和其它无线介质。如此处所用的术语计算机可读介质既 包括存储介质又包括通信介质。本发明的范围内的实施例也包括用于携带计算机可执行指令或数据结构 或其上储存有计算机可执行指令或数据结构的计算机可读介质。这样的计算机 可读介质可以是可由通用或专用计算机访问的任何可用介质。作为示例而非限 制,这样的计算机可读介质可包括RAM、 ROM、 EEPROM、 CD-ROM或其他 光盘存储、磁盘存储或其他磁存储设备、或可用于携带或存储计算机可执行指 令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何 其他介质。当通过网络或另一通信连接(或者硬连线、无线、或硬连线和无线 的组合)向计算机传输或提供信息时,计算机将该连接适当地视为计算机可读 介质。因此,任何这样的连接被适当地称为计算机可读介质。以上的组合也应 包括在计算机可读介质的范围之内。计算机可执行指令例如包括,使通用计算机、专用计算机、或专用处理设 备执行某一功能或某组功能的指令和数据。尽管用结构特征和/或方法动作专用 的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上 述特定特征或动作。相反,上述特定特征和动作作为实现权利要求的示例形式 公开。图2示出了其中本发明的原理可操作的环境200。环境200可以但不必在 图1的计算系统100内实现。如果是这样,则环境200可包括在系统存储器中 实例化的对象和数据结构和/或可以是位于存储中的功能性计算机可执行指令。可链接库生成器210可以是硬件、软件或硬件和软件的组合。可链接库生 成器210是访问可解释代码201A,并使用可解释代码201A的相关联的构造规则202A执行可解释代码的可编译可链接表示211A(见可编译可链接库211A) 的组件。在本描述和权利要求书中,"可链接库"是对象在编译时可链接至的 一个或多个类定义表示的任何组。可链接库生成器210可自动制定可编译可链 接库211A而无需人类干预,或可允许用户干预来允许人参与执行过程。可链 接库生成器201可包括一个或多个模块和/或可包括与可链接库生成无关的模 块部分。图3示出了根据本发明原理的一方面用于便于在可解释代码的运行时之 前在可解释代码中进行检错的方法300的流程图。由于方法300可在环境200 中执行,因此将频繁参考图2的环境200来描述图3的方法300。首先,可链接库生成器210访问可解释命令(动作301)。参考图2,可 解释命令可在可解释代码201中表示。可解释代码可在网络上、从本地存储、 从系统存储器或从其任何组合访问。可解释代码可能在近期或在更遥远的过去 构造,且可由人创作或由计算系统自动生成。现在将给出可解释命令的两个示例,将在说明书全文中使用这两个示例以 便阐明本发明的更广义的原理。在第一示例中,后文中称之为"第一示例", 可解释命令采取以下形式Set-location -path "c:\windows"该可解释命令可使用命令行工具来许可。命令在导航目录结构时设置当前 位置。该命令将当前目录设置设置在c:\windows目录。然而,可解释命令代替 被输入到命令行工具,而可作为参数通过程序输入到可编译代码。例如, Set-location (设置位置)命令可如下通过程序嵌入到ShellExecute (命令解释程序执行)命令中ShellExecute("Set-location -path 'c:Vwindows,")后文中被称为"第二示例"的第二示例考虑表示为命令行输入的以下可解释代码Get-item -path "c:\windows"命令得到在路径属性中指定的位置处的所有文件的清单,在该情况中,为 "c:\windows"。然而,再一次,可解释命令代替被输入到命令行工具,而可 如下作为参数通过程序输入到可编译代码She胆xecute("Get-item -path 'c:\windows,,,常规上,无论可解释代码是否被输入到命令行工具以便立即执行,或无论 可解释命令是否通过程序嵌入到其他源代码(例如,ShellExecute("..."))内, 可解释代码本身的结构在运行时之前不被评估,而恰好在执行可解释代码之前 才评估。这是可解释代码的本质。相应地,如果可解释代码中存在任何错误, 则即使可解释代码被嵌入到其他可编译源代码中,它们在运行时之前也将不会 被发现。根据本发明的原理,制定可解释代码本身的可编译可链接表示。然后可将 源代码制定成在编译时创建并填充基于可编译可链接表示的对象。所编译和链 接的对象在执行时调用相应的可解释注释。如果源代码的编译失败,则调用可 解释命令的源代码中更有可能存在错误。因此如有需要,可在运行时之前修补 这些错误。回来参考图2和3,除访问可解释命令201A (动作301)以外,编译代码 生成器210也访问对应于可解释命令的构造规则(动作302)。例如,构造规 则202A可对应于可解释命令201A。其他构造规则202B可对应于其他可解释 命令201B。例如,对第一示例"Set-location —path 'c:\windows,",可访问"Set-location" 命令类别的构造规则。这些构造规则可指定命令的标题(例如,"Set-location") 以及列出命令的任何属性的适当标题(在该情况中为"path (路径)"),可 能有属性是强制还是任选的,什么是可接受的值类型和/或值(例如,文本串将 是属性"路径"的可接受值类型),以及任何其他构造规则。构造规则可用人类可读形式表示,在这种情况中构造规则可由人来评估。或者,构造规则可用 计算机可读形式表示,诸如用遵循计算系统理解的模式的可扩展标记语言(XML)文档表示。类似地,对第二示例"Get-item-path'c:\windows,",可访问"Get-item" 命令类别的构造规则。这些构造规则可指定命令的标题(例如,"Set-location") 以及列出命令的任何属性的适当标题(在该情况中为"path (路径)"),可 能有属性是强制还是任选的,什么是可接受的值类型和/或值(例如,文本串将 是属性"路径"的可接受值类型)等。再一次,构造规则可由人解释和/或可由 计算机解释。回来参考图2和3,可链接库生成器然后使用构造规则来制定遵循构造规 则的可解释命令的可编译可链接表示(动作303)。例如,在图2中,可链接 库生成器210生成可编译可链接库211A。这可按各种方式执行。例如,在人 工方法中,人类作者可评估构造规则,并使用可链接库生成器210作为创作工 具来制定可解释代码的可编译可链接表示。在自动化方法中,可链接库生成器 210本身可执行评估和创作而无需人类干预。一旦完成之后,根据与可解释命令相关联的结构化规则构造可编译可链接 表示。参考图3,然后可编译可解释代码的可编译可链接表示(动作304), 即使是在执行可解释代码之前的某个时间。在运行时之前的任何时刻,可制定(动作305)在编译(动作306)时制 定并填充基于可解释代码的可编译可链接表示并链接至该表示的对象的代码 (例如,源代码)。例如,如果可编译可链接表示是类定义,则源代码可引导 作为由类定义所定义的类的实例的对象的制定和填充。参考图2,编译代码生 成器220生成可编译代码221,后者然后使用编译器230编译来生成编译报告 231。源代码可由计算机自动生成,或可响应于用户输入生成。如果编译结果未检测到编译错误,则可解释代码更有可能是结构合理的, 且在执行时将较不可能导致运行时错误。因此,在之后的任何时刻,可执行对 象从而调用可解释命令。如果编译结果检测到编译错误(动作307),则创建 调用可解释命令的对象的源代码可被更改以纠正错误(动作308)。相应地, 代替等待直到运行时来检测和纠正可编译代码中或未嵌入可编译代码中的错误,可在运行时之前检测任何错误。图3的方法300可对由省略号201B、 202B 和211B表示的多个命令、多个构造规则、多个可解释代码的可编译可链接表 示执行。作为其中可解释命令的可编译可链接表示是类定义的特定示例,类定义的 参数可通过取可解释命令的参数并在类定义中设置同一名称的属性来生成。可 将调用方法添加到类定义,它取已被设置的类属性并使用属性值作为类相应参 数的自变量来运行命令。类可被实例化以形成对象,将参数属性设为对应于在 可解释命令中提供的值的值。然后,可调用该调用方法。现在参考其中将可解释命令"Set-location -path 'c:\windows'"提供给可 编译代码生成器210的第一示例。可编译代码生成器可生成如下用0#骨架代 码表示的类Public class SetLoeationCommandPublic string Path{get{ .. } set {if(!IsValidPath(value》{ throw ArgumentExceptionElse {...}Public object Invoke(){ ...}生成在执行时调用可解释命令"Set-location -path 'c:Windows,"的对象的源代码可如下出现在第一示例中SetLocationCommand command = new SetLocationCommand(》 command.path = "c:\windows"; object result = command.Invoke();调用方法在被调用时根据所生成的可编译可链接表示执行可解释代码,如 有结果并返回结果。如果源代码试图设置不存在的参数,则将存在编译时错误。例如,以下第 二行在编译器运行时将导致失败,因为"FullName (全名)"不是类 "SetLocationCommand (设置位置命令)"的已定义的属性。SetLocationCommand command = new SetLocationCommand(); command.FullName = "c:\windows"; object result = command.Invoke();在第二示例中,将可解释命令"Get-item -path 'c:\windows,"转化成如 由伪代码表示的以下类Class GetltemCommandString Path {...} IEnumerate Invoke {...}可生成在编译和执行时实例化类的对象实例的源代码。例如,源代码可如下出现GetltemCommand = newGetItemCommand(》 GetltemCommand.Path = "c:\windows";GetltemCommand.Invoke;在编译时,可知道相应的对象将在运行时更可能成功地执行与命令 "Get-item-path'c:\windows'"相关联的可解释命令,因为源代码被编译并被 链接至定义相关联可解释命令的结构的类。现在假设,起草者改为起草以下源 代码GetltemCommand = newGetltemCommandO; GetltemCommand,ath = "c:\windows"; GetltemC ommand .Invoke;此处用户仅少打了 "path"的"p"。当编译该源代码时,编译器将识别"GetltemCommand (获得项目命令)"类不具有"ath"属性,从而使编译失败。相应地,在编译时之后,源代码中的错误可在运行时之前纠正。本发明可具体化为其他具体形式而不背离其精神或本质特征。所述实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附 权利要求书而非前述描述指示。落入权利要求书的等效方式的含义和范围内的 所有改变应被权利要求书的范围涵盖。
权利要求
1.一种用于便于在可解释代码的运行时之前对所述可解释代码进行检错的计算机实现的方法,所述方法包括以下动作访问可解释命令的动作;访问对应于所述可解释命令的构造规则的动作;以及使用所述构造规则来制定遵循所述构造规则的所述可解释命令的可编译可链接表示的动作。
2. 如权利要求1所述的计算机实现的方法,其特征在于,所述可解释命令 的所述可编译可链接表示包括遵循所述构造规则的对象的类定义。
3. 如权利要求1所述的计算机实现的方法,其特征在于,还包括以下动作: 制定在编译时创建并填充链接至所述命令的可编译可链接表示的对象的源代码的动作。
4. 如权利要求3所述的计算机实现的方法,其特征在于,还包括以下动作编译所述源代码从而创建并填充链接至所述命令的可编译可链接表示的 对象的动作。
5. 如权利要求4所述的计算机实现的方法,其特征在于,还包括以下动作:作为所述编译动作的结果检测编译错误报告的动作。
6. 如权利要求5所述的计算机实现的方法,其特征在于,还包括以下动作:作为所述编译错误报告的结果更改所述可解释命令的动作。
7. 如权利要求1所述的计算机实现的方法,其特征在于,所述构造规则定义包括所述命令的规则类别的结构化规则。
8. 如权利要求7所述的计算机实现的方法,其特征在于,所述构造规则是 第一构造规则,所述规则类别是第一规则类别,且所述命令是第一命令,所述 方法还包括以下动作访问处于不同于所述第一规则类别的第二规则类别中的第二可解释命令 的动作;访问对应于所述第二可解释命令的第二构造规则的动作;以及使用所述第二构造规则来制定遵循所述第二构造规则的所述第二可解释 命令的第二可编译可链接表示的动作。
9. 如权利要求8所述的计算机实现的方法,其特征在于,所述第二可解释 命令的所述第二可编译可链接表示包括遵循所述第二构造规则的第二对象的 第二类定义。
10. 如权利要求8所述的计算机实现的方法,其特征在于,还包括以下动作制定在编译时创建并填充链接至所述命令的第二可编译可链接表示的对 象的源代码的动作。
11. 一种包括其上含有计算机可执行指令的一个或多个计算机可读介 质的计算机程序产品,所述指令被构造成在由计算系统的一个或多个处理器执行时,所述一个或多个处理器使所述计算系统执行便于在可解释代码的运行时 之前对所述可解释代码进行检错的方法,所述方法包括以下动作-访问可解释命令和对应于所述可解释命令的构造规则;以及 使用所述构造规则制定所述可解释命令的可编译可链接表示。
12. 如权利要求11所述的计算机程序产品,其特征在于,所述一个或 多个计算机可读介质各自是物理系统存储器和/或物理存储介质。
13. 如权利要求11所述的计算机程序产品,其特征在于,所述一个或多个计算机可读介质是可移动存储介质。
14. 如权利要求11所述的计算机程序产品,其特征在于,所述可解释 命令的所述可编译可链接表示包括遵循所述构造规则的对象的类定义。
15. 如权利要求11所述的计算机程序产品,其特征在于,所述可解释 命令的所述可编译可链接表示包括被配置成制定和填充从所述类定义得到的 对象的源代码。
16. 如权利要求15所述的计算机程序产品,其特征在于,所述方法还包括以下动作制定在编译时创建并填充链接至所述命令的可编译可链接表示的对象的 源代码的动作。
17. 如权利要求16所述的计算机程序产品,其特征在于,所述构造规则定义包括所述命令的规则类别的结构化规则。
18. —种计算系统,包括 一个或多个处理器;其上含有计算机可执行指令的一个或多个物理计算机可读介质,所述指令 被构造成在由计算系统的一个或多个处理器执行时,所述一个或多个处理器使 所述计算系统在访问可解释命令和构造规则时使用所述构造规则制定所述可 解释命令的可编译可链接表示。
19. 如权利要求18所述的计算系统,其特征在于,所述可解释命令的所 述可编译可链接表示包括遵循所述构造规则的对象的类定义。
20. 如权利要求18所述的计算系统,其特征在于,所述可解释命令的 所述可编译可链接表示可用于制定在编译时被配置成制定和填充链接至所述类定义的对象的源代码-
全文摘要
便于在可解释代码的运行时之前对可解释代码检错。在访问可解释代码之后,可解释命令的相应的结构化规则用于自动制定遵循构造规则的可解释命令的可编译可链接表示。然后可制定在编译时链接至可解释命令的可编译可链接表示的源代码。如果存在编译错误,则可在编译时而非等待直到运行时才发现这些错误。另一方面,如果不存在编译错误,则可执行经编译的对象从而调用可解释命令。
文档编号G06F17/00GK101336413SQ200680051764
公开日2008年12月31日 申请日期2006年12月28日 优先权日2006年1月25日
发明者J·D·琼斯, J·P·斯诺弗 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1