CN104583970A - 用于受管运行时中的元素的命令式属性 - Google Patents

用于受管运行时中的元素的命令式属性 Download PDF

Info

Publication number
CN104583970A
CN104583970A CN201380043599.0A CN201380043599A CN104583970A CN 104583970 A CN104583970 A CN 104583970A CN 201380043599 A CN201380043599 A CN 201380043599A CN 104583970 A CN104583970 A CN 104583970A
Authority
CN
China
Prior art keywords
metadata
identifier
code
instruction
useful load
Prior art date
Legal status (The legal status 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 status listed.)
Granted
Application number
CN201380043599.0A
Other languages
English (en)
Other versions
CN104583970B (zh
Inventor
M·C·范宁
G·B·米斯凯利
A·甘地
T·S·莱斯
T·H·基姆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
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
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN104583970A publication Critical patent/CN104583970A/zh
Application granted granted Critical
Publication of CN104583970B publication Critical patent/CN104583970B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

本文所描述的主题的各方面涉及命令式属性。在各方面中,受管运行时环境的元数据可通过包括于在所述受管运行时环境中执行的程序的代码中的命令式语句来设置。该元数据可与标识所述元数据的查找数据相关联。该查找数据可从由命令式语句提供的标识符以及可被显式或隐式提供的逻辑元素的标识符形成。可在解析时、运行时、或另一时间计算该元数据,并且可基于对在该元数据被计算时对受管运行时环境可用的状态来计算该元数据。

Description

用于受管运行时中的元素的命令式属性
背景
随着软件(及其开发)已经变得越来越复杂,存在趋向于用附加的支持性信息(常被称为“元数据”)来扩充程序的文字应用源代码的趋势。程序元数据常由开发工具来消费,以便提供更丰富的工具使用体验。例如,元数据可指示可不使函数或方法内联。编译器可在编译时使用此元数据来创建二进制可执行码,在该二进制可执行码中该元数据所指示的函数或方法不是内联的。在使用之后,该元数据被丢弃并且在检查已编译的二进制码时不能被检索到。上面描述的元数据仅可包括在编译时已知或可被计算者。
在此要求保护的主题不限于解决任何缺点或仅在诸如上述环境中操作的各个实施例。相反,提供该背景仅用以示出在其中可实践在此描述的部分实施例的一个示例性技术领域。
概述
简言之,此处所描述的主题的各方面涉及命令式属性。在各方面中,受管运行时环境的元数据可由在该受管运行时环境中执行的程序的代码中所包括的命令式语句来设置。该元数据可与标识该元数据的查找数据相关联。该查找数据可从命令式语句所提供的标识符以及可显式或隐式提供的逻辑元素的标识符来形成。该元数据可在解析时、运行时、或另一时间计算,并且可以基于在计算该元数据的时间对受管运行时环境可用的状态来计算。
提供本概述是为了简要地标识在以下详细描述中进一步描述的主题的一些方面。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
除非上下文清楚地指出,否则短语“本发明所描述的主题”指的是具体实施方式中描述的主题。术语“方面”应被当作“至少一个方面”。标识具体实施方式中所描述的主题的各方面不旨在标识所要求保护的主题的关键特征或必要特征。
上述各方面和此处所描述的主题的其它方面是借助于示例说明的,并且不受附图限制,附图中相同的标号指示相似的元素。
附图说明
图1是包括根据本文所描述主题的各方面的软件开发系统的示例性环境;
图2是解说根据本文所描述的主题的各方面的示例性元数据子系统的框图;
图3是解说根据本文所描述的主题的各方面的可彼此交互的示例性组件的框图;
图4是概括地表示根据此处所描述的主题的各方面的、可在获得和存储元数据时发生的示例性动作的流程图;以及
图5是概括地表示根据本发明所描述的主题的各方面的、可从元数据管理方的角度进行的示例性动作的流程图。
具体实施方式
定义
如本文所使用的,术语“包括”及其变体被当作开放式术语,表示“包括但不限于”。除非上下文另外清楚地指示出,否则术语“或”被当作“和/或”。术语“基于”被当作“至少部分地基于”。术语“一个实施例”和“一实施例”被当作“至少一个实施例”。术语“另一实施例”被当作“至少一个其他实施例”。
如本文所使用的,诸如“一”和“该”等术语包括了所指示的项或动作中的一个或多个。具体而言,在权利要求书中,对某一项的引用一般表示存在至少一个这样的项,并且对一动作的引用表示执行该动作的至少一个示例。
本文中有时可使用术语“第一”、“第二”、“第三”等等。没有其他上下文,权利要求中对这些术语的使用不意在暗示排序,而是用于标识的目的。例如,短语“第一版本”和“第二版本”不一定意味着第一版本是真正的第一个版本或是在第二版本之前创建的,或甚至是第一版本是在第二版本之前被请求或操作的。相反,这些短语用于标识不同的版本。
编程接口(或更简单地,接口)可被视为用于使一个或多个代码段与由一个或多个其它代码段提供的函数相通信或对其进行访问的任何机制、进程或协议。此外,编程接口可被视为能够让系统的组件通信耦合至其它组件的一个或多个机制、方法、函数调用、模块等的一个或多个机制、方法、函数调用、模块、对象等。以上语句中的术语“代码段”旨在包括一个或多个指令或一个或多个代码行,并且包括例如代码模块、对象、子例程、函数等,而不考虑所应用的术语或者这些代码段是否被分开编译,或者这些代码段是作为源代码、中间代码、还是对象代码提供,或者它们是位于相同或不同的机器上还是分布在多个机器上,或者由这些代码段表示的功能是全部由软件、全部由硬件还是由硬件和软件的组合来实现。
标题仅是为了方便;关于给定话题的信息可在其标题指示该话题的章节之外被寻找到。
其他显式或隐式定义可包括在下文中。
示例性实施例
图1-3是表示本文所描述的主题的各方面可以在其中操作的示例性环境的框图。图1-3中示出的组件是示例性的且不旨在包括一切的可能需要或包括的组件。在其他实施例中,结合图1-3描述的组件和/或功能可被包括在其他组件(示出或未示出)中或者被放置在子组件中而不背离本发明所描述的主题的各方面的精神或范围。在某些实施例中,结合图1-3所描述的组件和/或功能可跨多个设备地分布。
图1-3中解说的组件中的一个或多个可由一个或多个计算设备来实现。计算设备可包括一个或多个个人计算机,服务器计算机,手持式或膝上型设备,多处理器系统,基于微控制器的系统,机顶盒,可编程消费电子产品,网络PC,小型计算机,大型计算机,蜂窝电话,个人数字助理(PDA),游戏设备,打印机,包括机顶盒、媒体中心或其他电器在内的电器,汽车嵌入式或附连的计算设备,其他移动设备,能够执行指令的硬件,包括以上系统或设备中的任一种的分布式计算环境等。
图1-3中解说的组件中的一个或多个可在虚拟环境中来实现。虚拟环境是由计算机来模仿或模拟的环境。虚拟环境可模仿或模拟物理机器、操作系统、一个或多个接口的组、以上各项的部分、或以上各项的组合等等。在机器被模仿或被模拟时,该机器有时被称为虚拟机。对于在虚拟机上执行的软件来说,虚拟机是一种看上去是物理机器的机器。该软件可将文件保存在诸如虚拟硬盘驱动器、虚拟软盘等之类的虚拟存储设备中,可从虚拟CD处读取文件,可经由虚拟网络适配器来进行通信等等。
一个以上虚拟环境可被主存在单个计算机上。也就是说,两个或更多虚拟环境可在单个物理计算机上执行。对于在每一虚拟环境中执行的软件来说,该虚拟环境看上去具有其自己的资源(例如,硬件),即使主存在单个计算机上的各虚拟环境也可能在物理上彼此以及与主控操作系统一起共享一个或多个物理设备。
图1是包括根据本文所描述主题的各方面的软件开发系统的示例性环境。转向图1,系统105可包括软件开发组件110、存储150,且可包括其它组件(未示出)。软件开发组件可包括源代码编辑器115、运行时管理器120、调试器125、剖析器130、(诸)其他开发工具135、元数据子系统140、和其它组件(未示出)。如本发明所使用的那样,术语“组件”要被当作包括以下的全部或一部分来理解:一个或多个设备、一个或多个软件模块或其部分的集合、一个或多个软件模块或其部分与一个或多个设备或其部分的某种组合等等。
存储150可包括能够存储软件开发所涉及的数据的任何存储介质。术语“数据”要被宽泛地看作包括可由一个或多个计算机存储元素表示的任何东西。逻辑上,数据可被表示成易失性或非易失性存储器中的一系列1和0。在具有非二进制存储介质的计算机中,数据可根据存储介质的容量来表示。数据可被组织成不同类型的数据结构,包括诸如数字、字母等之类的简单数据类型,分层、链接或其他相关数据类型、包括多个其他数据结构或简单数据类型的数据结构等等。数据的某些示例包括信息、程序代码、程序状态、程序数据、其他数据等等。
存储150可被实现为文件系统、数据库、诸如RAM等易失性存储器、其它存储、以上的某种组合等,并可以跨多个设备分布。存储150可以是外置的、内置的、或包括对托管软件开发系统105的各组件的设备而言内置和外置两者的组件。
在一个实施例中,软件开发组件110可用于与动态编程语言一起工作。在另一实施例中,本发明描述的技术还可被应用于非动态编程语言环境。
在运行时,动态编程语言环境可执行非动态编程语言环境如果执行的话则在编译时或在编译时之前执行的一些动作。例如,在程序执行期间,动态编程语言环境可添加新代码、扩展对象和定义、修改类型系统等。一些示例性动态编程语言包括ActionScript、BASIC、BeanShell、Clojure、ColdFusion、Lisp、Groovy、JavaScript、VBScript、Perl、PHP、PowerShell、Python、Ruby、Smalltalk、Tcl等。一些非动态编程语言包括汇编、C、C++、Java、Pascal、Fortran等。
源代码编辑器115可允许软件开发者输入、删除和修改程序的源代码。源代码编辑器115可在显示器上显示程序的源代码并经由用户接口接收输入。
运行时管理器120可启动运行时环境来执行源代码。在一个实施例中,运行时环境可包括Web浏览器。在其它实施例中,运行时环境可包括允许代码在Web浏览器之外被执行的一个或多个组件。
调试器125可与运行时环境交互以测试和调试程序。调试器125可允许软件开发者逐步执行程序、在程序内的某些点处暂停程序、跟踪变量值和存储器位置、修改程序状态等。调试器125可允许软件开发者指示向调试器125通知异常的条件。例如,软件开发者可能想要得到在用户代码中抛出的异常的通知,但是不想得到在库代码中抛出的异常的通知。
剖析器130可被用来收集关于程序的执行的统计数据。例如,剖析器130可以测量存储器的使用、特定指令的使用、函数调用的频率和持续时间、其他统计数据等等。为了收集这些统计数据,剖析器130可与运行时环境交互、可以是运行时环境的一部分、可驻留于允许剖析器130看到执行什么代码的较低层上、或可按照本领域技术人员已知的其他方式来操作。
(诸)其他开发工具135表示软件开发系统105中可包括的任何其他开发工具。
元数据子系统140可包括允许将元数据与程序的逻辑元素相关联的一个或多个组件。元数据可包括在解析时、编译时、运行时、或某个其他时间可用或计算的静态数据(例如,值“5”)或动态数据。元数据可通过提供静态数据、在执行时产生数据的代码、指向在执行时产生数据的代码的引用或诸如此类来指定。
元数据不影响该程序的逻辑流但是可能影响该程序在其中执行的环境的行为。例如,元数据可被运行时用来确定是否要将例外抛出至调试器,但是元数据不影响该程序所计算的结果。
如同上面提到的,元数据可与程序的逻辑元素相关联。一些示例性逻辑元素包括函数、文件、代码容器、词法范围、当前栈帧、调用栈范围、属性、类、原型、工作者线程、特定调用实例、特定对象实例、委托(delegate)、全局范围、其他逻辑元素、以及诸如此类。而且,例如基于配置或传递给API的参数,逻辑元素可以或可以不从其父逻辑元素(例如,包含它的或调用它的逻辑元素)继承元数据。
元数据与逻辑元素的这种关联可以允许运行时基于逻辑元素及其经由该运行时可用的状态获得元数据。此关联还可允许基于该程序的状态来计算该元数据的全部或部分。将该元数据关联至的该特定逻辑元素可以被显式指示或推断。
元数据可经由应用编程接口(API)来设置。软件开发者可通过向期望元数据的程序的源或其他代码添加编程语句来使得API在运行时期间被调用。在一个实现中,为了灵活性,调用API的一个或多个编程语句可被置于该源代码内可放置任何其他类型的编程语句处。该元数据可指示立即可用或可在运行时计算的数据。例如,该元数据可基于检查相关范围/栈链来计算。
该API可包括要求的和可任选的参数。所述参数中的零个或多个可包括静态数据(例如,可由该参数中所包括的数据计算或确定的数据),而所述参数中的零个或多个可基于运行时状态来计算。下面更详细地描述了一些示例性的参数类型。该API可允许针对一个或多个元数据标识符设置元数据。然而,下面描述的类型并非旨在全包含或穷尽根据本文教导可使用的类型。实际上,基于本文教导,本领域技术人员可认识到也可使用其他参数类型,而不背离本文所描述的主题的各方面的精神或范围。一些示例性的参数类型包括:
1.要与该元数据相关联的标识符。例如,API可包括允许API的调用者指示要与该元数据相关联的标识符的参数。随后,此标识符可被用于从元数据子系统140获得该元数据。
2.特定调用实例。在一些实现中,可能期望使元数据与函数的特定调用相关联。例如,不是使该元数据与对该函数的每次调用相关联,而是可能期望使该元数据与对该函数的特定调用或者对该函数的一组调用相关联。这可通过使用特定调用实例来实现。
在一个实施例中,特定调用实例可经由函数名和一个数字或一组数字来标识。所述(一个或多个)数字可指示对该函数的(一个或多个)特定调用。例如,在程序的执行期间函数可被调用许多次。为了标识特定调用,语句设置元数据可包括与该特定调用相对应的函数的标识符和数字。
在另一实施例中,与元数据标识符相关联的元数据可被收集到一集合中。每当执行语句以为该标识符设置元数据时,指示上下文(例如,标识被执行的语句的范围或其他数据)以及经由该语句提供的有效载荷的数据可被添加到该集合。此数据稍后可被用于针对一个或一组特定调用标识用于标识符的元数据。
3.“应用于”参数。该API可包括指示该元数据要关联至的逻辑元素的类型的参数。这有时在本文中被称为该元数据可应用的范围。此参数连同从中调用API的范围一起可被用来确定该元数据要关联至的逻辑元素。例如,如果该API是从函数内的块的范围内调用的,且该参数指示该元数据的逻辑元素是函数,则该元数据可与该函数(而非该块)相关联。
作为另一示例,如果该参数指示该元数据要被应用于函数,但是该API是从全局范围调用的,则该调用可被忽略,错误可被生成,或该元数据可与指示该API是从全局范围调用的信息一起被存储。
“应用于”参数还可被运行时用来微调该运行时的行为。例如,指示该元数据为全局的“应用于”参数可被该运行时用来创建全局变量,每当改变该元数据时均修改该全局变量。作为另一示例,指示该元数据是针对函数的“应用于”参数可被该运行时用来在已从该函数中调用该API一次之后移除调用该API的可执行代码(例如,从在运行时创建的经编译代码中)。
“应用于”参数可由从其调用该API的逻辑元素来推断。例如,如果该API是从全局范围调用的,则该元数据可与全局范围相关联。如果该API是从函数调用的,则该元数据可与该函数范围相关联。如果该API是从词法范围内调用的,则该元数据可与该词法范围相关联。
4.逻辑元素的标识符。该API可包括指示该元数据要关联至的特定逻辑元素的参数。例如,该API可允许调用者指示除了从其调用该API的函数之外的函数。
在逻辑元素没有被显式指示时,该逻辑元素可被推断。例如,逻辑元素可被推断为包括对该API的调用的范围(例如,函数、块、文件等)。
5.禁用参数。该API可包括指示可使用语句来调用该API多少次的参数。例如,在一些情况下,可能期望使语句将元数据设置为仅调用该API一次。例如,知道在程序执行期间是否曾经被调用可能是有用的。在另一实施例中,知道循环是否已被执行一次可能是有用的。在一个实现中,为了改善性能,运行时可在API已被从期望范围调用该指定次数后移除调用该API的可执行代码(例如,从在运行时或在编译时创建的已编译代码)。
其他技术可被用来移除或以其他方式禁用设置该元数据的指令。这些技术的一些示例包括向元数据提供回调,其中该回调指示该指令是否已被移除或以其他方式禁用、设置属性等。另一示例包括调用API、提供元数据标识符、以及指示该指令要被移除或以其他方式禁用等。上述例子并不旨在是包括一切的或是穷举的。的确,基于此处的教导,本领域技术人员可认识到可使用其他技术来移除或以其他方式禁用设置元数据的指令,而不背离此处所描述的主题的各方面的精神或范围。
6.递归参数。该API可包括当递归发生时要如何应用该元数据的参数。此参数可指示该元数据可与特定递归层级相关联,以使得元数据消费者可获得递归期间设置该元数据的最不新近的、最新近的、或某个其他时间。
7.关系参数。该API可允许指示该调用与其他当前栈帧的关系以标识逻辑元素的参数。关系参数的一些示例包括第一个设置者取胜,最后一个设置者取胜,设置元数据并且忽略嵌套帧中的所有后续设置者,仅针对当前帧设置元数据,以及诸如此类。在第一个设置者取胜中,由要设置该元数据的第一个栈帧所设置的元数据被保留,而由稍后的栈帧尝试设置的其他元数据被丢弃或忽略。在最后一个设置者取胜中,由要设置该元数据的最后一个栈帧所设置的元数据被保留,而由稍后的栈帧尝试设置的其他元数据被丢弃或忽略。
在设置元数据并且忽略嵌套帧中的所有后续设置者中,由外部帧设置的元数据被保留,而该外部帧内的栈帧尝试设置的其他元数据被丢弃或忽略。在仅针对当前帧设置元数据中,如果该元数据是在另一帧中设置的,则针对每一帧的单独值被保留(而不是盖写或丢弃值)。
8.回调参数。在一个实施例中,一个或多个回调函数可作为参数被提供给该API。举例而言,诸如:
SetAttribute(“Identifier”,GenValue);
的语句可被开发者插入到代码中。回调函数GenValue可被运行时调用以提供元数据。该回调函数可使用运行时状态来计算该元数据。
在此实施例中,该元数据的计算可被推迟到在该代码中遇到该语句之后的一时刻。例如,该运行时可懒惰地等待调用该GenValue函数,直到该运行时需要该元数据。
9.阶段。在一个实施例中,该API可包括指示该元数据设置语句何时要被评估的参数。例如,该参数可指示该元数据设置语句要在第一次解析、第二次解析或第N次解析期间、在执行期间、在第一次编译或重编译期间、或在某个其他阶段期间被评估。
10.有效载荷。该API可包括指示该元数据的参数。该有效载荷参数可包括元数据或可包括或引用用于使用在该程序的执行期间可用的程序状态来创建该元数据的指令(例如,编程语句)。例如,有效载荷可包括实际元数据、在执行时生成该元数据的代码、或在调用时生成该元数据的回调(例如,对代码的引用)。
对API的调用的类型的一些示例性示例包括:
1.SetAttribute(“foo”,…)。在此示例中,带显式静态标识符“foo”以及零个或更多个其他参数(由…指示)地调用该API。
2.SetAttribute(objfoo,…)。在此示例中,该API可通过允许用属性在对象中指定关于该元数据的信息来将本可由独立的参数指定的数据相组合。例如,对象(例如,objfoo)可具有标识符属性,以及范围属性、“应用于”属性以及其他属性中的一个或多个。这一点的一个示例由以下小代码段来解说:
SetCustomAttribute(
{"name":"foo",
 "appliesTo":"Function”},payload);
在此示例中,对象包括两个属性。名称属性指定该元数据的标识符,而“应用于”属性指示该元数据可被应用于的逻辑元素。而且,这些属性中的一个或多个可基于在执行期间存在的状态来计算。
3.SetAttribute(foo(),…)。在此示例中,指向函数的引用被作为参数传递至该API。此函数可包括返回或计算该API所使用的数据的语句。在一个实施例中,该函数可在该元数据被元数据消费者请求时调用。在另一实施例中,该函数可被立即调用且返回数据存储在元数据存储中。在另一实施例中,该函数可在一个或多个其他时间调用。
4.SetAttribute(“http://ms.keys/foo”,…)。在此示例中,指向能经由网络访问的位置的引用被作为参数传递至该API。在一个示例中,该位置可以是要存储该元数据的地点。在另一示例中,该位置可指示可被调用以存储该元数据的服务。
元数据子系统140可维护关于从中调用该API的范围的信息。例如,该API可从各种嵌套范围(例如,其中一个逻辑元素位于另一个逻辑元素之内)调用。例如,函数Bar可具有诸如以下的嵌套逻辑元素:
在此示例中,该API可将该标识符(即,foo)和每个有效载荷与足以标识该元数据的范围的信息一起存储。第一SetMetadata调用可具有函数Bar()的范围,而第二SetMetadata调用可具有该未命名块(例如,在第一SetMetadatastatement之后的代码)的范围,而第三SetMetadata调用可具有函数Bar2()的范围。由该API返回的元数据可取决于该元数据标识符和该逻辑元素。例如,为了精确指定特定有效载荷,该元数据标识符(例如,“foo”)和该范围(例如,Bar、未命名块或Bar2)两者可被指定。
可针对作为整体的程序或针对个体元数据调用来禁用元数据的创建。构想了以下示例性实现。
1.关于解析。在此实现中,代码尚未被执行,但是在解析该代码中,该运行时可能找到设置元数据调用,基于该元数据调用中包括的静态信息来计算该元数据,以及将该元数据与逻辑元素相关联。此后,该元数据调用被剥离、禁用或忽略。
2.关于解析加动态执行。在此实现中,代码尚未被执行,但是在解析该代码中,该运行时找到设置元数据调用,基于该元数据调用中包括的静态信息以及对该元数据调用中包括的代码的动态执行来计算该元数据,以及将该元数据与逻辑元素相关联。
3.一次关联。在此实现中,包括该元数据调用的函数被首次调用时,该元数据被计算。在该函数被调用后,该函数内的该元数据调用被剥离、禁用或忽略以改善性能。
4.每次调用。在此实现中,包括该元数据调用的函数被每次调用时,该元数据被计算。
5.调用者指示停止。在此实现中,API可允许元数据调用传递一参数,该参数指示在当前元数据调用成功(并生成元数据)之后,该元数据被剥离、禁用或忽略。
在一个实施例中,运行时可包括用于将在函数中找到的短语扩展到一个或多个元数据调用中以针对逻辑元素设置元数据的逻辑。例如,函数中的诸如SetAllMetadata()的短语可被该运行时扩展到该函数内的一个或多个元数据调用中。短语SetAllMetadata()可在别处定义并可由该运行时或在执行前用其定义的语句来取代它的另一组件来内联。例如,在需要针对多个函数设置相同元数据的情况下这可能是有帮助的,且可帮助消除代码混乱。
在另一实施例中,助手代码可在函数中被引用。例如,函数可包括以下代码:
语句SetAllMetadata()可指代在别处定义的助手代码。在执行助手代码时,该运行时可在该栈上行一帧以像在F1中设置的那样设置元数据而不内联该助手代码。此技术还可在其中找到语句SetAllMetadata()的其他函数中使用。
在一个实施例中,SetMetadata调用可被编码为评论或通常不被执行的其他代码。理解SetMetadata评论的句法的解析器或编译器可基于该评论设置属性,而其他解析器可忽略该评论。在一个实现中,这可被用来标记要被暴露的方法。例如,函数可包括如下语句:
图2是解说根据本文所描述的主题的各方面的示例性元数据子系统的框图。该元数据子系统可包括元数据注入器205、接口210、元数据管理器215、存储220-221、以及其他组件(未示出)。该元数据子系统可将逻辑元素225与元数据相关联并且可将标识符与该元数据一起存储在存储221中。逻辑元素225可与存储220中的代码相关联。
元数据注入器205代表可调用接口210并提供元数据的代码。元数据注入器205可包括正在受管运行时环境中执行的代码的指令。该代码可通过接口210调用元数据管理器215并且可提供与先前提及的参数相对应的一个或多个参数。元数据注入器205还可包括向元数据管理器215提供数据的其他组件。例如,元数据注入器205可包括该代码在其中执行的受管运行时环境。该受管运行时环境例如可向元数据管理器215提供范围信息。
接口210可包括允许与元数据管理器215通信的编程接口。
元数据管理器215可包括将元数据存储在元数据存储221中并且还存储该元数据和逻辑元素225之间的关联的组件。例如,元数据管理器215可通过设置与该运行时相关联的属性来将该元数据存储在受管运行时环境的存储器中。当所述属性被操纵时,受管运行时环境的行为可被改变。
元数据管理器215还可在接收到所请求的元数据的标识符之际将来自元数据存储221的元数据提供给请求方。元数据管理器215可调用代码(例如回调代码)、检查运行时状态、或执行计算该元数据所需的其他动作。
图3是解说根据此处所描述的主题的各方面的可彼此交互的示例性组件的框图。系统300可包括元数据提供者305、元数据消费者310、上下文提供者315、元数据管理器320、存储325、以及其他组件(未示出)。
元数据提供者305包括能操作以响应于评估代码的指令来提供元数据的任何组件。元数据提供者的一些示例包括:在受管运行时环境中执行的程序、软件开发工具、受管运行时环境、操作系统、以及诸如此类。元数据提供者305可由API访问,在该受管运行时环境中执行的代码可通过该API向元数据管理器320提供元数据以及与该元数据相关联的数据。
至少,元数据提供者305可向元数据管理器320提供标识符和有效载荷。元数据提供者305还可以如先前已指示的一个或多个参数的形式向元数据管理器320提供其他数据。在一个实现中,元数据提供者305可显式地向元数据管理器320提供逻辑元素的标识符。
在另一实现中,逻辑元素的标识符可经由上下文提供者315隐式地提供。在此实现中,当该元数据提供者没有显式地提供逻辑元素的标识符时,上下文提供者315可基于调用元数据管理器320的所执行指令的范围来确定该逻辑元素的标识符。上下文提供者315随后可将此标识符传递给该元数据管理器。
除以上的标识符外,还可向元数据管理器320提供一个或多个其他标识符。例如,编组标识符可被提供给该元数据管理器以进一步限定有效载荷。除先前描述的标识符外,此编组标识符也可被用来标记元数据。例如,函数A可被函数B、C、D等调用。为了创建容易地标识函数A何时被B调用以及函数A何时不被B调用的数据,编组标识符(例如,“ParentIsB(父为B)”或“ParentIsNotB(父非B)”)可被提供至元数据管理器320并由元数据管理器320来存储。
此数据随后可被元数据消费者310用于获得附加有用信息。例如,剖析器(profiler)可能对从B到函数A的调用感兴趣,但是可能对从其他函数到函数A的调用不感兴趣。为了获得其感兴趣的数据,剖析器可使用编组标识符作为限定词来查询元数据管理器320。
元数据管理器320能够操作以接收以上指示的标识符和有效载荷。这些标识符可共同形成查找数据,该查找数据可被用来从存储325获得有效载荷。查找数据可包括标识符或者是从标识符得出(例如,通过函数)的数据。有效载荷可包括以下的一个或多个:元数据,在执行时计算该元数据的代码,以及指向在执行时计算该元数据的代码的引用。
存储325可包括能够将元数据与该查找数据一起存储的任何存储介质,并可以与图1的存储150的实现类似的方式实现。
元数据消费者310是从元数据管理器320请求元数据的任何组件,并可包括例如上面针对元数据提供者305所指示的组件类型。元数据消费者310可向元数据管理器320提供一个或多个标识符并可接收对其作出响应的元数据。
图4-5是根据此处所描述的主题的各方面的概括地表示可发生的示例性动作的流程图。为解释简明起见,结合图4-5描述的方法被描绘和描述为一系列动作。可以理解和明白,本发明所描述的主题的各方面不受所示出的各动作和/或各动作次序的限制。在一个实施例中,各动作以如下描述的次序发生。然而,在其它实施例中,各动作可以并行地发生、以另一次序发生、和/或与本发明未呈现和描述的其它动作一起发生。此外,并非所有示出的动作都是实现根据本发明所描述的主题的各方面的方法所必需的。另外,本领域的技术人员将了解和明白,方法也可以替代地经由状态图或作为事件表示为一系列相互相关联的状态。
图4是概括地表示根据此处所描述主题的各方面的、可在获得和存储元数据时进行的示例性动作的流程图。在框405,动作开始。
在框410,将代码加载到受管运行时环境的存储器中。例如,参考图1,运行时管理器120可将代码从存储150加载到主存储器中以准备执行该代码。
在框415,评估该代码的指令。例如,参考图5,运行时管理器120可评估被加载到主存储器中的代码的指令。如先前所指示的,该指令可包括将被执行的或可嵌入在通常不执行的评论中的语句。
在框420,获得元数据标识符。例如,参考图2,元数据管理器215可从元数据注入器205获得元数据标识符。参考图3,该元数据标识符可从元数据提供者305显式地接收或者从上下文提供者315隐式地接收。在从上下文提供者315接收时,这可例如涉及确定包括提供该元数据标识符的指令的逻辑元素。确定逻辑元素例如可包括由运行时执行的动作,包括寻找最顶部栈帧、创建用于表示特定调用的数据结构、或诸如此类。
在框425,获得逻辑元素标识符。例如,参考图3,元数据管理器320可从元数据提供者305显式地或从上下文提供者315隐式地获得该逻辑元素标识符。
在框430,存储所述标识符和该有效载荷。例如,参考图3,元数据管理器320可将元数据标识符和逻辑元素标识符与有效载荷一起存储在存储325中。
在框435,可以执行其他动作(如果有的话)。例如,该运行时可基于该元数据来修改调试、剖析(profiling)或其他行为。作为示例,可接收关于该元数据的其他数据,诸如举例而言:“应用于”参数、指示在从该代码移除该指令之前允许使用该指令来设置元数据的最大次数的参数、指示与该元数据相关联的递归层级的参数、指示该元数据是否要继承到该逻辑元素的子逻辑元素的继承性的指示、先前提及的任何其他数据、以及诸如此类。
图5是概括地表示根据此处所描述的主题的各方面的、可从元数据管理器的角度进行的示例性动作的流程图。在框505,动作开始。
在框510,响应于受管运行时环境执行用户代码的指令来接收标识符和有效载荷。例如,参考图3,元数据管理器320可从元数据提供者305和上下文提供者315接收标识符且可从元数据提供者305接收有效载荷。
在框515处,在存储中维护所述标识符和有效载荷。例如,参考图3,元数据管理器320可使得所述标识符和该有效载荷被存储在存储325中。
在框520,可以执行其他动作(如果有的话)。
元数据和元数据的应用可被耦合在一起被允许但不要求如此。例如,不要求元数据标识符(例如,setUserUnhandledException)指示该元数据的性质或功能。的确,元数据和该元数据的应用可被解耦。在一些小代码段中解说了此概念的一些示例:
如从上述详细描述中可以看到,已经描述了关于命令式属性的各方面。尽管本文所描述的主题的各方面易于作出各种修改和替换构造,但其某些说明性实施例在附图中示出并在上面被详细地描述。然而,应当理解,并不旨在将所要求保护主题的各方面限制于所公开的具体形式,而是相反地,目的是要覆盖落入本文所描述的主题的各方面的精神和范围之内的所有修改、替换构造和等效方案。

Claims (10)

1.一种至少部分地由计算机实现的方法,所述方法包括:
将代码加载到受管运行时环境的存储器中;
评估所述代码的指令,所述指令指示第一标识符和有效载荷,所述第一标识符担当能用于获得所述有效载荷的查找数据的至少一部分,所述有效载荷包括以下的一者或多者:元数据、在执行时计算该元数据的代码、以及指向在执行时计算该元数据的代码的引用;
获得要与所述元数据相关联的逻辑元素的第二标识符,所述第二标识符担当所述查找数据的至少一部分;以及
将所述第一标识符、所述第二标识符、以及所述有效载荷存储在存储中,所述存储是所述受管运行时环境能访问的。
2.如权利要求1所述的方法,其特征在于,获得逻辑元素的第二标识符包括经由应用编程接口来接收所述第二标识符。
3.如权利要求1所述的方法,其特征在于,进一步包括接收“应用于”参数,并且其中获得逻辑元素的第二标识符包括使用所述“应用于”参数和所述指令的范围来确定所述逻辑元素。
4.如权利要求1所述的方法,其特征在于,进一步包括接收指示在从所述代码移除所述指令之前允许所述指令被用来设置所述元数据的最大次数的参数。
5.如权利要求1所述的方法,其特征在于,对在执行时计算所述元数据的代码的所述引用包括对在执行时从在运行时期间可用的状态来计算所述元数据的回调函数的引用。
6.如权利要求1所述的方法,其特征在于,进一步包括接收标识所述指令的上下文的数据并将所述数据存储在所述存储上维持有效载荷以及针对设置所述有效载荷的每个指令的上下文的集合中。
7.一种在计算环境中的系统,包括:
能操作以存储第一标识符、第二标识符、以及有效载荷的存储,所述第一标识符和所述第二标识符一起形成能用于从所述存储获得所述有效载荷的查找数据,所述有效载荷包括以下的一者或多者:元数据、在执行时计算所述元数据的代码、指向在执行时计算所述元数据的代码的引用、标识与所述元数据相关联的逻辑元素的第二标识符;
能操作以执行程序的指令并维护与其相关联的状态的受管运行时环境;以及
元数据管理器,所述元数据管理器能操作以从作为加载到所述受管运行时环境的存储器中的程序的一部分的所执行指令接收所述第一标识符以及所述有效载荷,并且使得所述第一标识符和所述有效载荷被存储在所述存储中。
8.如权利要求7所述的系统,其特征在于,所述元数据管理器进一步能操作以将所述第二标识符作为由所述所执行指令所指示的显式参数接收。
9.一种具有计算机可执行指令的计算机存储介质,所述计算机可执行指令在被执行时执行以下动作,包括:
在应用编程接口处,响应于受管运行时环境执行用户代码的指令来接收第一标识符、第二标识符和有效载荷,所述第一标识符和所述第二标识符一起形成能用于从所述应用编程接口请求所述有效载荷的查找数据,所述有效载荷包括以下的一者或多者:元数据、在执行时计算所述元数据的代码、指向在执行时计算所述元数据的代码的引用、标识与所述元数据相关联的逻辑元素的第二标识符;以及
在存储中维护所述第一标识符、所述第二标识符、以及所述有效载荷。
10.如权利要求9所述的计算机存储介质,其特征在于,进一步包括在所述应用编程接口处接收附加信息,所述附加信息包括以下的一者或多者:编组标识符、“应用于”参数、指示所述指令何时将被移除或禁用的参数、以及指示用于与所述元数据相关联的递归层级的参数。
CN201380043599.0A 2012-08-16 2013-08-15 用于受管运行时中的元素的命令式属性 Active CN104583970B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/586,896 2012-08-16
US13/586,896 US9135034B2 (en) 2012-08-16 2012-08-16 Imperative attribution for elements in managed runtimes
PCT/US2013/055218 WO2014028784A1 (en) 2012-08-16 2013-08-15 Imperative attribution for elements in managed runtimes

Publications (2)

Publication Number Publication Date
CN104583970A true CN104583970A (zh) 2015-04-29
CN104583970B CN104583970B (zh) 2017-05-31

Family

ID=49083768

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380043599.0A Active CN104583970B (zh) 2012-08-16 2013-08-15 用于受管运行时中的元素的命令式属性

Country Status (4)

Country Link
US (1) US9135034B2 (zh)
EP (1) EP2885712B1 (zh)
CN (1) CN104583970B (zh)
WO (1) WO2014028784A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8978007B2 (en) * 2011-06-30 2015-03-10 Microsoft Technology Licensing, Llc Static metadata in dynamic programs
US9135034B2 (en) * 2012-08-16 2015-09-15 Microsoft Technology Licensing, Llc Imperative attribution for elements in managed runtimes
US9274920B2 (en) * 2012-09-28 2016-03-01 Dialog Semiconductor B.V. Code profiling in embedded ULE applications
US11392482B2 (en) 2019-01-03 2022-07-19 Microsoft Technology Licensing, Llc Data breakpoints on certain kinds of functions

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1461991A (zh) * 2002-05-30 2003-12-17 惠普公司 在计算机程序正在运行时改进它们的性能
US20040049766A1 (en) * 2002-09-09 2004-03-11 Bloch Joshua J. Method and apparatus for associating metadata attributes with program elements
CN101416164A (zh) * 2003-10-28 2009-04-22 罗伯特·博世有限公司 用于基于学习模型的生命周期诊断的方法和系统

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6353923B1 (en) 1997-03-12 2002-03-05 Microsoft Corporation Active debugging environment for debugging mixed-language scripting code
US6164841A (en) 1998-05-04 2000-12-26 Hewlett-Packard Company Method, apparatus, and product for dynamic software code translation system
US20040205720A1 (en) 2001-04-30 2004-10-14 Robert Hundt Augmenting debuggers
US6836884B1 (en) 2001-06-04 2004-12-28 Microsoft Corporation Method and system for editing software programs
US20050091535A1 (en) 2003-10-24 2005-04-28 Microsoft Corporation Application identity for software products
US7451432B2 (en) 2004-10-01 2008-11-11 Microsoft Corporation Transformation of componentized and extensible workflow to a declarative format
US7716246B2 (en) * 2005-11-30 2010-05-11 Microsoft Corporation Dynamic mechanism for providing metadata
US7818722B2 (en) * 2006-06-09 2010-10-19 International Business Machines Corporation Computer implemented method and system for accurate, efficient and adaptive calling context profiling
US8001539B2 (en) * 2007-02-28 2011-08-16 Jds Uniphase Corporation Historical data management
US8291381B2 (en) * 2007-09-27 2012-10-16 Microsoft Corporation Call stack parsing in multiple runtime environments
US9032374B2 (en) * 2008-04-03 2015-05-12 International Business Machines Corporation Metadata-integrated debugger
US8752020B2 (en) 2008-08-21 2014-06-10 International Business Machines Corporation System and process for debugging object-oriented programming code leveraging runtime metadata
US9632909B2 (en) 2008-12-16 2017-04-25 Microsoft Technology Licensing, Llc Transforming user script code for debugging
US8370807B2 (en) 2009-03-12 2013-02-05 Microsoft Corporation Debugging for runtime type systems
US8640104B2 (en) 2009-12-08 2014-01-28 International Business Machines Corporation Computer method and apparatus for debugging in a dynamic computer language
US9262137B2 (en) * 2010-05-27 2016-02-16 Salesforce.Com, Inc. Adding directives for versions of javascript files directly into source code in a multi-tenant database environment
US20120167056A1 (en) 2010-12-23 2012-06-28 Sap Ag Debugger for a metadata-centric development infrastructure
US8661415B2 (en) * 2011-06-06 2014-02-25 Microsoft Corporation Path-sensitive visualizations of aggregated profiling and trace date
US8914776B2 (en) * 2012-05-17 2014-12-16 Microsoft Corporation Assisting development tools through inserted code statements
US9135034B2 (en) * 2012-08-16 2015-09-15 Microsoft Technology Licensing, Llc Imperative attribution for elements in managed runtimes
US9104781B2 (en) * 2012-08-28 2015-08-11 Microsoft Technology Licensing, Llc Obtaining metadata set by imperative statement

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1461991A (zh) * 2002-05-30 2003-12-17 惠普公司 在计算机程序正在运行时改进它们的性能
US20040049766A1 (en) * 2002-09-09 2004-03-11 Bloch Joshua J. Method and apparatus for associating metadata attributes with program elements
CN101416164A (zh) * 2003-10-28 2009-04-22 罗伯特·博世有限公司 用于基于学习模型的生命周期诊断的方法和系统

Also Published As

Publication number Publication date
EP2885712B1 (en) 2021-09-22
US20140053142A1 (en) 2014-02-20
CN104583970B (zh) 2017-05-31
US9135034B2 (en) 2015-09-15
WO2014028784A1 (en) 2014-02-20
EP2885712A1 (en) 2015-06-24

Similar Documents

Publication Publication Date Title
US8418137B2 (en) Adaptive evolutionary computer software products
Businge et al. Eclipse API usage: the good and the bad
Habchi et al. Code smells in ios apps: How do they compare to android?
US9104781B2 (en) Obtaining metadata set by imperative statement
CN109032825B (zh) 一种故障注入方法、装置及设备
Monteiro et al. Bounded model checking of C++ programs based on the Qt cross‐platform framework
CN104583970A (zh) 用于受管运行时中的元素的命令式属性
De Boer et al. Formal specification and verification of JDK’s identity hash map implementation
US10819752B2 (en) Systems and methods for quantitative assessment of a computer defense technique
Khatchadourian et al. Detecting broken pointcuts using structural commonality and degree of interest
Steimann From well-formedness to meaning preservation: model refactoring for almost free
Schmidt et al. Improving SMT solver integrations for the validation of B and Event-B models
Falleri et al. Incremental inconsistency detection with low memory overhead
CN115328458B (zh) 一种业务应用开发方法及装置
Rahman et al. MMRUC3: A recommendation approach of move method refactoring using coupling, cohesion, and contextual similarity to enhance software design
Hafiz et al. Growing a language: An empirical study on how (and why) developers use some recently-introduced and/or recently-evolving JavaScript features
Albert et al. Systematic testing of actor systems
Stolz et al. Refactoring and active object languages
Greci et al. A framework for contract-policy matching based on symbolic simulations for securing mobile device application
Körner et al. plspec–a specification language for prolog data
Meyerhöfer et al. Estimating non-functional properties of component-based software based on resource consumption
Henaien et al. Performing implicit induction reasoning with certifying proof environments
CN111694729A (zh) 应用测试方法、装置、电子设备和计算机可读介质
Chaki et al. Regression verification for multi-threaded programs (with extensions to locks and dynamic thread creation)
Azadmanesh et al. Language-independent information flow tracking engine for program comprehension tools

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20171016

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.