经定性化注释的代码
背景
应用程序、程序、函数、以及其它可编程和可执行代码的程序集(assemblage)通常是为第三方(即,“客户”)的使用而编写的。因此,有效代码是以一种启用第三方使用情景并且满足第三方期望的方式来编写的。
概述
由于应用程序、程序、函数、以及其它可编程和可执行代码的程序集被模块化,所以可以对与至少一个这样的代码模块相关联的数据进行注释以便提供关于模块使用的定性化向导。
附图简述
本描述参考以下附图。
图1示出通过网络与实现产生并利用经注释的代码中的至少一种的示例技术的设备进行通信的设备。
图2示出用于实现产生并利用经注释的代码中的至少一种的示例性技术的执行环境的示例。
图3示出关于产生经注释的代码的一个示例的工具的示例数据流。
图4示出关于利用经注释的代码的工具的示例数据流。
详细描述
此处描述用于产生经注释的代码并使用该注释以提供关于代码使用的向导的工具、系统和方法。此外,有关对代码的至少数部分进行注释并使用该注释的描述可涉及用于将代码的数部分的预期使用告知客户的工具、系统、过程、指令、技术和例程。即,通过采用表示例如代码的相应部分的功能性意图的角色或分类来注释代码的至少一些部分,可允许客户编写不太可能被破坏或崩溃的高效的应用程序、程序、函数、或其它可编程和可执行代码的程序集。此外,这种工具、系统和过程可在网络环境中的一个或多个设备或节点中实现。
此处描述的“模块”可表示可使用公共物理和/或逻辑资源的诸如方法、类、DLL(动态链接库)、框架等独立实体。
此处描述的“程序集”可表示代码的部署单元。
图1示出在其中实现生成经注释的代码并利用该注释来提供关于代码使用的向导的示例技术的示例网络环境100。然而,该示例技术并不局限于网络环境。该技术可包括,但不限于,此处描述的与经定性化注释的代码120相关联的工具、方法(例如,技术)和系统。在图1中,客户机设备105、服务器设备110以及“其它”设备115可以通过网络125以通信方式彼此耦合;并且此外,客户机设备105、服务器设备110以及“其它”设备115中的至少一个能够实现上述技术。
客户机设备105可表示各种已知计算设备中的至少一个,包括能够实现产生和使用经定性化注释的代码120中的至少一个的示例技术的台式个人计算机(PC)、工作站、大型计算机、因特网设备、机顶盒或游戏控制台。客户机设备105还可表示能够通过有线和/或无线链路与网络125相关联的至少一个设备,这些设备包括移动(即,蜂窝)电话、个人数字助理(PDA)、膝上型计算机等。此外,客户机设备105可按各种数量和/或其组合来表示上述客户机设备。“其它”设备115也可由上述客户机设备105的示例中的任一个来实施。
服务器设备110可表示能够根据产生和使用经定性化注释的代码120中的至少一个的至少一个实现向客户机设备105或“其它”设备115提供各种数据和/或功能中的任何一种的任何设备。数据可以公共可获得或者受限制的,例如,仅限于某些用户或只有当支付了适当的订阅费或许可费时才可用。服务器设备110可以是网络服务器、应用程序服务器、刀片服务器或其任意组合中的至少一个。通常,服务器设备110可表示作为内容源的任何设备,而客户机设备105可表示通过网络125或者以离线方式接收这样的内容的任何设备。然而,根据此处描述的示例实现,客户机设备105和服务器设备110可互换地成为网络环境100中的发送节点或接收节点。“其它设备”还可由服务器设备110的上述示例中的任何一个来实施。
“其它”设备115可以表示根据此处描述的一个或多个示例技术的能够开发和/或使用经定性化注释的代码120的任何另外的设备。即,“其它”设备115可以表示能够采用角色或分类对至少一部分代码进行注释的设备,其中该角色或分类指示例如代码的相应部分的功能性意图和/或根据所赋予的角色向客户提供关于该部分代码使用的向导。因此,“其它”设备115可以是在其上实现了操作系统、解释器、转换器、编译器、或运行时执行环境中的任何一个的计算或处理设备。这些示例并不意在以任何方式为限制性的,并且因此,不应该以那种方式来解释。
网络125可以表示包括有线和/或无线网络等各种常规网络拓扑和类型中的任何一种。网络125还可采用包括公共和/或专用协议等各种常规网络协议中的任何一种。网络125可包括(例如)因特网以及诸如802.11系统等一个或多个局域网(也被个别地称为“LAN”),或者规模更大一点的广域网(即,“WAN”),或者诸如蓝牙等个人区域网(即,PAN)中的至少一些部分。
设备105、110及115中的至少一个设备中的计算机体系结构通常按照硬件与软件来定义计算平台。用于计算设备的软件基于功能被归类成组,这些组包括硬件抽象层(或者称为“HAL”)、操作系统(或者称为“OS”)以及应用程序。
运行时执行环境可驻留在OS与应用程序、程序、函数、或其它代码的程序集之间。运行时执行环境可用作一个空间,在该空间中,应用程序、程序、函数、或其它代码的程序集可在处理设备105、110和115中的一个或多个设备上执行具体任务。更具体地,运行时执行环境可通过向在包括服务器、台式计算机、膝上型计算机、和移动处理/通信设备等范围不断增加的处理设备105、110和115上运行的应用程序提供抽象层和服务并进一步向该应用程序提供包括存储器管理及其配置的能力,来提高在这些处理设备上执行应用程序、程序、函数、或其它代码的程序集的可靠性。
运行时执行环境可用作编程和执行平台中的至少一种。作为编程平台,运行时执行环境可将以多种计算语言中的一种语言编写的一个或多个目标应用程序、程序、函数、或其它代码的程序集编译为中间语言(下文称“IL”)或字节代码。IL通常独立于平台,并且中央处理单元(下文称“CPU”)执行IL。事实上,IL是比许多CPU机器语言更高级的语言。
作为执行平台,运行时执行环境可将已编译的IL解释成本机机器指令。运行时执行环境可以采用解释器或者编译器(例如,“即时(just-in-time)”,或称JIT编译器)来执行这样的指令。不管怎样,接着,本机机器指令可被CPU直接执行。由于IL是独立于CPU的,因此只要在任何CPU平台上运行的OS主宿适当的运行时执行环境,IL即可在该CPU平台上执行。
或者,应用程序、程序、函数、或其它代码的程序集中的至少数部分可作为本机映像文件在运行时执行环境中被预编译和安装,由此绕开了JIT编译所需要的CPU消耗。有效的是,预编译部分是以IL格式(例如,程序集、方法或类型)而不是以本机平台执行格式分发的软件组件。这种预编译IL的源可被置于非托管执行环境中或在设备105、110和115中的同一个或不同的设备上的运行时执行环境的单独实现中。该源可在与该预编译IL对应的应用程序、程序、方法、函数或其它可编程和可执行代码的程序集的安装时期间或之前部署预编译IL。
不管怎样,在其中实现生成和/或利用经定性化注释的代码120的运行时环境的示例包括:Visual Basic运行时环境;用于运行例如
例程的
虚拟机运行时环境;或在执行一调用例程之前将例如Microsoft.Net
TM应用程序编译成机器语言的公共语言运行库(CLR)。然而,该运行时环境的列举只是提供示例而已。此处描述的示例技术不仅仅局限于这些托管执行环境。尤其是,由于可在测试环境和/或非托管执行环境内实现一个或多个示例,因此示例实现不仅限于托管执行环境。
被编译为IL的应用程序、程序、函数、或其它代码的程序集可被称为“托管代码”,这就是运行时执行环境也可被称为“托管执行环境”的原因。注意的是,不采用运行时执行环境来执行的代码可被称为本机代码应用程序。
图2示出在其中实现用于开发并利用经定性化注释的代码120(见图1)的技术的运行时执行环境的示例。
根据至少一个示例实现,运行时执行环境200可帮助用于计算机设备平台的托管代码的执行。托管代码可被认为是一组核心应用程序开发技术的一部分,并且还可被视为为在运行时执行环境200上执行而被编译并加载以便向计算设备平台提供对应的服务的应用程序、程序、函数、以及其它可编程和可执行代码的程序集。另外,运行时执行环境200可将解释级的托管代码翻译成可被代理并随后由处理器执行的指令。或者,托管代码可通过解释器或编译器,或一种被设计成作为本地映像在安装时运行的编译器来执行。运行时执行环将200的框架还可提供被视为用于托管应用程序的软件构件块的类库。
运行时执行环境200可提供原本期望从内核获得的至少部分功能,取决于设备105、110和115中(见图1)的一个特定设备的资源约束,计算设备平台可能有或没有该至少部分功能。因此,运行时执行环境200的至少一个示例可实现以下功能:输入/输出(下文称“I/O”)例程管理、编译、存储器管理、以及服务例程管理。因此,运行时执行环境200可包括I/O组件205、编译器210、至少一个存储器管理组件215、服务例程管理组件220、以及执行组件225。这些将在下面进一步详细描述的组件仅作为示例提供,它们并不意在局限于运行时执行环境200的任何特定实现,并且不应该作这样的推断。因此,可以在运行时执行环境200的示例的各种组合及其配置中实现该组件。
运行时执行环境200的I/O组件205可提供对物理资源(例如,处理器和外围设备)以及逻辑资源(例如,驱动程序,或按特定方式划分的物理资源)的同步或异步访问中的至少一种。更具体地,I/O组件205可以为运行时执行环境200提供稳健的系统吞吐量并且进一步流线化从中发起I/O请求的应用程序、程序、函数、以及其它可编程和可执行代码的程序集的执行。
编译器210可表示运行时执行环境200中可将已编译的IL解释为本机机器指令以便在运行时执行环境200中执行的组件。此外,根据开发和使用经定性化注释的代码120的技术的至少一个替换实现,编译器210可动态地探测与应用程序、程序、函数、以及其它可编程和可执行代码的程序集相关联的代码模块的行为,以便进行剖析/记录以及各种其它目的。代码模块可以或不能被加载到运行时执行环境200中。如果代码模块被加载到运行时执行环境200中,则剖析可包括记录或以其他方式跟踪相应的代码模块与运行时执行环境200中的一个或多个组件之间的交互。相应的代码模块与运行时执行环境200中的特定组件之间的这种交互包括接收和发送数据、参数以及状态。剖析可以在不触及或影响代码模块的可执行部分的情况下来执行,并且可以在相对于执行路径的可执行部分的执行的编译时、初始运行时或其之后的任何时候来执行。
加载器215可表示在需要时可被调用以定位和读取程序集的程序集管理器。尽管非托管执行环境(即,OS)的至少一个实现可在其中包括加载器325,但加载器325可位于执行环境200中。加载器215可在部署或安装期间存放预编译的IL,以将其加载到运行时执行环境200中。因此,根据运行时执行环境200的至少一个替换实现,加载器215可有效地用作将预编译的IL加载到运行时执行环境200中去的入口点。
存储器管理组件220可以被称为实现无用信息收集的“无用信息收集器”。无用信息收集可被视为托管代码执行环境的一个稳健特征,通过无用信息收集,如果在对存储器堆的清扫或扫描之后一个对象被确定为不会再被任何应用程序、程序、函数、或其它代码的程序集使用,则该对象被自动释放(即解除分配)。由存储器管理组件220实现的进一步功能可包括:在计算设备平台上运行的各任务中,管理有限易失性RAM(即,存储器堆)存储的一个或多个邻接块或存储器的一组邻接块;向在该计算设备平台上运行的至少一个应用程序、程序、函数、以及其它可编程和可执行代码的程序集分配存储;根据应用程序、程序、函数、或其它代码的程序集中的至少一个的请求释放存储器的至少数部分;以及防止应用程序、程序、函数、或其它代码的程序集中的任何一个入侵性地访问已经被分配给其它应用程序、程序、函数、或其它代码的程序集中的任何一个的存储空间。
服务例程管理器225可作为应用程序支持层的至少一部分被包括,以便为与计算设备平台相关联的物理和逻辑资源提供服务功能。开发和/或使用经定性化注释的代码120的示例技术(例如,工具、方法和系统)可由服务例程管理器225来管理。即,这些技术或者单个地或者组合在一起由编译器210(如以上所引用的)、服务例程管理器225、或运行时执行环境200中的某些其它组件根据这些技术的各种替换实现来实现。服务例程管理器225可以在不触及或影响代码模块的可执行部分的情况下在相对于代码模块的可执行部分的执行的编译时、初始运行时或在其之后的任何时候起此作用。
执行组件230可允许执行计算设备平台的托管代码。更具体地,对于开发和/或使用经定性化注释的代码120的技术的实现而言,执行代码230可用作运行时执行环境200中的一个示例性组件,该示例性组件可实现用于在代码模块的可执行部分的执行期间的编译时、初始运行时或在其之后的任何时候对一个或多个代码模块进行注释和/或解释的工具、系统和过程中的一个或多个。
图3示出实现一个或多个与经定性化注释的代码120(见图1)相关联的示例技术的示例数据流300。更具体地,经定性化注释的代码120是被赋予了一个原型角色或分类的代码,该原型角色或分类与特定的代码模块的至少一个定性化的性能特征有关。这种定性化的性能特征可包括该特定的代码模块的功能性意图。通过指示“功能性意图”,该角色或分类可描述在其中适合使用特定代码模块的一个或多个上下文,而不是描述其精确的功能。不管怎样,对这些性能特征的参考仅作为非限制性示例来提供。定性化的安全特性还可用作将角色或分类赋予相应的代码模块的至少一部分基础。
此外,经定性化注释的代码120可以是由运行时执行环境200编译或为运行时执行环境200预编译的托管代码。不管怎样,如果不是被明确地预期的话,可以预见相应的代码模块的可能的性能相关故障,并因此规避到一个期望的程度。
为此,经定性化注释的代码120可提供具稳健性的广义向导。即,通过提供定性化向导,而不是定量化向导(由此对应于相应的代码模块的严格规则必须随代码的任何修订而被修改),对应于经定性化注释的代码120的角色或分类可允许对代码的改变并因此可用作规定性向导而不是禁止性向导。
此外,赋给经定性化注释的代码120的相应模块的相应角色或分类所提供的总向导可指示代码120可调用的优选方法、代码120可引发的行为、代码120可能拥有的依赖性,或者甚至指示基于诸如圈复杂度(cyclomatic complexity)等复杂度参数的指定的复杂程度。当然,这种向导仅作为示例提供,以用来说明编程因素的广泛的范围,这些因素受赋给经定性化注释的代码120的角色或分类的影响。
不管怎样,在以下描述中,各种操作将被描述为由与代码注释工具315相关联的组件来执行。有关这些组件中的任何一个特定组件所描述的操作可由该组件自身来执行、组合其它与该工具相关联的组件执行、或由该特定组件与运行时执行环境200(见图2)中的一个或多个组件协作执行。此外,代码注释工具315的每个组件的操作可由一个或多个处理器来执行,并可单独或组合地实现为硬件、固件或软件。
代码注释工具315的示例实现可采用离线方式与运行时执行环境200中的任何组件分开实现。然而,代码注释工具315的至少一个实现可单独或一同组合地包含编译器210的任何一部分、服务例程管理器220、或运行时执行环境200的某些其它组件。在这种实现中,可由执行组件325来执行或处理代码注释工具315。
模块305可表示对应于根据例如运行时执行环境200中的执行组件230来执行的应用程序、程序、函数、或其它代码的程序集的一个或多个可执行指令模块。更具体地,模块305可表示诸如方法、类、DLL(动态链接库)、框架等实体。
代码310可表示与模块305相关联的应用程序编程接口(以下可替换地被称为“API”)。更具体地,API 310可视为被类所展示的并且被应用程序、程序、方法、函数、或其它代码的程序集用来指引运行时执行环境200或甚至是操作系统的过程执行的一个或多个方法或例程。
代码注释工具315可表示一个多功能工具,该工具可以能够根据合适的角色或分类帮助对对应于应用程序、程序、函数、或其它代码的程序集的代码模块进行注释;根据相应的模块的功能性意图或所赋予的角色或分类中的至少一个来帮助监视、记录、和/或剖析该代码模块的活动;以及根据代码模块的意图或赋给该代码模块的角色或分类中的至少一个来提供关于该代码模块的使用的向导。
设置在代码注释工具315内或以其他方式在功能上与代码注释工具315相关联的分析器320可被视为能够基于包括(但不限于)代码模块的功能性意图的特性来将适当的注释或分类与该代码模块相关联的组件。分析器还能够读取与对应于应用程序、程序、函数、或其它代码的程序集的代码模块相关联的注释,并还能够单独或与代码注释工具315的其它组件组合地将该注释的内容传达给用户。
模块325可表示对应于根据例如运行时执行环境200中的执行组件230来执行的应用程序、程序、函数、或其它代码的程序集的一个或多个可执行指令模块。更具体地,模块325可表示诸如方法、类、DLL(动态链接库)、框架等包括代码310和相关联的注释330的实体。
注释330可表示与代码310相关联的文本文件。具体地,注释330可以是列出由代码注释工具315赋给代码310的角色或分类的文本文件(例如,XML);或者注释300可以是清楚表达例如代码310的功能性特征或意图的文本文件。注释330与代码310相关联,并因此可被接收到运行时执行环境200中并由其进行编译,其中注释300作为模块325的一部分而附于代码310。或者,虽然注释330与代码310相关联,但是注释330可以被预编译,并由此可脱离代码310而被接收到运行时执行环境200中。例如,注释330可通过网络125(见图1)在线地从可执行代码200的开发者或管理员处被接收到运行时执行环境200中;或者,注释330可采用离线方式(例如,通过可携带的计算机可读介质)从上述开发者或管理员中的任何一个处接收到运行时执行环境200中。
如上所述,注释330可列出已赋给代码310的角色或分类。该角色或分类可提供指示代码310的功能性意图的数据(例如,API、方法或例程)。即,数据可指示可在其中适当使用代码310的一个或多个上下文。此外,为了定性化地将将代码310用于高级代码生成或例外代码剖析的期望使用通知客户,由分析器320进行关联的角色或分类通常就已分析的特性彼此相关,并且该角色或分类被通常视为既提供可靠向导又允许例外和/或创造性的模拟。
赋给代码310的角色或分类的示例可包括(仅作为说明性示例):内循环代码、输入输出(throughput)代码、交互代码以及启动代码。这些角色的术语仅作为示例提供。角色或分类可被赋予各种名称中的任何一种,尽管可能比较好的是对相应的角色或分类赋予一个指示代码的功能性意图或其它功能性特征的名称。
内循环代码角色可指示代码310有可能在更大的循环中被客户端应用程序、程序、函数、或其它代码的程序集调用,以作为更大的算法的一部分。更具体地,内循环代码310可以被视为对应的应用程序、程序、函数、或其它代码的程序集的“最里面”的代码。其示例包括比较函数、散列函数、低级格式化函数等。对于这种代码,不鼓励存储分配。与内循环代码330相关联的注释330可建议该代码由被赋予以下所述的示例代码角色/分类(例如,输入输出、交互和启动)中的任何一种的代码调用。
输入输出代码角色可指示代码310有可能被用于诸如网页上的批处理过程或服务过程。更具体地,输入输出代码310可被视为为其创建临时对象的代码,因此,可允许一些存储分配。该代码通常可由网页或业务逻辑来实现,并且该代码的意图是不管资源(例如,存储器)的成本如何而执行。输入输出代码的向导的一个示例是该输入输出代码在功能上与内循环代码不兼容,并因此不能被内循环代码调用。因此,与输入输出代码310相关联的注释330可以不建议或甚至禁止调用被赋予内循环角色或分类的代码。
交互代码角色可指示代码310有可能被交互事件驱动的应用程序、程序、函数、或其它代码的程序集的一部分使用。更具体地,交互代码310可以被视为其模式可突然改变的代码,并且该代码的意图是在执行该代码期间尽可能少地使用资源(例如,存储器)。交互代码向导的一个示例是该交互代码可调用内循环代码。因此,与交互代码310相关联的注释330可提倡调用被赋予内循环角色或分类的代码。另一个示例可包括调用输入输出代码的交互代码,而这个是不太可能的情形,因为考虑到使用的资源,交互代码希望是简洁的,并且输入输出代码意在不管资源的成本如何而持续。因此,与交互代码310相关联的注释会进一步不鼓励调用已被赋予输入输出代码角色或分类的代码。
启动代码角色可指示代码310有可能在对应的应用程序、程序、函数、或其它代码的程序集的启动路径上出现。更具体地,启动代码310可以被视为对依赖性以及输入/输出(IO)敏感的代码。与启动代码310相关联的注释330不鼓励、或拒绝从已被赋予另一个角色或分类的代码中进行调用。
因此,当对包括对代码310的调用的应用程序、程序、函数、以及其它可编程和可执行代码的程序集进行编程时,注释330可向编程客户提供包括(但不必然限于)交互向导、诊断(即,剖析器)向导、代码生成向导、代码维护向导以及推断向导的向导。上述所有这些向导的类别可由分析器320基于例如代码310的已知功能性意图来实现。以下描述这些向导的示例类别。
交互编程向导可提供代码310与代码310的较新近被调用的实现在功能上的兼容性的指示,该实现可以是或不是例如已被赋予另一个角色或分类的API、方法或例程。或者,交互编程向导可提供编程规则,该规则警告涉及上述代码310的较新近地被调用的实现的对赋给代码310的角色或分类的所存在的潜在编程违规。
诊断(即,剖析器)向导可提供涉及代码310的已测量的编程事件和/或赋给代码310的角色或分类的报告。更具体地,基于对涉及代码310的编程事件和/或所赋给代码310的角色或分类的记录,诊断/剖析器向导可提供关于代码310的使用的静态分析和/或推荐。分析和/或推荐可甚至包括相对于先前推荐的向导的关于代码310的编程事件的测量。编程事件的记录由例如分析器320来生成并且该编程事件可包括,但不以任何方式局限于:先前调用代码310的函数;以及对特定应用程序、程序、函数、或其它代码的程序集调用代码310的次数;等等。
代码生成向导可以为编译器(例如,编译器210;见图2)提供编程向导。例如,代码生成向导可提供对代码310的功能性意图的可能指示,从而,编译器可以用一种利用经编译的代码310的特性的方式来编译代码310。更具体地,由注释330清楚表达的代码生成向导可指示交互代码310的功能性意图在于使用尽可能少的资源,从而,可引导该编译器以一种精简的方式编译代码310以便由此减少所使用的空间。或者,代码生成向导可指示内循环代码310的功能性意图在于不对其分配存储,从而,编译器可用优化速度的方式被引导至编译器305。这些情景仅作为示例提供,并且并不应该被理解为有任何限制。
代码维护向导可提供编程向导,该编程向导提供对赋给代码310的角色或分类的一个或多个理论基础。如果代码310的至少一部分被改变,该向导还可提供对赋给代码310的角色或分类的解释。因此,代码维护向导可以从某种程度上引导被赋予特定角色或分类的代码向被赋予另一个角色或分类的代码的转化。
推断向导可提供在代码注释工具被用作为静态分析工具的一部分时的用于代码310的追溯注释。即,对于已经被编译的应用程序、程序、函数、以及其它可编程/可执行代码的程序集,分析器320可追溯性地赋予代码310一个角色或分类。因此,可向用户提供代码310的分析,以及调用代码310的函数和被代码310调用的函数。
图4示出产生并利用经定性化注释的代码120(见图1)的至少一个示例实现的示例数据流400。更具体地,可对代码生成器或代码实施器实现示例数据流400。
在以下描述中,尽管图4中的参考标号与先前附图的那些不同,但是各种操作将被描述为由与运行时执行环境200(见图2)或者与代码注释工具315(见图3)相关联的组件执行。针对这些组件中的任何特定一个组件所描述的操作可由该组件本身、与其它与该工具相关联的组件相组合、或由与运行时执行环境200的一个或多个组件协作的特定组件来执行。此外,代码注释工具315的每个组件的操作可由一个或多个处理器来执行并单独或组合地实现为硬件、固件或软件。
数据流400的第一示例实现涉及手动或自动代码生成器。
框405可表示采取或将要采取的催化动作,该催化动作会影响诸如API、方法或例程等代码模块。该催化动作可包括该代码模块被另一个代码模块调用。
因此,数据模块410可表示对应于根据例如运行时执行环境200中的执行组件230来执行的应用程序、程序、函数、或其它代码的程序集的可执行指令的一个或多个模块。更具体地,数据模块410可表示诸如方法、类、DLL(动态链接库)、框架等实体。
代码415可表示与数据模块410相关联的API、方法或例程。更具体地,代码415可由类来呈现并被应用程序、程序、方法、函数、以及其它可编程和可执行代码的程序集用于指导运行时执行环境200或甚至操作环境的过程执行。
分析器435可表示能够基于特征将适当的注释或分类与模块代码进行关联的组件,其中该特征包括,但不限于,代码模块的功能性意图。分析器425可以与一个用于开发和/或利用经注释的代码的更综合性的工具相关联,或者,可甚至被实现为运行时执行环境200的一个组件(例如,编译器)。
不管怎样,当接收了包含在数据模块410内或脱离数据模块410的代码415之后,分析器435可实现一个用于确定代码415的功能性意图或其它功能性特性的预定算法,由此将角色或分类与代码415相关联。将代码415的角色和分类基于代码415的功能性意图之上仅作为一个示例来描述。
注释向导440可表示与代码310相关联的文本文件。具体地,注释440可以是列出代码注释工具315赋给代码415的角色或分类的文本文件(例如,XML)。或者,注释向导440可作为用户界面的一部分采用例如清楚表达与代码415相关联的规则或向导的对话框或下拉菜单、彩色编码字体(例如,绿色表示可接受的、黄色表示注意、以及红色表示禁止的)的形式展示给客户。
数据流400的第二示例实现同样涉及手动或自动代码生成器。
框405可表示采取或将要采取的催化动作,该催化动作会影响诸如API、方法或例程等代码模块。该催化动作可包括该代码模块被编译或被提交以用于编译。
类似于数据模块410,数据模块420可表示诸如方法、类、DLL(动态链接库)、框架等一个或多个可执行指令模块。
类似于代码425,代码425可表示与数据模块420相关联的API、方法或例程。
注释430可表示与代码425相关联的文本文件,该注释采用例如文本文件(例如,XML)形式来列出基于代码425的功能性意图或其它专用的功能性特征而赋给代码425的角色或分类。更具体地,根据数据流400的该第二示例,代码425早已如此处所述地被手动过程或自动过程进行了注释。
分析器435可表示能够过读取与代码425相关联的注释430的组件。因此,作为运行时执行环境200的一部分,分析器435可向编译器210(见图2)提供注释向导440,使得对代码425进行编译以便在功能上与注释430中所清楚表达的功能性意图相兼容。
数据流400的第三示例实现涉及手动或自动代码剖析器或诊断工具。
框405可表示采取或将要采取的催化动作,该催化动作会影响诸如API、方法或例程等代码模块。在代码剖析器的上下文中,该催化动作可包括将先前编译的代码提交给剖析工具,以供分析或进行任何其它形式的检查或研究。
数据模块410可表示诸如方法、类、DLL(动态链接库)、框架等一个或多个可执行指令模块。
代码415可表示与数据模块410相关联的API、方法或例程。
分析器435可表示能够读取已经被编译的代码425并且能够基于建立的准则对代码415的功能性意图或其它指定的功能性特征进行解码的组件。因此,分析器435还能够将适当的角色或分类与代码415相关联。
注释向导440可表示与代码415相关联的文本文件,该注释向导清楚表达了分析器435赋给代码415的角色或分类。另外,注释向导440可清楚表达对应于特定角色或分类的规则或其它形式的编程向导。注释向导440可作为用户界面的一部分采用例如清楚表达与代码415相关联的规则或向导的对话框或下拉菜单、彩色编码字体(例如,绿色表示可接受的、黄色表示注意、以及红色表示禁止的)的形式展示给客户。
通过关于上述图1-4的描述,角色或分类可被赋给一个或多个代码模块,从而在托管执行环境或非托管执行环境中提供定性编程向导。然而,此处描述的示例实现并不局限于图1的环境、图2的组件、图3的执行路径、或图4的过程。与经定性化注释的代码120(见图1)相关联的技术(例如,工具、方法以及系统)可以由关于图2-4所描述的组件的各种组合来实现。
此外,用于上述的示例和实现中的任何一个的计算机环境可包括具有例如一个或多个处理器或处理单元、系统存储器、耦合各种系统组件的系统总线等计算设备。
计算设备可包括各种计算机可读介质,包括易失性和非易失性介质、可移动和不可移动介质两者。系统存储器可包括采用诸如随机存取存储器(RAM)等易失性存储器和/或诸如只读存储器(ROM)或闪存RAM等非易失性存储器形式的计算机可读介质。可以意识到,能存储可被计算机访问的数据的其它类型的计算机可读介质,诸如磁带盒或其它磁存储设备、闪存卡、CD-ROM、数字多功能盘(DVD)或其它光学存储、随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)等,也可被用来实现示例计算系统和环境。
整篇说明书对“示例”、“替换示例”、“至少一个示例”、“实现”或“示例实现”的表述表示一个具体描述的特征、结构或特点被包括在本发明的至少一个实现中。因此,该词语的使用可表示不止有一个实现。此外,所描述的特征、结构、或特点可以用任何合适的方式在一个或多个实现中组合。
然而,相关领域的技术人员可认识到,可以不采用一个或多个具体细节或者采用其它方法、资源、材料等来实践本发明。在另一个实例中,公知的结构、资源、或操作没有被显示或详细描述仅仅是为了避免混淆本发明的各方面。
尽管示出和描述了本发明的各示例实现和应用,但将理解,本发明并不局限于上述的精确配置和资源。本领域的技术人员可根据本发明此处所公开的各个方法和系统的安排、操作以及细节作出各种修改、变化、以及变型,而不背离如上述以及下面所请求保护的本发明的范围。