对运行时行为的基于分层指令的管理的制作方法

文档序号:11890438阅读:186来源:国知局
对运行时行为的基于分层指令的管理的制作方法与工艺

在相关司法中的适用法律所准许的限度内,本公开通过援引共同拥有的提交于2014年3月27日的美国专利申请第14/227,036(“’036申请”)全部而将其纳入于此。

背景

一些计算机程序环境提供针对一个或多个动态行为的运行时支持。一些动态行为包括动态分派、反射、向下类型转换、自修改代码、动态类型校验和/或即时编译。动态分派涉及在运行时选择多形态方法(或函数)的哪个实现从给定调用被调用。类型自测涉及正在运行的程序检查其自己的值、元数据、属性和/或函数;反射则进一步深入,因为它涉及正在运行的程序更改其自己的值、元数据、属性和/或函数。向下类型转换或类型细化涉及将基类的引用类型转换到该基类的导出类。自修改涉及程序在运行时修改其自己的代码。动态类型校验涉及在程序正在运行的同时验证程序的类型安全性。即时(JIT)编译涉及在程序正在运行的同时编译该程序的代码;已编译代码可以是本机代码或者它可以是接着例如被解释的更高级的代码。一些动态编程语言在运行时执行被执行的程序行为,而非在针对静态编程语言的编译期间,例如通过添加新的代码、扩展对象和它们的定义和/或修改类型系统来扩展程序。

在一个环境中对动态特征和静态特征进行平衡可能是具有挑战性的。在具有动态行为的程序也可具有诸如静态类型校验、静态编译、和/或在应用开始执行之前在提前编译期间对其所有组件已经被标识的可执行应用的创建的特征的意义上,平衡有时是可能的。动态特征可以提供从熟悉的静态编译的程序中丢失的灵活性和能力。然而,在许多情景中,对程序的静态编译准许较小且较不复杂的运行时,并且提供了关于在测试期间程序的行为和/或何时校验程序以获取恶意软件的更大的确定性。相应地,对静态功能性和动态功能性进行平衡的新的方式可能是有用的并且是计算机编程领域的坚实进步。

概述

考虑了支持动态行为(诸如反射)的同时减少或消除对JIT编译和大型运行时平台的依赖的技术挑战。在这种上下文中,计算机程序的类型和类型成员可被视为具有“语义特征”,其例如指定类型和类型成员是否能从程序的运行时平台中被安全地省略而不具有执行错误的风险。在过去,这些语义特征被无条件地假定(因为运行时包括所有动态类型和类型成员(潜在过度的资源成本))或者语义特征由各个元素的属性来指定(其要求大量的冗长的细节并且通常还要求访问程序的源代码)。本文中呈现了替代方式。

虽然在没有JIT编译的情况下支持反射的挑战刺激了本文中描述的一些实施例的一些方面的发展,但是本发明既不被限于反射支持也不被限于JIT编译的消除。例如,一些实施例涉及选择性地将语义特征附加到计算机程序的类型和类型成员的技术问题。一些实施例涉及降低目标环境(诸如智能电话和平板)中的运行时要求的技术问题。一些实施例涉及扩展提前编译的能力以便促进应用测试的技术问题。一些实施例提供针对管理反射和其他动态行为的元数据的技术问题的工具和技术。编程领域的技术人员还将认识由文本所述的创新所解决的其它技术问题。

在一些实施例中,人类或软件进程用户获得来自数字存储的指令文档。指令文档旨在帮助在运行时环境中管理计算机程序的类型和类型成员的运行时行为特征。该环境可以是例如相对于熟悉的运行时具有缩减大小的运行时的智能电话或平板。计算机程序具有用至少一种数据类型化的编程语言编写的源代码。

在一些实施例中,用户可以通过读取已经被生成的指令文档文件来获得指令文档,或者用户可以通过例如生成指令文档来获得指令文档。指令文档包含采用也能够被软件解析的格式(诸如XML、JSON、YAML、或SDL格式(这些缩写词在以下被定义在详细描述中))的人类可读指令。与用语义属性来注释源代码的办法不同,指令文档的指令不与该指令所涉及的计算机程序的源代码交织。结果,不一定需要对源代码的访问来进行对指令的有效使用。具体地,不需要程序的源代码就能通过添加指令、删除指令、或更改指令来修改适用的指令文档。给定程序可以服从例如针对不同运行时来被定制的不同指令文档。

在用户检查后,指令文档公开各种运行时行为特征指令。例如,一指令可指定,计算机程序源代码的类型T在环境中是要求类型,或者T在环境中是可任选类型,或者T在环境中是禁止类型。类似地,另一指令可以指定,计算机程序源代码的类型成员M在环境中是要求类型成员,是可任选的,或者在环境中是禁止的。在一些情形中,一指令指定在环境中针对类型T程度D被启用、或者D被禁用,并且在一些情形中,一指令指定在环境中针对类型成员M程度D被启用,或者在环境中D针对M被禁用。

在一些实施例中,指令可以引用程序项组;一些示例包括以下组运行时行为特征指令:应用(Application)指令、库(Library)指令、汇编件(Assembly)指令、命名空间(Namespace)指令。在一些实施例中,指令可以引用组的各分量,诸如以下的组分量运行时行为特征指令:类型(Type)指令、类型实例化(TypeInstantiation)指令、方法(Method)指令、方法实例化(MethodInstantiation)指令、字段(Field)指令、属性(Property)指令、事件(Event)指令。在一些实施例中,指令可以迫使泛型实例化的存在,假设给出该指令的编译器符合该指令。在一些实施例中,指令可以对类型作出间接引用;一些示例包括以下参数运行时行为特征指令:参数(Parameter)指令、类型参数(TypeParameter)指令、泛型参数(GenericParameter)指令。

在一些实施例中,指令可以能够引用以下程度中的一者或多者:指代经由反射的对类型实例的运行时激活的激活程度;指代经由反射允许对类型的运行时自测的浏览程度;指代经由反射的运行时访问的动态程度;指代启用对基于反射的序列化和/或去序列化的反射支持的运行时序列化程度;或者指代采用特定格式(诸如XML或JSON)的静态合成的序列化的静态序列化程度。在一些实施例中,准许的程度值包括以下各项中的两个或更多个:要求全部(Required-All)、要求公开并且内部(Required-PublicAndInternal)、要求公开(Required-Public)、全部(All)、公开且内部(PublicAndInternal)、公开(Public)、包括的(Included)、自动(Auto)、或排除的(Excluded)。在给定的实施例和环境中,各个程度可以适用于类型、它们的实例构造函数、它们的特性设置函数、它们的特性获得函数、字段和/或所有类型成员。在一些实施例中,各个程度被自动传播通过相关的类型和类型成员。

在一些实施例中,指示被提交给提前编译器以指示以下内容以供在编译期间使用:(a)程度D是否适用于类型T,(b)程度D是否适用于类型成员M,(c)类型T是否是要求的,以及(d)类型成员M是否是要求的。如果类型T或类型成员M不是要求的(至少根据指令文档),则编译器和运行时可以通过分别略去对T或对M的动态支持来相应地降低空间和处理要求。为了确定所提交的指令针对给定类型T或给定类型成员M指示了什么,在一些实施例中,编译器寻找适用于T(或适用于M,按具体情形而定)的所有指令,应用合成规则以产生合成指令,并且接着根据合成指令来确定结果。编译器接着如由指令文档所指示地将计算机程序源代码的至少一部分编译成本机代码。

所给出的示例只是说明性的。本

技术实现要素:
并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。相反地,提供本发明内容是为了以简化的形式介绍将在以下具体实施方式中进一步描述的一些技术概念。本发明由权利要求书限定,在本发明内容与权利要求书有冲突的情况下,应该以权利要求书为准。

附图简述

将参考附图给出更具体的描述。这些附图只示出了选定的方面,且因此不完全确定覆盖或范围。

图1是解说具有至少一个处理器和至少一个存储器的计算机系统的框图,该至少一个处理器和至少一个存储器在软件的控制之下与彼此交互,该软件用于管理在目标运行时环境中计算机程序的类型和类型成员的运行时行为特征,该目标运行时环境不必是与计算机程序在其中已经编译、正被编译、或将要被编译的编译环境相同的环境,图1还解说了可存在于多个网络节点上的操作环境中的其它项,并且图1还解说了经配置的存储介质(与单纯的信号相对)实施例,其中操作环境解说编译环境并且还解说目标运行时环境;

图2是解说一示例体系结构中的运行时行为特征管理的各方面的框图;

图3是进一步解说在一些实施例中符合图2的该方面的参数运行时行为特征指令的框图;

图4是进一步解说在一些实施例中符合图2的该方面的组运行时行为特征指令的框图;

图5是进一步解说在一些实施例中符合图2的该方面的运行时行为特征指令程度的框图;

图6是解说本文描述的一些过程的步骤和经配置的存储介质实施例的流程图;

图7是进一步解说在一些实施例中符合图2的该方面的组分量运行时行为特征指令的框图;以及

图8是图6流程图的延续。

详细描述

概览

本文中描述的创新中的一些方面响应于由以下技术问题造成的挑战而产生:当反射语义的实现没有被执行引擎(即,被运行时)提供时,向这些反射语义提供提前编译系统会产生小而快的二进制文件。然而,创新也可适用于原始上下文之外。

一些实施例提供或利用针对将语义特征附加到计算机程序的类型和类型成员所定制的软件可解析数据格式化语言。在一些实施例中,软件可解析数据格式化语言是诸如XML之类的标记语言,并且在一些实施例中,其是诸如YAML之类的数据序列化标准。软件可解析数据格式化语言在本文中还被统称为“格式”或“格式语言”。用格式语言编写的指令文档与程序的原始源代码分离,但在将该源代码编译或解释为受管代码汇编件、库等时被采用。编译或解释指代用该语言编写的用于确定是否将语义特征应用到特定类型和/或类型成员的指令。语言特征本身接着由编译器、解释器和/或运行时库来实施。用该语言编写的指令文档由此在被应用到特定程序或库时控制编译器、解释器和/或运行时的语义方面,而不被卷入该程序或库的源代码中。

在一些实施例中,用该语言编写的指令文档是分层指令集合。这样的指令以分层结构来相对于彼此地被组织;该结构例如通过嵌套命名空间和嵌套类型来分层地反映受管计算机程序的源代码中使用的编程语言的各组织概念的组合。在一些实施例中,源代码将被编译为单个或多个受管代码汇编件。这种分层组织允许应用到整个应用、库、跨各汇编件的命名空间、汇编件组、特定汇编件、汇编件内的命名空间、各个类型和/或各个类型成员的指令。这种指令提供对该分层内多个层处的运行时行为特征的控制,从而给予用户在若干个层中的每一层处细化或超控特征的能力。

在一些实施例中,“程度”是语义特征的名称。该语言的指令针对该指令所应用到的类型和/或类型成员来开启或关闭程度。就指定指令中的一个程度不影响其他程度而言,各程度是彼此正交的。如果多个指令应用到一类型或类型成员,则程度根据用于合成指令的规则来针对该类型成员开启或关闭。这允许针对库的元素以及针对在对于应用对库的使用而言适当时还可被超控的那些特征来指定特征。可以从本教导中意识到,程度集也可从本文中给出的示例中扩展或修改。

在一些实施例中,用于应用并合成指令的规则确定给定类型或类型成员是否具有特定语义特征。在一些实施例中,一些指令可做出对类型的间接引用,从而暗示被用于特定上下文中的类型的程度的应用。在一些实施例中,指令可迫使泛型类型或泛型方法的特定实例化在运行时存在。

本文中描述的一些创新的一个方面是具体句法。一个说明性的具体句法利用XML,并且其可由此被符合本文中提供的教导的XSD文档所描述和约束。熟悉的编译器或解释器可被本领域的技术人员修改来解析XML指令文档,从而识别符合本文中教导的语义指令。更一般地,本公开教导了抽象句法,即指令的英语描述,其支持用于安排、合成和使用指令的说明性规则。指令定义语言的示例语义用英语被给出为抽象句法。

此处描述的某些实施例可以在较宽泛的上下文中查看。例如,诸如行为、编译、执行、自测、参数、要求和类型等概念可以与特定实施例相关。然而,并不能从宽泛上下文的可用性中得出此处对抽象概念寻求专有权;它们并不是专有的。相反,本发明聚焦于适当具体的实施例,其技术效果完全或部分地解决特定技术问题。涉及行为、编译、转换、执行、自测、参数、要求和/或类型的其他介质、系统和方法在本范围之外。因此,在对本发明的正确理解下,也避免了模糊性、抽象性、缺少技术性和附带的证据问题。

技术特性

本文描述的实施例的技术特征对于本领域技术人员而言将显而易见,并且对于各种关注的读者而言也以各种方式显而易见。第一,一些实施例解决诸如在没有JIT编译的情况下支持反射、选择性地将语义特征附加到类型和类型成员、降低运行时要求、扩展提前编译能力、和/或管理用于反射和其它动态行为的元数据等技术问题。本领域技术人员还将认识由文本所述的创新所解决的其它技术问题。

第二,一些实施例包括诸如计算硬件等技术组件,这些技术组件以除了通用计算机中的典型交互之外的方式与软件交互。例如,除了诸如一般的存储器分配、一般的存储器读写、一般的指令执行和某种I/O排序等普通交互之外,本文描述的一些实施例还包括用于创建和/或使用以格式语言编写的指令,该指令被设计成帮助管理运行时行为特征。

第三,一些实施例所提供或受到一些实施例影响的技术效果包括合成指令的产生、泛型实例化的强行存在、以及特定元数据在本机代码中的编译器包括/排除。

第四,一些实施例包括技术自适应,诸如相互正交且在指令的分层结构内操作的指令程度。

第五,一些实施例通过影响技术考量的指令来支持编译器的经修改的技术功能,技术考量诸如特定类型或类型成员是(a)目标运行时环境中要求的,(b)在该环境是可任选的,还是(c)在该环境中被禁止的。

第六,一些实施例的技术优点包括在无需访问源代码的情况下指定类型和类型成员的存在和/或缺失的能力、缩减的运行时大小、缩减的运行时处理工作负载、以及在应用被发布到市场之前完整地测试该应用的行为的改进的机会。

一些首字母缩写

AOT:提前

API:应用程序编程接口

CD:紧致盘

DVD:数字视频盘或数字多功能盘

ECMA:前欧洲计算机制造商协会;这一首字母缩写已经被国际Ecma的非首字母“Ecma”所取代。

JIT:即时

JSON:JavaScript对象记法

RAM:随机存取存储器

ROM:只读存储器

SDL:简单声明性语言

URI:统一资源标识符

XML:可扩展标记语言

XSD:XML模式定义

YAML:YAML不是标记语言

一些术语

下面将参考诸如附图中所示出的那些示例性实施例,并使用特定语言来对其进行描述。但是,相关技术领域的且拥有本公开内容的技术人员将想到的对此处所示出的特征的更改和进一步的修改以及对此处的特定实施例所示的抽象原理的其他技术应用,都应该被视为在权利要求的范围内。

在本公开中阐明了各术语的含义,因此应该在仔细关注这些阐明的情况下阅读权利要求书。给出了具体示例,但是相关领域的技术人员将理解其他示例也可落在所使用的术语的含义范围内以及落在一个或多个权利要求的范围内。各术语不一定需要具有与它们在一般使用中(尤其在非技术使用中)或在特定行业使用中、或在特定字典或一组字典的使用中所具有的意义相同的意义。附图标记可以与各种措词一起使用,以帮助示出术语的广度。从给定文本片段中省略附图标记不一定意味着没有通过文本讨论附图的内容。发明人声明并行使他们对他们自己的词典的权利。所引用的术语被显式定义,但在隐式定义术语时不使用引用标记。这里可在具体实施方式中和/或在申请文件的别处显式地或隐式地定义术语。

如此处所使用的,“计算机系统”可包括例如一个或多个服务器、主板、处理节点、个人计算机(便携式或非便携式)、个人数字助理、智能电话、蜂窝或移动电话、至少具有处理器和存储器的其他移动设备、和/或提供至少部分地由指令来控制的一个或多个处理器的其他设备。指令可以采用存储器中的固件或其他软件和/或专用电路的形式。具体而言,虽然可发生许多实施例在工作站或膝上型计算机上运行,但是其他实施例也可以在其他计算设备上运行,并且任何一个或多个这样的设备都可以是给定实施例的一部分。

“多线程化”计算机系统是支持多个执行线程的计算机系统。术语“线程”应被理解为包括能够或经历调度(以及可能同步)的任何代码,并且也可以另一名称来为人所知,如“任务”、“进程”或“协同例程”等。线程可以并行地、按顺序、或以并行执行(例如,多处理)和顺序执行(例如,时间分片)的组合来运行。在各种配置中都已设计了多线程化环境。执行线程可以并行地运行,或者线程可以被组织为并行执行,但是实际上轮流按顺序执行。例如,多线程化可以通过在多处理环境中在不同核上运行不同线程、通过对单个处理器核上的不同线程进行时间分片、或者通过时间分片和多处理器线程化的某种组合来实现。线程上下文切换可以例如由内核的线程调度器、由用户空间信号、或由用户空间和内核操作的组合来发起。线程可以轮流对共享数据进行操作,或者例如每一线程都可以对其自己的数据进行操作。

“逻辑处理器”或“处理器”是单个独立硬件线程处理单元,如同时多线程实现中的核。作为另一示例,每核运行两个线程的超线程四核芯片具有8个逻辑处理器。逻辑处理器包括硬件。术语“逻辑”被用来防止给定芯片具有至多一个处理器的错误结论;“逻辑处理器”和“处理器”在此可互换地使用。处理器可以是通用的,或者它们可被定制用于特定用途,例如图形处理、信号处理、浮点算术处理、加密、I/O处理等等。

“多处理器”计算机系统是具有多个逻辑处理器的计算机系统。多处理器环境存在于各种配置中。在一给定配置中,所有处理器可在功能上相同,而在另一配置中,由于具有不同的硬件能力、不同的软件分配或两者,某些处理器可与其他处理器不同。取决于配置,处理器可在单个总线上紧密地彼此耦合,或它们可松散地耦合。在某些配置中,处理器共享一中央存储器,在某些配置中,它们各自具有自己的本地存储器,在某些配置中,存在共享和本地存储器两者。

“内核”包括操作系统、系统管理程序、虚拟机、BIOS代码、以及类似的硬件接口软件。

“代码”指的是处理器指令、数据(包括常量、变量、以及数据结构)、或指令和数据两者。

“程序”在本文中被广泛地使用以包括应用、内核、驱动程序、中断处理程序、库、以及程序员(也被成为开发者)编写的其他代码。

如此处所使用的“包括”允许附加元素(即,包括意味着包含),除非另外指明。“由……构成”意味着基本上由……构成或完全由……构成。当X中的非Y部分(如果有的话)可以被自由更改、移除和/或添加而不在考虑所述权利要求时更改所要求保护的实施例的功能时,X基本上由Y构成。

“进程”在此有时被用作计算科学领域的术语,并且在该技术意义上涵盖资源使用者,即例如协同例程、线程、任务、中断处理程序、应用进程、内科进程、过程和对象方法。“进程”在此还可被用作本领域的专利法术语,例如,在描述与系统权利要求或制品(经配置的存储介质权利要求)相对的过程权利要求时。类似地,“方法”在此有时被用作计算科学领域内的技术术语(一种“例程”)并且还被用作本领域的专利法术语(“过程”)。技术人员将理解在特定实例中旨在是什么含义,并且还将理解给定所要求保护的过程或方法(在专利法的意义上)有时可使用一个或多个过程或方法(在计算科学意义上)来实现。

“自动地”指的是使用自动化(例如,由用于这里所讨论的特定操作和技术效果的软件配置的通用计算硬件),与没有自动化相对。具体而言,“自动”执行的步骤在理论上或在一个人的意识中不是用手执行的,但这些步骤可由人类来启动或由人类来交互式地引导。自动化步骤使用机器执行的以获得在没有由此提供的技术交互的情况下将不会实现的一个或多个技术效果。

技术人员理解技术效果是技术实施例的假定目标。仅仅是在一实施例中涉及计算并且这些计算也可以在没有技术组件(例如,通过纸和笔或甚至作为脑力步骤)的情况下执行的事实不会移除技术效果的存在或更改该实施例的具体且技术的特性。

“在计算上”同样指的是使用计算设备(至少是处理器加上存储器),且排除了仅通过人类思考或仅通过单独的人类动作而获得结果。例如,用纸和笔作算术不是如本文所理解的在计算上作算术。计算结果更快、更宽泛、更深、更准确、更一致、更全面和/或以其他方式提供超出单独的人类表现范围的技术效果。“计算步骤”是通过计算执行的步骤。然而,“自动地”和“在计算上”都不一定意味着“立即”。“在计算上”和“自动地”在此可互换地使用。

“抢先式”意味着没有来自用户的直接请求。的确,用户甚至可能直到已经向该用户呈现一实施例中的抢先式步骤的结果才意识到该步骤是可能的。除非另外指明,否则此处描述的任何计算和/或自动化步骤都可以被抢先完成。

贯穿本文,对任选复数“(诸)”的使用意味着一个或多个所指示的特征存在。例如,“(诸)处理器”意味着“一个或多个处理器”或等效于“至少一个处理器”。

贯穿本文,除非另外明确表明,否则对过程中的某一步骤的任何引用都假定该步骤可直接由所关注的一方执行和/或由该方通过介入机制和/或介入实体而间接地执行,且仍然在该步骤的范围内。也就是说,除非直接执行是被明确表明的要求,否则并不要求由关注方对步骤的直接执行。例如,涉及某一关注方的对于目的或其他主体的诸如访问、添加、允许、更改、应用、避免、行为、编译、合成、包含、删除、去串行化、指示、禁用、公开、启用、执行、施加、格式化、检查、解释、定位、维护、管理、修改、获得、解析、产生、禁止、读取、叙述、参考、要求、串行化、存储、提交、支持、定标、利用、编写以及访问、被访问、添加、被添加之类的动作的步骤可涉及:诸如由某一其他方执行的转发、复制、上传、下载、编码、解码、压缩、解压、加密、解密、认证、调用等中间动作,但仍被理解为是由该关注方直接执行的。

在参考数据或指令时,要理解这些项配置了计算机可读存储器和/或计算机可读存储介质,从而将其变换为特定物品,而非简单地存在于纸张上、人的头脑中、或仅仅作为例如线路上的传播的信号。除非在权利要求中另外指明,否则权利要求不涵盖信号本身。出于美国专利审查的目的,存储器或其它计算机可读存储介质不是美国专利商标局(USPTO)对In re Nuijten案例的解释下的可授予专利的主题的范围之外的传播信号或载波。

此外,尽管明显相反,但将理解一方面的(a)计算机可读存储介质和计算机可读存储器,和另一方面的(b)也被称为信号介质的传输介质之间的清楚区别。传输介质是传播信号或载波计算机可读介质。相反,计算机可读存储介质和计算机可读存储器不是传播信号或载波计算机可读介质。除非另外声明,否则“计算机可读介质”意味着计算机可读存储介质,而不是传播信号本身。

操作环境

参考图1,用于一个实施例的操作环境100可包括计算机系统102。计算机系统102可以是多处理器计算机系统,或者也可以不是。操作环境可包括给定计算机系统中的一个或多个机器,它们可以群集的、客户机-服务器联网的、和/或对等联网的。个体机器是一计算机系统,且一组协同操作的机器也是计算机系统。给定计算机系统102可以例如用应用被配置用于最终用户、用于管理员、作为服务器、作为分布式处理节点、和/或以其他方式配置。

人类用户104可以经由键入的文本、触摸、语音、移动、计算机视觉、姿势和/或其它形式的I/O,通过使用显示器、键盘和其它外围设备106来与计算机系统102交互。用户界面可支持实施例和一个或多个人类用户之间的交互。用户界面可包括命令行界面、图形用户界面(GUI)、自然用户界面(NUI)、语音命令界面和/或其它界面呈现。用户界面可以在本地台式计算机或例如智能电话上生成,或者它可以从web服务器生成并被发送到客户机。用户界面可被生成为服务的一部分并且它可以与诸如社交网络服务等其它服务集成。给定操作环境包括支持这些不同的用户界面生成选项和使用的设备和基础结构。

例如,自然用户界面(NUI)操作可使用例如语音识别、触摸和指示笔识别、屏幕上和屏幕附近的姿势识别、空中姿势、头部和眼睛跟踪、话音和语音、视觉、触摸、姿势、和/或机器智能的那些方法。NUI技术的一些示例包括触敏显示、话音和语音识别、意图和目的理解、使用深度相机(如立体相机系统、红外相机系统、RGB相机系统、以及这些的组合)的运动姿势检测、使用加速度计/陀螺仪的运动姿势检测、面部识别、3D显示、头部、眼睛和注视跟踪、浸入式增强现实和虚拟现实系统,所有这些都提供更自然的接口,以及用于使用电场传感电极(脑电仪和相关工具)的传感大脑活动的技术。

技术人员将认识到此处在“操作环境”下呈现的上述各方面和其它方面还可形成给定实施例的一部分。本文的标题不旨在提供将特征严格地归类成实施例和非实施例特征类别。

作为另一示例,游戏可以驻留在Microsoft XBOX(微软公司的商标)服务器上。游戏可从控制台购买或者整体或部分在服务器上、在控制台上、或在两者上执行。多个用户可以使用标准控制器、空中姿势、语音或使用诸如智能电话或平板等附随设备来与该游戏交互。给定操作环境包括支持这些不同的使用场景的设备和基础结构。

系统管理员、开发人员、工程技术人员、以及最终用户各自都是特定类型的用户104。代表一个或多个人操作的自动化代理、脚本、回放软件等也可以是用户104。在某些实施例中,存储设备和/或联网设备可以被认为是外围设备。图1中未示出的其他计算机系统可以按各技术方式与计算机系统102进行交互,或者例如通过网络接口设备使用到网络108的一个或多个连接与另一系统实施例进行交互。

计算机系统102包括至少一个逻辑处理器110。计算机系统102与其他合适的系统一样,还包括一个或多个计算机可读存储介质112。介质112可以是不同的物理类型。介质112可以是易失性存储器、非易失性存储器、被安装就位的介质、可移动介质、磁介质、光学介质、固态介质和/或其他类型的物理可持续介质(而不仅仅是传播信号)。具体而言,诸如便携式(即外置)硬盘驱动器、CD、DVD、记忆棒、或其他可移动非易失性存储器介质之类的经配置的介质114在被插入或以其他方式安装时可以在功能上变为计算机系统的技术部分,从而使其内容可被访问以供与处理器110交互并由处理器110使用。可移动的经配置的介质114是计算机可读存储介质112的示例。计算机可读存储介质112的某些其他示例包括内置RAM、ROM、硬盘、以及其他不能被用户104轻松地移走的存储器存储设备。为了符合当前美国专利要求,计算机可读介质、计算机可读存储介质或计算机可读存储器都不是信号本身。

介质114用可由处理器110执行的指令116来配置;“可执行”在此以宽泛的意义被使用以包括机器代码、可解释代码、字节码和/或在例如虚拟机上运行的代码。介质114还被配置有数据118,该数据通过指令116的执行被创建、修改、引用和/或以别的方式用于技术效果。指令116和数据118配置它们所驻留的存储器或其它存储介质114;当该存储器或其它计算机可读存储介质是给定计算机系统的功能部分时,指令116和数据118还配置该计算机系统。在某些实施例中,数据118的一部分代表了诸如产品特征、清单、物理测量值、设定、图像、读数、目标、卷等等之类的现实世界的项。这一数据还通过备份、还原、提交、中止、重新格式化和/或其它技术操作来变换。

尽管一实施例可被描述为被实现为由计算设备(例如台式计算机、服务器计算机、智能电话、平板、膝上型计算机或游戏控制台)中的一个或多个处理器执行的软件指令,但这一描述并非意味着穷尽所有可能的实施例。技术人员将会理解还可经常整体地或部分地直接用硬件逻辑来实现相同或相似功能,以提供相同或相似的技术效果。作为对软件实现的替换或补充,本文描述的技术功能可以至少部分地由一个或多个硬件逻辑组件来执行。作为示例并且不排除其它实现,一实施例可包括硬件逻辑组件,诸如现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统组件(SOC)、复杂可编程逻辑器件(CPLD)和类似组件。一实施例的组件可基于它们的输入、输出和/或它们的技术效果来被分组成各个交互功能模块。

在一些所解说的环境100中,一个或多个应用或其它程序120具有伴随例程124和其它部分的源代码122。软件开发工具126(诸如提前编译器128、即时编译器130、调试器、和剖析器)通过产生和/或将源代码122转换成本机代码、中间语言代码、和/或另一经编译形式140来协助软件开发。源代码122和其它信息通常被存储在文件132中,文件132被保存在非易失性存储112中,可以从非易失性存储112将文件132读取到易失性工作存储器112中。更一般地,代码122、工具126、以及图中和/或本文中讨论的其他项可各自部分地或全部地驻留于一个或多个硬件介质112中,由此配置那些介质以实现所有硬件-软件合作操作中固有的“正常”(即,最小公分母)交互的技术效果。除了处理器110(CPU、ALU、FPU和/或GPU)、存储器/存储介质112、显示器134和电池之外,操作环境还可包括其它硬件,诸如总线、电源、有线和无线网络接口卡和加速度计,这些硬件的各自操作在此被描述为并非已经对技术人员显而易见。CPU是中央处理单元、ALU是算术和逻辑单元、FPU是浮点处理单元而GPU是图形处理单元。

在每一环境100、101、103包括处理器110和存储器112并且每一环境100、101、103还常常包括图1中示出的其它项的意义上,操作环境100解说编译环境101和目标运行时环境103两者,在编译环境101中对给定程序进行编译,在目标运行时环境103中经编译程序执行。然而,本领域技术人员理解,许多程序在一个环境中被编译并且接着在一个不同的环境中被执行,从而一张附图帮助解说环境101和103两者的单纯事实并不意味着那些环境之一中存在的每一事物都必然存在于另一环境中。具体地,编译环境101将包含不一定存在于运行时环境103中的静态编译器128以及源代码122,而运行时环境103将包含不一定存在于编译环境101中的运行时136。

给定编译环境101可包括向开发者提供一组协调的软件开发工具126(诸如编译器、源代码编辑器、剖析器、调试器等)的集成开发环境(IDE)138。对于一些实施例,合适的操作环境100中的一些包括或帮助创建被配置成支持程序开发的Visual开发环境(微软公司的商标)。一些合适的操作环境100包括环境(Oracle America有限公司的商标),并且一些操作环境包括利用诸如C++或C#(“C-Sharp”)等语言的环境,但本文的教导适用于各种各样的程序设计语言、程序设计模型、以及程序,以及本质上适用于软件开发领域之外的使用内联的技术努力。

在图1中以轮廓形式示出了一个或多个项来强调它们不一定是所示操作环境的一部分,但是可以与此处讨论的操作环境中的各项互操作。未采用轮廓形式的项在任何附图或任何实施例中也不一定是必需的。图1是为了方便而提供的;在图1中包括一项目不暗示该项目或对该项目的描述使用在本发明之前是已知的。

系统

图2帮助解说了适用于一些实施例的架构的各方面;下面还参考了其它附图。在一个实施例中,计算机系统102包括采用一个或多个单核和/或多核处理器形式的逻辑处理器110、以及与逻辑处理器112可操作的通信的存储器112。存储器112包括RAM、硬盘、和/或其它易失性或非易失性存储设备。计算机程序源代码122驻留在存储器中的至少一个源代码文件132中。除非另外指明,在本文中假定,源代码122没有会阻止编译814的惯常错误,诸如编程语言句法错误、未定义的标识符、对未声明函数的引用、静态类型违背等。在本文中也被称为提前编译器或AOT编译器的静态编译器128是系统102的一部分。

指令文档202在存储器112中驻留在计算机程序源代码122的编译部分640的外部。指令文档202包括用人类可读软件可解析格式206编写620的运行时行为特征指令204。在一些实施例中,指令204用以下格式206中的至少一个来编写:XML格式、JSON格式、YAML格式和/或SDL格式。当XML格式或句法上类似的格式被使用时,指令文档204包括元素224和属性226;一些示例稍后在本文中给出。

如本文中使用的,“编译部分”包括以至少一个编程语言636编写的源代码语句,并且尤其包括具有由该编程语言定义的定界符的注释。并且,根据C#(C-sharp)编程语言定义的属性在源代码中这些属性出现在其中的编译部分内。

由于指令文档202驻留在计算机程序源代码122的任意编译部分640的外部,所以源代码和指令文档物理上不关联,不同于例如C#属性与其他C#源代码关联的方式。作为源代码122和指令204之间分离的结果,源代码122一般可用传统方式来被使用634(虽然没有获得本文中讨论的益处),而传统IDE、传统编译器或不识别指令文档的其他工具没有给予对指令文档202的任何关注。但是,源代码122还可通过适当修改的编译器以符合指令204并根据本文中描述的各技术的方式来被编译814,以获得对应的益处,诸如在程序的执行816期间对该程序的运行时行为特征的增加的控制。

在一些实施例中,运行时行为特征指令204包括以下中的至少一个:对于编译器128的计算机程序源代码122的类型T是要求类型208的指令204、对于编译器128的源代码122的类型T是禁止类型208的指令204、对于编译器128的源代码122的类型成员M是要求类型成员210的指令204或对于编译器218的源代码122的类型成员M是禁止类型成员210的指令204。在一些实施例中,类型208和/或类型成员210还可或可替代地通过使用指令204来被指定为任选的。

在一些实施例中,指令204包括以下中的至少一个:对于编译器128的程度D是类型T的启用程度212的指令204、对于编译器的程度D对于类型T禁用的指令204、对于编译器的程度D对于类型成员M启用的指令204或对于编译器的程度D对于类型成员M禁用的指令204。

在由逻辑处理器110对适当增强的编译器128的执行期间,编译器128将计算机程序源代码122的至少编译部分640从源代码文件132和/或中间语言文件132编译814成至少一个本机代码文件132或其它已编译140文件,并且如由指令文档202所指示地这么做。例如,当指令204指定802动态程度针对类型T被启用时,一个创新编译器128生成T的垃圾收集布局的描述以及T的实现接口列表,并且将该元数据映射到表示T的本机代码。当指令204指定另一类型T1具有禁用反射但准许自测的程度时,这一编译器128生成具有T的成员名称及其类型的元数据,但不创建到本机代码或T的垃圾收集布局的描述的运行时映射。这一编译器128还生成用于接口方法和用于虚拟方法、用于在被调用时具有边界校验的方法、以及用于在反射API与被调用方法的调用约定之间的调用约定转换的弹跳代码。响应于指令204的编译器128活动或节制的其它示例和描述在以上标识且通过援引纳入于此的‘036申请中提供。

在一些实施例中,指令文档202包括804至少一个指令204,其是以下参数运行时行为特征指令214中的一个:参数(Parameter)指令302、类型参数(TypeParameter)指令304、或泛型参数(GenericParameter)指令306。在一些实施例中,指令文档202包括804至少一个指令204,其是以下组运行时行为特征指令216中的一个:应用(Application)指令402、库(Library)指令404、汇编件(Assembly)指令406或命名空间(Namespace)指令408。在一些实施例中,指令文档202包括804至少一个指令204,其是以下组分量运行时行为特征指令218中的一个:类型(Type)指令702、类型实例化(TypeInstantiation)指令704、方法(Method)指令706、方法实例化(MethodInstantiation)指令708、字段(Field)指令710、特性(Property)指令712或事件(Event)指令714。在一些实施例中也可使用642其他种类的指令204来经由元数据、到本机代码的映射和/或通过静态编译器128对弹跳代码的生成来控制806运行时行为特征。

在一些实施例中,指令文档202包括804叙述具有值502的程度212的至少一个指令204。例如,在一些实施例中,激活程度504指类型实例的运行时激活。在一些实施例中,浏览程度506指对各类型的运行时自测。在一些实施例中,运行时序列化程度508指运行时序列化和/或去序列化。在一些实施例中,动态反射程度510指经由反射的运行时访问。在一些实施例中,静态合成的序列化程度512指编译时序列化和/或去序列化。在一些实施例中,指令具有以下程度值502中的一个或多个:要求全部(Required-All)、要求公开并且内部(Required-PublicAndInternal)、要求公开(Required-Public)、全部(All)、公开且内部(PublicAndInternal)、公开(Public)、包括的(Included)、自动(Auto)、或排除的(Excluded)。

在一些实施例中,创新编译器128执行指令116,指令116将至少一个合成规则222应用到至少两个运行时行为特征指令204以产生一合成的运行时行为特征指令220。合成规则222的示例在本文中稍后提供。

在一些实施例中,创新编译器128执行输出本机代码140的指令116,本机代码140响应于至少一个运行时行为特征指令306来实例化泛型参数。可使用熟悉的泛型实例化(generic instantiation)技术,但是在这个示例中,该技术被创新指令文档202控制。

在某些实施例中,诸如人类用户I/O设备(屏幕、键盘、鼠标、图形输入板、话筒、扬声器、运动传感器等等)之类的外围设备106将可以在操作上与一个或多个处理器110和存储器进行通信。然而,一实施例也可以深嵌入在技术系统中,以便没有人类用户104直接与该实施例进行交互。软件进程可以是用户104。

在某些实施例中,该系统包括通过网络连接的多个计算机。网络接口设备可以使用例如诸如分组交换网络接口卡、无线收发机或电话网络接口之类的组件提供对网络108的接入,并可存在于给定计算机系统中。然而,一实施例也可以通过直接存储器存取、可移动非易失性介质、或其他信息存储-检索和/或传输方法来传递技术数据和/或技术指令,或者,计算机系统中的一实施例可以在不与其他计算机系统进行通信的情况下操作。

许多实施例驻留在单个设备上并且在单个设备上操作,诸如特定智能手机、特定平板或特定膝上型计算机或工作站或服务器箱。然而,一些更广泛的实施例在“云”计算环境和/或“云”存储环境中操作,其中计算服务不是自有的,而是按需提供的。例如,指令文档202以及被该文档202指导的创新AOT编译器可以在联网云中的开发系统102上,经编译的代码104可被存储在云内的其他设备(服务器)中以用于通过应用市场来呈现,并且购买的/租用的应用程序120可在又一云设备102(诸如消费者的智能电话或平板)上执行并配置显示。

过程

图6和图8共同地在流程图600中示出一些过程实施例。各附图中示出或以其他方式公开的技术过程可以在某些实施例中自动地执行,例如通过编译器128在指令文档202的控制之下并且需要极少或不需要同时发生的实况用户输入。除非另外指明,否则过程也可以部分自动地且部分手动地执行。在一给定实施例中,可以重复过程的零个或更多个所示出的步骤,有可能利用不同的参数或数据来操作。一实施例中的各步骤也可按与图6和8中列出的从上到下次序不同的次序来完成。步骤可以串行地、以部分重叠的方式、或完全并行地执行。遍历流程图600以指出在过程中执行的步骤的次序可以在过程的一次执行与该过程的另一次执行之间不同。流程图遍历次序也可以在一个过程实施例与另一过程实施例之间不同。各步骤还可以被省略、组合、重命名、重组、或以其他方式偏离所示出的流程,只要所执行的过程是可操作的,并符合至少一个权利要求。

此处提供了帮助示出该技术的各方面的示例,但是在本文内给出的示例并未描述所有可能的实施例。实施例不仅限于此处所提供的具体实现、布置、显示、特征、方法或情形。给定实施例可包括例如附加的或不同的技术特征、机制、和/或数据结构,并可以以别的方式偏离此处所提供的示例。

在一些实施例中,人类或软件进程用户104从数字存储112中的文件中获得602指令文档202,该文档先前被存储在数字存储112中。作为示例,人类用户104可以是编写并检查604指令文档202的开发者,而软件进程用户可以是解析606文档202的编译器128或其他开发时工具。在每种情况下,指令文档202旨在帮助在运行时环境103中提供对计算机程序120的类型208和类型成员210的运行时行为特征的管理。“运行时行为特征”的一些示例是自测、反射、动态分派、向下类型转换、自修改程序代码、动态类型校验以及即时编译。对这些行为的“管理”包括要求它们、允许它们、阻止它们以及指示元数据、到本机代码的映射、弹跳代码和/或泛型实例化是否被需要来支持626它们。

运行时环境103可以例如位于智能电话或平板中。一些环境103利用630缩减大小的运行时136、632,缩减大小的运行时与用于多语言平台的熟悉的较大运行时(如由例如微软公司、谷歌公司、Oracle公司或Xamarin公司先前提供的)相比相对较小。一些实施例准许程序120展现动态行为,诸如在执行816期间的反射同时避免624对JIT编译器130的依赖。

计算机程序120具有可跨一个或多个文件132的源代码122。源代码122用至少一种数据类型化的编程语言636来编写,例如,C族语言、BASIC语言、公共语言基础结构语言之一,诸如在标准ECMA-334和ECMA-335中讨论的那些语言、或者许多其它熟悉的或之后开发的数据类型化的编程语言636之一。

在一些实施例中,用户通过读取已经被生成的指令文档文件来获得602指令文档。在一些实施例中,用户通过生成指令文档来获得602它。指令文档202包含采用620也能够被软件解析的格式206(诸如XML、JSON、YAML、或SDL格式)的人类可读指令204。与某些C#编码以及用语义属性来注释源代码122的其他办法不同,指令文档202的指令204不与该指令204所涉及的计算机程序120的源代码122交织。

作为维持618这种分离的结果,对于对指令的有效使用而言,开发者104对源代码122的访问不是必要的。具体而言,程序的源代码不被需要就能通过添加指令204、删除指令204或通过改变类型、类型成员、程度和/或指令的程度值来更改指令204来修改608适用的指令文档202。维持618源代码和指令之间的分离还使得一给定程序120清楚地服从不同的指令文档202成为可能。例如,一给定程序的若干个指令文档202中的每一个可针对不同的运行时环境103被定制622以反映相比于智能手机上在工作站上更大的存储和/或更快的处理的可用性。

在被用户检查604后,指令文档公开一个或多个运行时行为特征指令204。编译器128进行的解析606可类似地在文档202被提交610到编译器128之后来定位612指令204。例如,一指令204可指定802,计算机程序源代码122的类型T在环境103中是要求类型208,或者T在环境103中是可任选类型,或者T在环境103中是禁止类型。类似地,另一指令可以指定802,计算机程序源代码的类型成员M在环境130中是要求类型成员210,是可任选的,或者在环境中是禁止的。在一些情况下,指令指定802程度D在环境中针对类型T被启用或指定D被禁用。类似地,在一些情况下,指令指定802程度D在环境中针对类型成员M被启用或指定D在环境103中针对M被禁用。

在一些实施例中,指令204可被直接提交到创新运行时136以模拟它们的影响,而无需进行干预的编译814。例如,模拟运行时可以是“胖”运行时,其通过垫片(shim)228来过滤动态访问请求,该垫片228基于接收到的指令来允许或拒绝请求。

在一些实施例中,指令204可以能够引用808程序120分量组810;一些实例包括这些组指令216:应用(Application)指令、库(Library)指令、汇编件(Assembly)指令、命名空间(Namespace)指令。在一些实施例中,指令可引用808一组中的各个分量810,诸如在这些组分量指令218中:类型(Type)指令、类型实例化(TypeInstantiation)指令、方法(Method)指令、方法实例化(MethodInstantiation)指令、字段(Field)指令、特性(Property)指令、事件(Event)指令。

在一些实施例中,指令可以能够参考808程度212,诸如:指代经由反射的对类型实例的运行时激活的激活程度;指代经由反射允许对类型的运行时自测的浏览程度;指代经由反射的运行时访问的动态程度;指代启用对基于反射的序列化和/或去序列化的反射支持的运行时序列化程度;或者指代采用特定格式(诸如XML或JSON)的静态合成的序列化的静态序列化程度。在一些实施例中,支持DataContractSerializer(数据合约序列化器)(DCS)类序列化器。在一些实施例中,运行时序列化程度允许基于反射的序列化器和去序列化器对类型、其属性和字段的反射访问,这将运行时序列化程度与静态序列化程度XML/DCS/JSON序列化支持区分开来。在一些实施例中,指令204中准许的程度值502包括以下各项中的一个或多个:要求全部(Required-All)、要求公开并且内部(Required-PublicAndInternal)、要求公开(Required-Public)、全部(All)、公开且内部(PublicAndInternal)、公开(Public)、包括的(Included)、自动(Auto)、排除的(Excluded)。在给定的实施例和环境103中,各个程度可以适用于类型、它们的实例构造函数、它们的特性设置函数、它们的特性获得函数、字段和/或所有类型成员。在一些实施例中,程度可被自动地传播到一类型的组成字段和属性,并接着被传播到这些字段和属性的类型等等。

在一些实施例中,指令204被提交610给提前编译器128以指示以下内容以供在编译期间使用:程度D是否适用于类型T、程度D是否适用于类型成员M、类型T是否是要求的以及类型成员M是否是要求的。如果类型T或类型成员M不是要求的(根据指令文档),则编译器和运行时可以通过分别略去对T或对M的动态支持626来相应地降低空间和处理要求。为了确定所提交的指令针对给定类型T或给定类型成员M指示了什么,在一些实施例中,编译器128寻找适用于T(或适用于M,按具体情形而定)的所有指令,应用614合成规则222以产生合成指令220,并且接着根据合成指令来确定结果。编译器128接着如由指令文档所指示地将计算机程序源代码的至少一部分编译成本机代码。

在一些实施例中,指令可以迫使616泛型实例化的存在,假设给出指令的编译器128符合这些指令。在一些实施例中,指令可通过使用参数指令214中的一个(即,参数(Parameter)指令、类型参数(TypeParameter)指令或泛型参数(GenericParameter)指令)来做出812对类型的间接引用。

经配置的介质

一些实施例包括经配置的计算机可读存储介质112。介质112可包括盘(磁盘、光盘,或其他)、RAM、EEPROM或其他ROM、和/或其他可配置存储器,特别包括计算机可读介质(而不仅仅是传播信号)。经配置的存储介质可以特别地是诸如CD、DVD或闪存之类的可移动存储介质114。可以是可移动的或不可移动的且可以是易失性的或非易失性的通用存储器可被配置到使用诸如指令204以及显式或代码隐式指令合成规则222等项目的实施例中来形成配置的介质,这些项目采用从可移动介质114和/或诸如网络连接等另一源读取的数据118和指令116的形式。经配置的介质112能够使计算机系统执行本文所公开的用于管理运行时行为特征的技术过程步骤。如此,图1到8帮助示出了经配置的存储介质实施例和过程实施例,以及系统和过程实施例。具体而言,图6和/或图8中示出的各过程步骤中的任一步骤或本文以其他方式教导的任一步骤可被用来帮助配置存储介质来形成经配置的介质实施例。

其他示例

下面提供了额外的细节和设计考虑。如同此处的其他示例,在给定实施例中,所描述的特征可以单独地使用和/或组合地使用,或根本不使用。

那些本领域的技术人员将理解,实现细节可以涉及诸如特定API和特定示例程序之类的特定代码,且因此不必出现在每个实施例中。本领域的技术人员还将理解,在讨论细节时所使用的程序标识符和某些其他术语是针对具体实现的,且如此不必涉及每个实施例。尽管如此,虽然它们不一定需要出现在这里,但是提供了这些细节,因为它们通过提供上下文可以帮助一些读者,和/或可以示出此处所讨论的技术的许多可能的实现中的一些。

以下讨论部分地从某种项目N文档中导出。项目N是微软公司的多部分开发项目,其包括但不限于,程序运行时支持和编译器技术方面的发展。一些项目N程序和/或文档的各方面与在此描述的各实施方式的各方面相一致或以其它方式示出这些方面。然而,要理解,项目N文档和/或实现选择不必约束这些实施例的范围,且同样地项目N和/或其文档将很好地包含位于这些实施例范围外的特征。还要理解,下面的讨论是部分作为对未必是本领域技术人员的读者的帮助的一部分来提供的,并且因此可能包含和/或省略了其下面的引述没有被阉割要求来支持本公开的细节。

具体句法

在一些实现中,在格式206中使用的用于指定802指令204的语言的具体句法716包括一组XML元素224;当被告知本文中的教导时,本领域的技术人员可使用XSD和XML的一般知识来在.xsd文件中指定这些元素224。

在一个实现中,元素224和它们的关系如以下在特定具体句法716内那样。指令(Directive)元素是文档的最外层的元素,并可包括任意数量的库(Library)元素和任选的应用(Application)元素。库和应用元素可包括任意数量的汇编件(Assembly)、命名空间(Namespace)、类型(Type)或类型实例化(TypeInstantiation)元素。汇编件元素可包括任意数量的命名空间(Namespace)、类型(Type)或类型实例化(TypeInstantiation)元素。命名空间元素可包括任意数量的命名空间(Namespace)、类型(Type)或类型实例化(TypeInstantiation)元素。在一些实现中,如果命名空间元素不在一特定汇编件元素内,则命名空间元素可与任意数量的汇编件元素相关联。类型或类型实例化元素可包括任意数量的类型(Type)、方法(Method)、特性(Property)、字段(Field)、事件(Event)、类型实例化(TypeInstantiation)或方法实例化(MethodInstantiation)元素,并且类型元素可包括任意数量的泛型参数(GenericParameter)元素。方法元素可包括任意数量的泛型参数(GenericParameter)、类型参数(TypeParameter)或参数(Parameter)元素。

在这个实现中,指令元素224具有名为xmlns的属性226,其具有标识元数据模式(例如,微软元数据模式或针对程序120的另一元数据方案)的URI。库元素224具有名为名称(Name)的属性226,其值给出库的名称。应用元素224具有给出程度212的名称的属性226。汇编件元素224具有以下属性226:名称,其值给出汇编件的名称;以及给出程度212的名称的属性226。命名空间元素224具有以下属性226:名称,其值给出命名空间的名称;以及给出程度212的名称的属性226。类型元素224具有以下属性226:名称,其值给出类型的名称;以及给出程度212的名称的属性226。类型实例化元素具有以下属性226:名称,其值给出要被实例化的泛型类型的名称;自变量(Argument),其值给出要在实例化中被用为参数的类型(类型参数的具体句法可以类似于例如C#语言中的类型命名);以及给出程度212的名称的属性226。字段、特性或事件元素224具有以下属性226:名称,其值给出字段、特性或事件的名称;以及给出程度212的名称的属性226。方法元素224具有以下属性226:名称,其值给出方法的名称;签名(Signature),其值给出方法的参数签名;以及给出程度212的名称的属性226。方法实例化元素224具有以下属性226:名称,其值给出要被实例化的泛型方法的名称;签名,其值给出要被实例化的泛型方法的参数签名;自变量,其值给出要在实例化中被用为自变量的类型;以及给出程度212的名称的属性226。泛型参数元素224具有以下属性226:名称,其值给出泛型参数的名称;以及给出程度212的名称的属性226。类型参数元素224具有以下属性226:名称,其值给出参数的名称;以及给出程度212的名称的属性226。参数元素224具有以下属性226:名称,其值给出参数的名称;以及给出程度212的名称的属性226。

在这个实现中,可作为属性226出现的程度的名称包括但不限于:激活(Activate)、浏览(Browse)、动态(Dynamic)、序列化(Serialize)、Xml序列化器(XmlSerializer)、数据合约序列化器(DataContractSerializer)、数据合约Json序列化器(DataContractJsonSerializer)。当程度的名称作为字段、特性、事件、方法或方法实例化元素的属性226出现时,在这个实现中可能的值502是:排除的(Excluded)、自动(Auto)、包括的(Included)、要求(Required)。当程度的名称作为泛型参数、类型参数或参数元素224的属性226出现时,在这个实现中其可能的值502是:公开(Public)、公开且内部(PublicAndInternal)、全部(All)、要求公开(Required-Public)、要求公开并且内部(Required-PublicAndInternal)、要求全部(Required All)。当程度的名称作为应用、汇编件、命名空间、类型或类型实例化元素224的属性226出现时,在这个实现中其可能的值502是:排除(Excluded)、自动(Auto)、公开(Public)、公开且内部(PublicAndInternal)、全部(All)、要求公开(Required-Public)、要求公开并且内部(Required-PublicAndInternal)、要求全部(Required All)。

抽象句法

在特定实现的上下文中,可通过诸如以下的步骤从具体句法716中导出指令204的抽象句法718。用“指令”来替换对“元素”的每个使用。对于表示可包括其他元素的元素224的指令204,引入子(Children)特性,其值是表示被包括在原始元素中的元素的指令集。对于表示除了指令之外的元素224的指令204,引入父(Parent)特性,其值是表示包括所表示的元素的元素的指令。忽略指令的xmlns属性。用“特性”来替换对“属性”的每个使用。用对于方法签名和泛型自变量更抽象的编码来替换签名和自变量值;“更抽象”意味着“较少因实现而异的”。使用以下映射来用结构化值替换程度值。

在这个抽象句法导出过程中,程度值到结构化值的映射如下:

·Excluded(排除的)→{Required(要求)=false(假),Inclusion(包含)=Excluded(排除的)}

·Auto(自动)→{Required(要求)=false(假),Inclusion(包含)=Auto(自动)}

·Included(包括的)→{Required(要求)=false(假),Inclusion(包含)=Included(包括的)}

·Required(要求)→{Required(要求)=true(真),Inclusion(包含)=Included(包括的)}

·Public(公开)→{Required(要求)=false(假),Inclusion(包含)=Included(包括的),Contained(含有的)=Public(公开)}

·PublicAndInternal(公开且内部)→{Required(要求)=false(假),Inclusion(包含)=Included(包括的),Contained(含有的)=PublicAndInternal(公开且内部)}

·All(所有)→{Required(要求)=false(假),Inclusion(包含)=Included(包括的),Contained(含有的)=All(所有)}

·Required Public(要求公开)→{Required(要求)=true(真),Inclusion(包含)=Included(包括的),Contained(含有的)=Public(公开)}

·Required PublicAndInternal(要求公开并且内部)→{Required(要求)=true(真),Inclusion(包含)=Included(包括的),Contained(含有的)=PublicAndInternal(公开且内部)}

·Required All(要求全部)→{Required(要求)=true(真),Inclusion(包含)=Included(包括的),Contained(含有的)=All(全部)}

具有语言设计领域的普通技能的人将能够想象各种映射到这样的抽象句法718的具体句法716。

程度的含义

尽管程度212的精确语义可在各实现之间不同,但是以下程度集或其子集可能是感兴趣的:

·激活(Activate):指代类型实例的运行时激活。应用到各类型、它们的实例构造函数以及特性设置函数。

·浏览(Borwse):指代对类型的运行时自测。应用到各类型和所有类型成员。

·动态(Dynamic):指代经由反射的运行时访问。应用到各类型和所有类型成员。

·序列化(Serialize):指代经由反射的运行时序列化和去序列化。应用到类型、它们的实例构造函数、字段以及特性设置函数和取得函数。在一些实现中被自动地传播到这些字段和特性的类型。

·Xml序列化器(XmlSerializer):指代到XML的静态合成的序列化。应用到各类型。

·数据合约序列化器(DataContractSerializer):指代针对数据合约(DataContract)的静态合成的序列化。应用到各类型。

·数据合约Json序列化器(DataContractJsonSerializer):指代将JSON用作格式的针对DataContract的静态合成的序列化。应用到各类型。

在一些情况下,程度可被添加或移除,而无需对现有文档202做出任何改变。为了满足特定程度的语义要求,一种方式可引入规则来自动地将程度传播到没有被这个机制注释的类型或成员,如例如在‘036申请的纳入的公开中讨论的那样。

指令应用和合成

在一些实施例中,指令文档202回答以下问题:程度D应用到类型T还是类型成员M?类型T或类型成员M是要求的吗?回答这些问题中的任一可涉及这些步骤:定位612应用到T或M的所有指令;将合成规则222应用614到适用的指令来产生合成指令220;从合成指令中确定642回答。指令应用和合成中的每者在以下更加详细地讨论。

指令应用

在一些实施例中,如果以下条件之一成立,则指令204应用到类型T:

·指令是应用(Application)。

·指令是命名空间(Namespace),具有作为汇编件(Assembly)的非直接或间接的父,并且指令的完整命名空间名称匹配T的完整名称的主要子串。

·指令是汇编件(Assembly)并且指令的名称(Name)特性匹配包含T的汇编件的名称。在一些实现中,通配符是可能的,以避免对于精确匹配的需要。

·指令是命名空间(Namespace),具有作为汇编件(Assembly)的带有匹配包括T的汇编件的名称的名称(Name)的直接或间接的父,并且指令的完整命名空间名称匹配T的完整名称的主要子串。

·T不是泛型实例化,指令是类型(Type),具有作为汇编件(Assembly)的带有匹配包括T的汇编件的名称的名称(Name)的直接或间接的父,并且指令的完整类型名称匹配T的完整名称或T的完整名称的主要子串。

·T是泛型实例化,指令的类型实例化(TypeInstantiation),指令被解释为将类型(Type)应用到T的未经实例化的泛型类型,并且指令的自变量(Argument)特性表示等效于T的自变量类型的类型列表。

·指令是泛型参数(GenericParameter),并且T作为泛型自变量出现,其匹配在指令的父所应用到的类型或方法的实例化中由指令的名称(Name)特性所命名的泛型参数。

·指令是参数(Parameter),并且T作为自变量的静态类型出现,其匹配在对指令的父所应用到的方法的调用中由指令的名称(Name)特性所命名的参数。

·指令是类型参数(TypeParameter),并且T作为TypeOf(.......的类型)表达式的操作对象来出现,其是匹配在对指令的父所应用到的方法的调用中由指令的名称(Name)特性所命名的参数的自变量。在一替代方式中,类型参数(TypeParameter)处理被增强以允许用其他方式找出System(系统).Type(类型)的值,诸如跟踪typeof是否在调用一调用被标记的方法的方法中被使用。

在一些实施例中,如果这些条件之一成立,则指令204应用到成员M:

·指令应用到包括M的类型。

·M是字段、特性、事件或方法,指令是对应的字段、特性、事件或方法,指令的父(Parent)应用到包括M的类型,指令的名称(Name)特性匹配M的名称,并且M不是方法或者指令不具有签名(Signature)特性,或者签名(Signature)特性匹配M的参数签名。

在一些实施例中,命名空间(Namespace)指令的完整命名空间名称被确定,由此:

·如果指令的父(Parent)特性是应用(Application)、库(Library)或汇编件(Assembly),则指令的完整命名空间名称是指令的名称(Name)特性的值。

·否则,指令的父(Parent)特性必然是命名空间(Namespace),并且指令的完整命名空间名称是父的完整命名空间名称连结有用“.”连结的指令的名称(Name)特性的值。

在一些实施例中,类型(Type)指令的完整类型名称被确定,由此:

·如果指令的父(Parent)特性是应用(Application)、库(Library)或汇编件(Assembly),则指令的完整类型名称是指令的名称(Name)特性的值。

·如果指令的父(Parent)特性是命名空间(Namespace),则指令的完整类型名称是父的完整命名空间名称连结有用“.”连结的指令的名称(Name)特性的值。

·如果指令的父(Parent)特性是类型(Type)或类型实例化(TypeInstantiation),则指令的完整类型名称是父的完整类型名称连结有用“.”连结的指令的名称(Name)特性的值。

·类型实例化(TypeInstantiation)指令的完整类型名称是被解释为类型(Type)的指令的完整类型名称连结有用“<”连接的用“>”连结的自变量类型的完整类型名称的逗号分割的列表。

·在一些实现中,类型的完整名称如由C#语言指定的那样。

指令合成

在一些实施例中,形成应用到类型T或成员M的指令集的合成根据以下规则222来进行:

·如果没有指令应用到T或M,则合成是空的。

·如果只有一个指令应用到T或M,则合成是该指令。

·如果多于一个的指令应用到T或M,则指令中的两个被选择以用于合成以及接着被构成,并接着用该合成来替换两个指令。重复直到只有一个指令剩余,并且该指令是合成。

并且,为了选择两个指令用于合成,将各指令排序为部分有序,其中一指令在作为其直接或间接的父(Parent)的任一指令之前,并且选择前两个指令。如果指令D1具有作为直接或间接的父(Parent)的指令D2,则D1和D2的合成使用这些规则222来形成:

·如果给定程度DG存在于D1中,则合成中DG的值是D1中DG的值。

·否则,如果DG存在于D2中,则合成中DG的值是D2中DG的值。

·否则,DG不存在于合成中。

·合成具有与D2的父(Parent)相同的父。

在一些实施例中,如果指令D1和D2都不具有作为直接或间接的父(Parent)的对方,则D1和D2的合成使用这些规则222来形成:

·如果给定程度DG存在于D1中但不存在于D2中,则合成中DG的值是D1中DG的值。

·如果DG存在于D2中但不存在于D1中,则合成中DG的值是D2中DG的值。

·如果DG存在于D1和D2两者中,则合成中DG的值是D1和D2中DG的值的合成。

在一些实施例中,程度值V1和V2的合成使用这些规则222来形成:

·如果V1或V2具有Inclusion(包含)=Excluded(排除的),则合成是{Required(要求)=false(假),Inclusion(包含)=Excluded(排除的)}。

·否则,如果V1或V2具有Required(要求)=true(真),则合成具有Required(要求)=true(真),否则具有Required(要求)=false(假)。

·如果V1或V2具有Inclusion(包含)=Included(包括的),并且都不具有Inclusion(包含)=Excluded(排除的),则合成具有Inclusion(包含)=Included(包括的)。

·如果V1或V2都不具有Inclusion(包含)=Included(包括的)或Inclusion(包含)=Excluded(排除的),则合成具有Inclusion(包含)=Auto(自动)。

并且,在一些实施例中,如果指令D通过除了直接应用到类型T或成员M之外的方式应用到类型T或成员M,则对于D中针对其T或M不满足可见性要求的任意程度DG,D中针对T或M的DG的值是{Required(要求)=false(假),Inclusion(包含)=Excluded(排除的)}。在一些实施例中,结果会是Inclusion(包含)=Included(包括的);即,如果指令表明针对一类型Dynamic(动态)=“Public(公开)”,则允许另一指令表明Dynamic(动态)=“RequiredAll(要求全部)”。

要求的类型和成员

在一些实施例中,如果应用到一类型或成员的指令的合成针对任一程度具有Required(要求)=true(真),则该类型或成员被要求。被要求的含义由编译器128和/或解释642指令的系统的其他部分来确定,但是很可能是该类型或成员不能被丢弃。尤其,如果泛型类型实例化或泛型方法实例化被要求,则解释指令的系统可被预期迫使616实例化存在。

结语

虽然具体实施例在此处被明确示出并描述为进程、已配置的介质、或系统,但是可以理解,对一种类型的实施例的讨论也一般性地延伸到其他实施例类型。例如,结合图6和8的过程描述还帮助描述配置的介质,并帮助描述如结合其他附图讨论的那些技术效果以及系统和制品等技术效果以及系统和制品的操作。对一个实施例的限制也不一定适用于另一个实施例。具体而言,进程不一定仅限于在讨论诸如已配置的存储器之类的系统或产品时呈现的数据结构和方案。

本文对具有某一特征X的实施例的引用以及本文别处对具有某一特征Y的实施例的应用不从具有特征X和特征Y两者的本公开的实施例中排除,除非这一排除在此被明确指明。术语“实施例”在此仅仅被用作“过程、系统、制品、经配置的计算机可读介质和/或此处如以与适用法律一致的方式应用的教导的其它示例”的更方便的形式。因此,给定“实施例”在该实施例与至少一个权利要求一致的情况下可包括此处所公开的特征的任何组合。

不是图中所示出的每一项都需要存在于每个实施例中。相反,实施例可以包含图中未显式地示出的项。虽然一些可能性在此处通过具体示例在文本和附图中示出,但是各实施例可以偏离这些示例。例如,一示例的具体技术效果或技术特征可以被省略、重命名、以不同的方式分组、重复、不同地以硬件和/或软件实例化,或是在两个或更多示例中出现的效果或特征的混合。在一些实施例中,在一个位置示出的功能也可以在不同位置提供;技术人员认识到在给定实现中功能模块能够以各种方式定义,而不必从作为一个整体来看的交互模块的集合中省略所需技术效果

通过附图标记参考了附图。在附图或文本中与给定附图标记相关联的措词中的任何显而易见的不一致性应该被理解为仅仅时拓宽该标记所引用的内容的范围。即使使用相同的附图标记,给定附图标记的不同实例也可以指不同的实施例。

如此处所使用的,诸如“一”和“该”等术语包括了所指示的项或步骤中的一个或多个。具体而言,在权利要求书中,对一个项的引用一般表示至少一个这样的项存在,并且对一个步骤的引用表示执行该步骤的至少一个实例。

标题仅是为了方便;关于给定话题的信息可在其标题指示该话题的章节之外被寻找到。

所提交的所有权利要求和摘要是说明书的一部分。

尽管在附图中示出并在上文中描述了示例性实施例,但本领域普通技术人员将明白,可作出多种修改而不脱离权利要求书中阐明的原理和概念,且这些修改不需要涵盖整个抽象概念。尽管用结构特征和/或过程动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于权利要求书上面所描述的具体特征或动作。不一定在给定定义或示例中标识的每一个手段或方面或技术效果都在每个实施例中存在或使用。相反,所描述的具体特征和动作以及效果是作为供当实现权利要求书时考虑的示例来公开的。

无法包围整个抽象概念但落入权利要求的等效技术方案的意义和范围内的所有改变都在法律所准许的最大程度内被包含在其范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1