CN106133684A - 支持静态编译程序中的动态行为 - Google Patents
支持静态编译程序中的动态行为 Download PDFInfo
- Publication number
- CN106133684A CN106133684A CN201580016645.7A CN201580016645A CN106133684A CN 106133684 A CN106133684 A CN 106133684A CN 201580016645 A CN201580016645 A CN 201580016645A CN 106133684 A CN106133684 A CN 106133684A
- Authority
- CN
- China
- Prior art keywords
- metadata
- code
- type
- computer program
- mapping
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/423—Preprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
在静态编译期间提供对动态行为的支持,同时减少对JIT编译和大型运行时的依赖性。在元数据与本机代码运行时人工产物之间创建映射,诸如在类型定义元数据与运行时类型描述之间、或者在方法定义元数据、运行时类型描述、以及本机代码方法位置、或字段定义元数据、运行时类型描述、和字段位置之间。还创建运行时人工产物之间的映射。一些编译结果包括弹跳代码以支持对缩减运行时支持环境中的人工产物的反射调用、用于虚拟方法调用、调用时边界校验、调用约定转换、或编译器固有方法。一些结果通过在即便不支持完全动态行为时包括某些元数据来支持运行时诊断。
Description
援引纳入
在相关司法中的适用法律所准许的限度内,本公开通过援引共同拥有的提交于2014年3月27日的美国专利申请第14/227,029(“’029申请”)全部而将其纳入于此。
背景
一些计算机程序环境提供用于反射、类型自测、动态分派、动态类型校验、和/或其它动态行为的运行时支持。动态分派涉及在运行时选择多形态方法(或函数)的哪个实现从给定调用被调用。类型自测涉及正在运行的程序检查其自己的值、元数据、属性和/或函数;反射则进一步深入,因为它涉及正在运行的程序更改其自己的值、元数据、属性和/或函数。动态类型校验涉及在程序正在运行的同时验证程序的类型安全性。一些环境依赖于即时(JIT)编译来通过在程序正在运行的同时编译程序的代码来支持动态行为;已编译代码可以是本机代码或者它可以是例如随后被解读的更高级的代码。
在一个环境中对动态特征和静态特征进行平衡可能是具有挑战性的。在具有动态行为的程序也可具有诸如静态类型校验、静态编译、和/或创建可执行应用(该可执行应用的所有组建在应用开始执行之前在提前编译期间已经被标识)之类的特征的意义上,平衡有时是可能的。动态特征可以提供从熟悉的静态编译程序中丢失的灵活性和功率。然而,在许多情景中,对程序的静态编译准许较小且较不复杂的运行时,并且提供了关于在测试期间程序行为和/或何时校验程序以获取恶意软件的更大确定性。相应地,对静态功能性和动态功能性进行平衡的新的方式可能是有用的并且是计算机编程领域的坚实进步。
概述
本文描述的一些实施例涉及支持反射同时降低或消除对JIT编译和大型运行时平台的依赖性的技术挑战。一些实施例涉及支持被选择性地赋予计算机程序的类型、字段、方法或虚拟方法的语义特征的技术问题。一些实施例涉及降低目标环境(诸如智能电话和平板)中的运行时要求的技术问题。一些实施例涉及扩展提前编译的能力以便促进应用行为测试的技术问题。一些实施例提供了涉及按照在反射与自测之间进行区分的方式来管理元数据并伴随有运行时错误的相关联风险的技术问题的工具和技术。编程领域的技术人员还将认识由文本所述的创新所解决的其它技术问题。
一些实施例执行一种编译,该编译支持在例如智能电话、平板、或膝上型计算机上的缩减运行时支持环境中的静态编译的计算机程序的动态行为。在一些实施例中,静态编译的计算机程序在不使用任何即时编译的情况下是完全可执行的。运行时行为特征描述指定了某些元数据是否要被包括在计算机程序的执行范围之内。在一些实施例中,运行时行为特征描述明确地在支持检查的元数据与支持方法调用或字段访问的元数据之间进行区分。
在一些实施例中,在对计算机程序的静态提前编译期间,在执行范围内的元数据与本机代码运行时人工产物之间创建映射。例如,该映射可以连接(a)类型定义元数据与运行时类型描述,或(b)方法定义元数据、运行时类型描述、以及静态编译的计算机程序中方法的本机代码的位置,或(c)字段定义元数据、运行时类型描述、以及静态编译的计算机程序中的字段位置。
在一些实施例中,类型的运行时类型描述提供了类型的垃圾收集布局和/或类型的实现接口列表。在一些实施例中,运行时类型描述包括来自可执行文件的因类型而异的元数据。在一些实施例中,包括基于微软System.Reflection命名空间的一些实施例,运行时类型描述表示与系统反射元数据本机格式集合中的类型定义句柄相同类型的元数据。
在一些实施例中,静态提前编译在运行时人工产物之间创建映射。例如,这一映射可以连接(a)通用类型实例、运行时类型定义描述、以及运行时类型自变量描述,或(b)运行时阵列描述、以及运行时阵列元素描述,或(c)静态编译的计算机程序中静态类型初始化的本机代码位置、以及运行时类型描述。
一些实施例生成弹跳代码以支持对缩减运行时支持环境中的人工产物的反射调用。例如,弹跳代码可以是在执行之际(a)执行虚拟方法调用、抽象方法调用、或接口方法调用,(b)执行调用时边界校验,或(c)执行调用约定转换的代码。在一些情形中,跳转代码表示编译器固有方法,即,常规上缺少方法主体的方法,因为它在编译期间被内联到其调用程序中。
一些实施例通过在静态编译的计算机程序内包括包含方法名称的元数据来支持运行时诊断,尽管静态编译的计算机程序不包括该方法的任何本机代码。一些实施例在静态编译的计算机程序内包括包含类型名称的元数据,尽管静态编译的计算机程序不包括该类型的任何本机反射代码。
在一些实施例中,运行时行为特征描述由指示来提供。例如,一指示可指定,计算机程序的类型T是必需类型,或者T是可任选类型,或者T是环境中的禁止类型。类似地,另一指示可指定,计算机程序的类型成员(例如,字段F、方法M、或虚拟方法V)是环境中的必需类型成员、是可任选的、或者是环境中禁止的。在一些情形中,一指示指定在环境中针对类型T启用级D、或者D被禁用,并且在一些情形中,一指示指定在环境中针对类型成员F、M或V启用级D,或者在环境中针对该成员D被禁用。
所给出的示例只是说明性的。本发明内容并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。相反地,提供本发明内容是为了以简化的形式介绍将在以下具体实施方式中进一步描述的一些技术概念。本发明由权利要求书限定,在本发明内容与权利要求书有冲突的情况下,应该以权利要求书为准。
附图简述
将参考附图给出更具体的描述。这些附图只示出了选定的方面,且因此不完全确定覆盖或范围。
图1是解说具有至少一个处理器和至少一个存储器的计算机系统的框图,该至少一个处理器和至少一个存储器在软件的控制之下与彼此交互,该软件用于支持在目标运行时环境中计算机程序的类型的指定动态运行时行为特征和类型成员,该目标运行时环境不必是与计算机程序在其中已经编译、正被编译、或将要被编译的编译环境相同的环境,图1还解说了操作环境中可存在于多个网络节点上的其它项,并且图1还解说了经配置的存储介质(与单纯的信号相反)实施例,其中操作环境解说编译环境并且还解说目标运行时环境;
图2是解说一示例体系结构中的动态行为支持结构的各方面的框图;
图3是进一步解说在一些实施例中根据图2的该方面的元数据——人工产物映射的框图;
图4是进一步解说在一些实施例中根据图2的该方面的人工产物——人工产物映射的框图;
图5是进一步解说在一些实施例中根据图2的该方面的弹跳代码的框图;
图6是解说本文描述的一些过程的步骤和配置的存储介质实施例的流程图。
详细描述
概览
在先前的办法之下,反射语义仅由执行引擎(有时称为运行时)来提供。在此类具有即时(JIT)编译的常规托管环境中,例如,执行引擎完全知悉类型布局、本机代码位置、及其与元数据的关系;运行时人工产物(诸如代码和类型的垃圾收集描述符)从运行时中的元数据来构建。此类执行引擎包含大量的元数据,以便处置各种各样可能的动态行为,并且它们可以通过JIT编译在运行时接收代码和运行时类型描述。受到JIT编译支持的此类常规执行引擎可以容易地回答关于命名字段偏移、或命名方法地址的问题,并且它可以基于现有元数据来创建新的运行时人工产物。具体地,微软的.NET API在传统上暴露丰富的反射API,该反射AOI通过使用(a)元数据、以及(b)将元数据与运行时人工产物(诸如方法、字段或描述类型的结构(微软公司的标志))相连接的方式来操作。
然而,执行引擎的灵活知晓性和能力的一个要付出的代价是存储空间。如果动态行为不受支持,则执行引擎可能小得多。当程序被提前编译时,程序的类型布局和代码布局在编译时被完全确定。在执行时需要的管理提前编译的计算机程序的运行时服务相对较较小。
本文描述的一些实施例提供了(a)对动态行为(诸如操作反射API)的支持,以及(b)相对较小的执行引擎两者。为了节省盘空间,缩减尺寸的运行时不明确需要的元数据信息不再被保存在编译程序模块中,仅包括元数据的缩减(或甚至是最小)集合。在这些实施例中的一些实施例中,在完全提前编译系统中支持反射,从而移除了对JIT编译器执行反射的任何依赖性。JIT编译器可以存在于此类环境中,并且甚至可以由其它软件使用,但在这些特定实施例中,提前编译应用执行反射和/或其它动态行为而不依赖于JIT编译器。为了使编译模块的盘的尺寸保持为小,一些实施例在某些“额外”元数据的存在对于运行时环境的操作而言是不需要的并且仅被用于实现反射API功能的意义上将反射数据作为完全可任选的来对待。这一办法提供了盘上尺寸的显著节省,因为具有这一额外元数据的人工产物集合可以被限于在反射场景中被实际使用的人工产物集合。
一些实施例从输入模块提取反射元数据,并且一些实施例生成映射。一些实施例在所提取的元数据与在本机代码生成期间产生的运行时人工产物之间生成一个或多个元数据-人工产物映射。元数据-人工产物映射的一些示例包括(a)类型定义元数据、以及描述最小运行时内的类型的运行时类型描述(RTD)结构之间,(b)RTD、方法定义元数据、以及可执行模块内的方法的机器代码位置之间,和/或(c)RTD、字段定义元数据、以及字段的运行时位置(或偏移)之间的映射。一些实施例在运行时人工产物之间生成一个或多个人工产物-人工产物映射,诸如(a)描述通用类型实例合成到用于类型定义和类型自变量的RTD中的映射,(b)描述通过将阵列和阵列元素的RTD相连接的阵列类型合成的映射,(c)从RTD到执行静态类型初始化的机器代码(例如,类构建器代码)的位置的映射。一些实施例生成和/或包括反射场景中不被允许的RTD列表。
一些实施例生成一个或多个代码片段,该代码片段被具体地设计成支持提前编译程序中的动态行为;这些代码在本文中被统称为“弹跳代码”(trampoline code)。例如,一些实施例生成启用对虚拟和接口方法的反射调用的支持代码。一些实施例生成启用对在调用站点处要求附加校验(诸如边界校验)的方法的反射调用的支持代码。边界校验可以测试以寻找界外阵列访问、不良指针、和/或无效数值。一些实施例生成启用在方法的反射API调用约定与目标调用约定之间的调用约定转换的支持代码。调用约定可暗指通过引用或通过值的参数传递,或者例如自变量是否作为单个对象阵列被传递。一些实施例生成启用对被实现为编译器固有例程的方法的反射调用的支持代码。
一些实施例生成诊断基础结构代码,该诊断基础结构代码允许提前编译器在添加可执行模块中包含的所有运行时人工产物的额外元数据的模式中运行。在这一编译器模式中,可执行模块包含附加数据,该附加数据帮助诊断由尝试在不携带反射元数据的运行时人工产物上使用反射API引起的运行时错误。
此处描述的某些实施例可以在较宽泛的上下文中查看。例如,诸如行为、编译、转换、执行、映射、支持、时间和类型等概念可以与特定实施例相关。然而,并不能从宽泛上下文的可用性中得出此处对抽象概念寻求专有权;它们并不是专有的。相反,本发明聚焦于适当具体的实施例,其技术效果完全或部分地解决特定技术问题。涉及行为、编译、转换、执行、映射、支持、时间、和/或类型的其他介质、系统和方法在本范围之外。因此,在对本发明的正确理解下,也避免了模糊性、抽象性、缺少技术性和附带的证据问题。
技术特性
本文描述的实施例的技术特征对于本领域技术人员而言将显而易见,并且对于各种关注的读者而言也以各种方式显而易见。首先,一些实施例解决诸如在没有JIT编译的情况下支持反射、支持计算机程序的选择性赋予语义特征、降低运行时要求、扩展提前编译能力、和/或管理用于反射和其它动态行为的元数据等技术问题。本领域技术人员还将认识由文本所述的创新所解决的其它技术问题。
第二,一些实施例包括诸如计算硬件等技术组件,这些技术组件以除了通用计算机中的典型交互之外的方式与软件交互。例如,除了诸如一般的存储器分配、一般的存储器读写、一般的指令执行和某种I/O排序等普通交互之外,本文描述的一些实施例还包括用于创建和/或使用映射和弹跳代码的软件,该映射和弹跳代码被设计成帮助管理运行时行为特性。
第三,一些实施例所提供或受到一些实施例影响的技术效果包括元数据-运行时人工产物映射、运行时人工产物之间的映射、通用实例化的强行存在、以及特定元数据在本机代码中的编译器包括/排除。
第四,一些实施例包括技术适配,诸如用于调用站点边界校验的弹跳代码、编译器固有例程、调用站点调用约定转换、以及其它特定功能性。
第五,一些实施例通过实现指示特定类型或类型成员是(a)目标运行时环境中要求的,(b)在该环境是可任选的,还是(c)在该环境中被禁止的运行时行为描述来支持编译器的经修改技术功能。
第六,一些实施例的技术优点包括指定类型和类型成员在编译中的存在和/或缺失的能力、缩减的运行时大小、缩减的运行时处理工作负载、以及在应用被发布到市场之前完整测试应用行为的改进的机会。
一些首字母缩写
AOT:提前
API:应用程序编程接口
CD:紧致盘
CLR:公共语言运行时
DVD:数字视频盘或数字多功能盘
ECMA:前欧洲计算机制造商协会;这一首字母缩写已经被国际Ecma的非首字母“Ecma”所取代。
IL:中间语言
JIT:即时
JSON:JavaScript对象记法
RAM:随机存取存储器
ROM:只读存储器
SDL:简单声明性语言
XML:可扩展标记语言
YAML:YAML不是标记语言
一些术语
下面将参考诸如附图中所示出的那些示例性实施例,并使用特定语言来对其进行描述。但是,相关技术领域的且拥有本公开内容的技术人员将想到的对此处所示出的特征的更改和进一步的修改以及对此处的特定实施例所示的抽象原理的其他技术应用,都应该被视为在权利要求的范围内。
在本公开中阐明了各术语的含义,因此应该在仔细关注这些阐明的情况下阅读权利要求书。给出了具体示例,但是相关领域的技术人员将理解其他示例也可落在所使用的术语的含义范围内以及落在一个或多个权利要求的范围内。各术语不一定需要具有与它们在一般使用中(尤其在非技术使用中)或在特定行业使用中、或在特定字典或一组字典的使用中所具有的意义相同的意义。附图标记可以与各种措词一起使用,以帮助示出术语的广度。从给定文本片段中省略附图标记不一定意味着没有通过文本讨论附图的内容。发明人声明并行使他们对他们自己的词典的权利。所引用的术语被显式定义,但在隐式定义术语时不使用引用标记。这里可在具体实施方式中和/或在申请文件的别处显式地或隐式地定义术语。
如此处所使用的,“计算机系统”可包括例如一个或多个服务器、主板、处理节点、个人计算机(便携式或非便携式)、个人数字助理、智能电话、蜂窝或移动电话、至少具有处理器和存储器的其他移动设备、和/或提供至少部分地由指令来控制的一个或多个处理器的其他设备。指令可以采用存储器中的固件或其他软件和/或专用电路的形式。具体而言,虽然可发生许多实施例在工作站或膝上型计算机上运行,但是其他实施例也可以在其他计算设备上运行,并且任何一个或多个这样的设备都可以是给定实施例的一部分。
“多线程化”计算机系统是支持多个执行线程的计算机系统。术语“线程”应被理解为包括能够或经历调度(以及可能同步)的任何代码,并且也可以另一名称来为人所知,如“任务”、“进程”或“协同例程”等。线程可以并行地、按顺序、或以并行执行(例如,多处理)和顺序执行(例如,时间分片)的组合来运行。在各种配置中都已设计了多线程化环境。执行线程可以并行地运行,或者线程可以被组织为并行执行,但是实际上轮流按顺序执行。例如,多线程化可以通过在多处理环境中在不同核上运行不同线程、通过对单个处理器核上的不同线程进行时间分片、或者通过时间分片和多处理器线程化的某种组合来实现。线程上下文切换可以例如由内核的线程调度器、由用户空间信号、或由用户空间和内核操作的组合来发起。线程可以轮流对共享数据进行操作,或者例如每一线程都可以对其自己的数据进行操作。
“逻辑处理器”或“处理器”是单个独立硬件线程处理单元,如同时多线程实现中的核。作为另一示例,每核运行两个线程的超线程四核芯片具有8个逻辑处理器。逻辑处理器包括硬件。术语“逻辑”被用来防止给定芯片具有至多一个处理器的错误结论;“逻辑处理器”和“处理器”在此可互换地使用。处理器可以是通用的,或者它们可被定制用于特定用途,例如图形处理、信号处理、浮点算术处理、加密、I/O处理等等。
“多处理器”计算机系统是具有多个逻辑处理器的计算机系统。多处理器环境存在于各种配置中。在一给定配置中,所有处理器可在功能上相同,而在另一配置中,由于具有不同的硬件能力、不同的软件分配或两者,某些处理器可与其他处理器不同。取决于配置,处理器可在单个总线上紧密地彼此耦合,或它们可松散地耦合。在某些配置中,处理器共享一中央存储器,在某些配置中,它们各自具有自己的本地存储器,在某些配置中,存在共享和本地存储器两者。
“内核”包括操作系统、系统管理程序、虚拟机、BIOS代码、以及类似的硬件接口软件。
“代码”指的是处理器指令、数据(包括常量、变量、以及数据结构)、或指令和数据两者。
“程序”在本文中被广泛地使用以包括应用、内核、驱动程序、中断处理程序、库、以及程序员(也被成为开发者)编写的其他代码。
“执行范围”是可沿程序的至少一条执行路径抵达的程序的代码集。理解短语“执行范围”包括确认在运行时期间可能仅需要某些元数据信息,因为当程序运行时可能仅调用某些元数据,这取决于程序从用户接收到什么输入、程序的远行时环境中什么资源是可用的、以及其它因素。例如,例程X的代码不再执行范围内,如果如当前所编写的程序从未调用X的话。
“最小运行时”是“缩减运行时”或“缩减运行时支持”的一个示例,进而可以如下来测量:如果运行时R-缩减用作另一运行时R-较大的替换但由于包含比R-较大更少的元数据的结果R-缩减占据了比R-较大更少的非易失性存储空间,则运行时R-缩减是缩减运行时。给定程序的最小运行时是不要求程序的执行范围之外的元数据的运行时。
“元数据”意味着以下的一个或多个:类型名称、类型成员名称、出于垃圾收集目的的类型布局、出于垃圾收集目的的类型成员布局、在ECMA-355标准的任何过去或当前版本中被指派为元数据的项。具体地,在给定实施例中,元数据格式可以完全、部分、或完全不符合ECMA-355标准,并且第三方代码可以被创作以与一个或多个元数据格式联用。
“运行时行为特征描述”(也称为“运行时行为描述”)是以数字格式显式或隐式地标识在编译期间要被生成的运行时支持数据的一组运行时人工产物的具体描述。在给定实施例中,这一组人工产物包含:(a)类型定义和/或类型实例化,以及(b)对针对每一此种类型或类型实例化要被生成什么种类的运行时支持数据的指示,以及对于每一者的(c)类型成员列表(方法、字段、事件和/或属性)和针对成员中的每一者要生成的该种类的运行时支持数据。要被生成的该种类的运行时支持数据可以是元数据描述和/或运行时映射。运行时行为特征描述可以采用人类可读格式或者不采用人类可读格式。它可以采用可序列化格式或不采用可序列化格式。
运行时行为特性描述的一个示例包括在通过援引纳入的’029申请中描述的一个或多个指示。对于不允许援引纳入的管辖区域,来自该申请的信息在下文重现并且因此也成为本申请的一部分。
在一些实施例中,人类或软件进程用户获得来自数字存储的指示文档。指示文档旨在帮助管理运行时环境中计算机程序的类型和类型成员的运行时行为特性。该环境可以是例如相对于熟悉的运行时具有缩减尺寸运行时的智能电话或平板。计算机程序具有用至少一种数据类型的编程语言编写的源代码。
在一些实施例中,用户可以通过读取已经被生成的指示文档文件来获得指示文档,或者用户可以通过例如生成指示文档文件来获得指示文档。指示文档包含采用也能够被软件解析的格式的人类可读指示,诸如XML、JSON、YAML、或SDL格式。与用语义属性注释源代码的办法不同,指示文档的指示不与该指示所涉及的计算机程序的源代码交织。结果,不一定需要对源代码的访问来进行对指示的有效使用。具体地,不需要程序的源代码来通过添加指示、删除指示、或更改指示来修改适用的指示文档。给定程序可以服从不同的指示文档,不同的指示文档例如针对不同运行时来定制。
在用户检查之际,指示文档公开各种运行时行为特性指示。例如,一指示可指定,计算机程序源代码的类型T在环境中是必需类型218,或者T在环境中是可任选类型,或者T环境中是禁止类型。类似地,另一指示可以指定,计算机程序源代码的类型成员T-M在环境中是必需类型成员228,是可任选的,或者在环境中是禁止的。在一些情形中,一指示指定在环境中针对类型T启用级D、或者D被禁用,并且在一些情形中,一指示指定在环境中针对类型成员T-M启用级D,或者在环境中针对该T-M禁用D。
在一些实施例中,指示可以参考程序项群;一些示例包括以下群运行时行为特性指示:应用指示、库指示、汇编件指示、命名空间指示。在一些实施例中,指示可以参考群的各分量,诸如以下的群分量运行时行为特性指示:类型指示、类型实例化指示、方法指示、方法实例化指示、字段指示、属性指示、事件指示。在一些实施例中,指示可以迫使通用实例化的存在,假设给出指示的编译器符合指示。在一些实施例中,指示可以对类型作出间接参考;一些示例包括以下参数运行时行为特性指示:参数指示、类型参数指示、通用参数指示。
在一些实施例中,指示可以能够对以下级中的一者或多者作出参考:指代经由反射的对类型实例的运行时激活的激活级;指代经由反射允许对类型的运行时自测的浏览级;指代经由反射的运行时访问的动态级;指代启用对基于反射的串行化和/或去串行化的反射支持的运行时串行化级;或者指代采用特定格式(诸如XML或JSON)的静态同步的串行化的静态串行化级。在一些实施例中,准许的级值包括以下各项中的两个或更多个:必需-全部、必需-公开并且内部、必需-公开、全部、公开且内部、公开、包括、自动、或排除。在各定实施例和环境中,各个级可以适用于类型218、它们的实例构建程序、它们的属性设置程序、它们的属性获得程序、字段226、和/或所有类型成员228。在一些实施例中,各个级被自动传播通过相关的类型和类型成员。
在一些实施例中,指示被提交给提前编译器以指示以下内容以供在编译期间使用:(a)级D是否适用于类型T,(b)级D是否适用于类型成员T-M,(c)类型T是否是必需的,以及(d)类型成员T-M是否是必需的。如果类型T或类型成员T-M不是必需的(至少根据指示文档),则编译器和运行时可以通过分别略去对T或对T-M的动态支持来相应地缩减空间和处理要求。为了确定所提交的指示针对给定类型T或给定类型成员T-M指示了什么,在一些实施例中,编译器寻找适用于T(或适用于T-M,按具体情形而定)的所有指示,应用合成规则以产生合成指示,并且接着根据合成指示来确认结果。编译器接着将计算机程序源代码的至少一部分编译成如由指示文档所指示的本机代码。
如此处所使用的“包括”允许附加元素(即,包括意味着包含),除非另外指明。“由...构成”意味着基本上由...构成或完全由...构成。当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、已编译代码140和其它信息通常被存储在文件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将包含静态编译器128以及不一定存在于运行时环境103中的源代码122,而运行时环境103将包含不一定存在于编译环境101中的运行时136。
给定编译环境101可包括向开发者提供一组协调的软件开发工具的集成开发环境(IDE)138,其向开发者提供一组经协调的软件开发工具126,诸如编译器、源代码编辑器、剖析器、调试器等。对于一些实施例,合适的操作环境100中的一些包括或帮助创建被配置成支持程序开发的Visual开发环境(微软公司的商标)。一些合适的操作环境100包括环境(Oracle America有限公司的商标),并且一些操作环境包括利用诸如C++或C#(“C-Sharp”)等语言的环境,但本文的教导适用于各种各样的程序设计语言、程序设计模型、以及程序,以及本质上适用于软件开发领域之外的使用内联的技术努力。
在图1中以轮廓形式示出了一个或多个项来强调它们不一定是所示操作环境的一部分,但是可以与此处讨论的操作环境中的各项互操作。未采用轮廓形式的项在任何附图或任何实施例中也不一定是必需的。图1是为了方便而提供的;在图1中包括一项目不暗示该项目或对该项目的描述使用在本发明之前是已知的。
系统
图2帮助解说了适用于一些实施例的架构的各方面;下面还参考了其它附图。在一个实施例中,计算机系统102包括采用一个或多个单核和/或多核处理器形式的逻辑处理器110、以及与逻辑处理器112可操作的通信的存储器112。存储器112包括RAM、硬盘、和/或其它易失性或非易失性存储设备。计算机程序源代码122和/或其它编译器输入(诸如中间语言代码、字节码、或汇编件语言代码)驻留在存储器中的至少一个文件132中。
源代码122可跨越一个或多个文件132。源代码122至少部分地使用至少一种数据类型的编程语言来编写,例如,C族语言、BASIC语言、公共语言基础结构语言之一,诸如在标准ECMA-334和ECMA-335中讨论的那些语言、或者许多其它熟悉的或之后开发的数据类型的编程语言之一。除非另外指明,在本文中假定,源代码122和其它编译器输入没有会阻止编译618的约定错误,诸如编程语言句法错误、未定义标识符、对未声明函数的引用、静态类型违背、未定义指令等。在本文中也被称为提前编译器或AOT编译器的静态编译器128是系统102的一部分。
指示文档或其它运行时行为特性描述202驻留在存储器112中。运行时行为特性描述202向元数据管理器214指定某些动态行为指示结构204(在本文中也被称为“运行时支持数据”)是否要被包括在计算机程序120的执行范围124之内。元数据管理器214可以被实现为例如创新的AOT编译器128的一部分或单独的工具126。在一些实施例中,运行时行为特性描述202指定运行时映射208、210要被生成并且被包括在编译器输出140中。在一些实施例中,描述202明确在支持检查的元数据206与指示方法222、230调用或字段226访问的元数据206之间进行区分。在一些实施例中,描述202指定弹跳代码212要被生成并且被包括在编译器输出140中。
在一些实施例101中,在对计算机程序120的静态提前编译期间,在包括执行范围内的元数据206与至少一个本机代码运行时人工产物216的节点302之间创建映射208。例如,映射208可以将类型218定义元数据304和运行时类型描述220相连接。映射208可以代替地或附加地连接方法222定义元数据306、运行时类型描述220、以及静态编译的计算机程序中的方法的本机代码140的位置224、308。映射208可以代替地或附加地连接字段226定义元数据310、运行时类型描述220、以及静态编译的计算机程序中的字段的位置224、312。
在一些实施例中,类型218的运行时类型描述220提供了类型的垃圾收集布局和/或类型的实现接口列表。在一些实施例中,类型描述220包括来自可执行文件的因类型而异的元数据206。在一些实施例中,包括基于微软System.Reflection命名控件的一些实施例,运行时类型描述220表示与系统反射元数据本机格式集合中的类型定义句柄相同类型的元数据。
在一些实施例中,静态提前编译在包括各个运行时人工产物216的节点402之间创建映射210。例如,这一映射210可以连接通用类型实例404、运行时类型定义描述406、以及运行时类型自变量描述408。映射210可以替代地或附加地连接运行时阵列描述410、以及运行时阵列元素描述412。映射210可以替代地或附加地连接静态类型初始化414的本机代码在静态编译的计算机程序中的位置224、216,以及运行时类型描述220。
一些实施例生成弹跳代码212以支持对缩减运行时支持环境103中的人工产物216的反射调用。例如,弹跳代码212包括在执行之际执行对虚拟方法、抽象方法、或接口方法的动态分派方法(DDM)调用502的代码。尽管这些DDM方法在一些语言实现中就被盖写和/或被隐藏的方面具有差异,但它们各自利用虚拟表(即vtable)中的至少一个槽并且各自向开发者提供了在运行时选择该方法的实现的某种能力。在一些实施例中,弹跳代码212包括执行调用时边界校验504的代码。在一些实施例中,弹跳代码212执行调用约定转换506。在一些情形中,弹跳代码212表示在编译期间被内联的编译器固有方法508。关于弹跳代码的可能实现的附加细节在本文中的别处给出。
在某些实施例中,诸如人类用户I/O设备(屏幕、键盘、鼠标、图形输入板、话筒、扬声器、运动传感器等等)之类的外围设备106将可以在操作上与一个或多个处理器110和存储器进行通信。然而,一实施例也可以深嵌入在技术系统中,以便没有人类用户104直接与该实施例进行交互。软件进程可以是用户104。
在某些实施例中,该系统包括通过网络连接的多个计算机。网络接口设备可以使用例如诸如分组交换网络接口卡、无线收发机或电话网络接口之类的组件提供对网络108的接入,并可存在于给定计算机系统中。然而,一实施例也可以通过直接存储器存取、可移动非易失性介质、或其他信息存储-检索和/或传输方法来传递技术数据和/或技术指令,或者,计算机系统中的一实施例可以在不与其他计算机系统进行通信的情况下操作。
许多实施例驻留在单个设备上并且在单个设备上操作,诸如特定膝上型计算机或工作站或服务器箱。然而,一些更广泛的实施例在“云”计算环境和/或“云”存储环境中操作,其中计算服务不是自有的,而是按需提供的。例如,运行时行为特性描述202和由该描述202引导的创新AOT编译器128可以在联网云中的开发系统102上,源代码122可以被初始地存储在该云中的其它设备(服务器)中,而已编译应用程序120可以被发送到另一云设备102(诸如消费者的智能电话或平板)。
过程
图6用流程图600示出了某些过程实施例。各附图中示出或以其他方式公开的技术过程可以在某些实施例中自动执行,例如通过编译器128在运行时行为特性描述202的控制之下并且需要极少或不需要同时的实况用户输入。除非另外指明,否则过程也可以部分自动地且部分手动地执行。在一给定实施例中,可以重复过程的零个或更多个所示出的步骤,有可能利用不同的参数或数据来操作。一实施例中的步骤也可以按照与图6中展示的自顶向下次序不同的次序来执行。步骤可以串行地、以部分重叠的方式、或完全并行地执行。遍历流程图600以指出在过程中执行的步骤的次序可以在过程的一次执行与该过程的另一次执行之间不同。流程图遍历次序也可以在一个过程实施例与另一过程实施例之间不同。各步骤还可以被省略、组合、重命名、重组、或以其他方式偏离所示出的流程,只要所执行的过程是可操作的,并符合至少一个权利要求。
此处提供了帮助示出该技术的各方面的示例,但是在本文内给出的示例并未描述所有可能的实施例。实施例不仅限于此处所提供的具体实现、布置、显示、特征、方法或情形。给定实施例可包括例如附加的或不同的技术特征、机制、和/或数据结构,并可以以别的方式偏离此处所提供的示例。
在一些实施例中,用于支持静态编译的计算机程序在缩减运行时支持环境中的动态行为的软件编译过程包括:接收602指定某些元数据是否要被包括在计算机程序的执行范围内的运行时行为特性描述202。该过程还包括,提取604或以其它方式获得606根据运行时行为特性描述202在计算机程序的执行范围内的一些元数据的副本。取决于描述202中的特定描述,该过程接着创建608零个或更多个元数据-人工产物映射208,创建610零个或更多个人工产物-人工产物映射210,并且生成612零个或更多个弹跳代码212片段。这些步骤608-612的各方面在映射208、210和/或代码212中是隐含的,并且对该过程的理解将因而通过理解这些映射和弹跳代码来了解,这些映射和弹跳代码在本文中他处通过示例来解说。
一些实施例通过在静态编译的计算机程序内包括包含方法名称的元数据323来支持614运行时诊断,尽管静态编译的计算机程序不包括该方法的任何本机代码。一些实施例通过在静态编译的计算机程序内包括包含方法名称的元数据232来支持614运行时诊断,尽管静态编译的计算机程序不包括该方法的任何本机反射代码。在一些实施例中,诊断信息234包括从运行时类型描述到类型名称的映射,该映射在运行时被用于查找类型名称以供在类型在反射API中被使用但未在运行时行为特性描述中被指定为要求反射元数据的类型时在错误消息中使用。一些实施例包括从本机代码地址到方法和方法类型名称的类似映射。
在一些实施例中,在由逻辑处理器110对适当增强的AOT编译器128的执行期间,编译器128将计算机程序源代码122的至少一部分从源代码文件132编译618成至少一个本机代码文件132或其它已编译140文件,并且如由描述202所指示地这么做。例如,当描述202中的指示指定运行时串行化级针对类型T被启用时,一个创新编译器128生成T的垃圾收集布局的描述以及T的实现接口列表,并且将该元数据映射到表示T的本机代码。当描述202中的指示指定另一类型T1具有禁用反射但准许自测的浏览级时,这一编译器128生成具有T的成员名称及其类型的元数据,但不创建到本机代码或T的垃圾收集布局描述的运行时映射。这一编译器128实现还生成612用于接口方法和用于虚拟方法、用于在被调用时具有边界校验的方法、以及用于在反射API与被调用方法的调用约定之间调用约定转换的弹跳代码。响应于描述202中的指示的编译器128活动或节制的其它示例和描述在以上标识且通过援引纳入于此的’029申请中提供。在一些实施例中,创新编译器128执行指令116以输出本机代码140,本机代码140响应于运行时行为特性描述202来实例化620通用参数622。
通过步骤608、610、和/或612,一些实施例通过特定运行时环境103内的程序的给定本机代码版本来移除616对JIT编译的任何依赖性。运行时环境103可以例如位于智能电话或平板中。一些环境103利用缩减大小运行时136,缩减大小运行时136与用于多语言平台的熟悉的较大运行时(如由例如微软公司、谷歌公司、Oracle公司或Xamarin公司先前提供的)相比相对较小。一些实施例准许已编译程序120展现动态行为,诸如在执行624期间的反射同时避免616对JIT编译器130的依赖性。
经配置的介质
一些实施例包括经配置的计算机可读存储介质112。介质112可包括盘(磁盘、光盘,或其他)、RAM、EEPROM或其他ROM、和/或其他可配置存储器,特别包括计算机可读介质(而不仅仅是传播信号)。经配置的存储介质可以特别地是诸如CD、DVD或闪存之类的可移动存储介质114。可以是可移动的或不可移动的且可以是易失性的或非易失性的通用存储器可被配置到使用诸如运行时行为描述202、动态行为支持结构204和元数据管理器214的项目的实施例中来形成配置的介质,这些项目采用从可移动介质114和/或诸如网络连接等另一源读取的数据118和指令116的形式。经配置的介质112能够使计算机系统执行本文所公开的用于管理运行时行为特性的技术过程步骤。如此,图1到6帮助示出了经配置的存储介质实施例和过程实施例,以及系统和过程实施例。具体而言,图6中所示出的,或此处以其他方式教导的进程步骤中的任一个可以被用来帮助配置存储介质以形成已配置的介质实施例。
其他示例
下面提供了额外的细节和设计考虑。如同此处的其他示例,在给定实施例中,所描述的特征可以单独地使用和/或组合地使用,或根本不使用。
那些本领域的技术人员将理解,实现细节可以涉及诸如特定API和特定示例程序之类的特定代码,且因此不必出现在每个实施例中。本领域的技术人员还将理解,在讨论细节时所使用的程序标识符和某些其他术语是针对具体实现的,且如此不必涉及每个实施例。尽管如此,虽然它们不一定需要出现在这里,但是提供了这些细节,因为它们通过提供上下文可以帮助一些读者,和/或可以示出此处所讨论的技术的许多可能的实现中的一些。
以下讨论部分地从某种项目N文档中导出。项目N是微软公司的多部开发项目,包括但不限于,在微软.NET本机品牌(微软公司的标志)下及时可供市场购买的程序运行时支持和编译器技术的进步。一些项目N程序和/或文档的各方面与在此描述的各实施方式的各方面相一致或以其它方式示出这些方面。然而,要理解,项目N文档和/或实现选择不必约束这些实施例的范围,且同样地项目N和/或其文档将很好地包含位于这些实施例范围外的特征。还要理解,下面的讨论是部分作为对未必是本领域技术人员的读者的帮助的一部分来提供的,并且因此可能包含和/或省略了其下面的引述没有被阉割要求来支持本公开的细节。
在一些实施例中,编译器的元数据管理器214组件生成一组人工产物的元数据。一种办法假定该一组人工产物由另一组件确定,诸如在’029申请的援引纳入公开中描述的创建指示文档202的组件。因而,在项目N下的实现假定组描述202是本文所述的编译系统的输入。这一组描述202包含:类型定义或类型实例化,以及要针对该类型或类型实例化生成的数据种类,以及要针对每一类型或类型实例化生成的成员列表(方法、字段、事件、属性)和数据种类。要生成的数据种类可以是“元数据描述”或“运行时映射”或这两者。
对一个编译系统的另一输入是要被编译成本机代码的IL汇编件模块。更一般地,根据本文的教导各种中间语言可以被用作编译器输入,诸如公共中间语言(先前被称为微软中间语言或MSIL)、给定处理器族的汇编件语言、或甚至是C程序语言代码,因为C有时被用作中间语言。
元数据生成
当输入模块被传递到提前编译器128时,元数据管理器214确定哪些人工产物需要元数据。接着,生成包含这些人工产物的元数据信息的文件。这一文件一般地包含根据描述202被确定为需要“元数据描述”的所有人工产物的元数据。然而,关于通用类型实例的数据可以被略去。在一种实现中,这一所生成的元数据文件与最小运行时所使用的元数据分开(不是它的一部分)。在一种实现中,所提取的604信息如公共语言基础结构(ECMA 355)标准中所定义地来镜像关于存储在原始输入模块中的表格和团块形式的类型和成员的元数据。
在一些实施例中,在对所生成的元数据中的任一者的使用不受缩减大小或最小运行时的最低等级的任何一部分所要求的意义上,所生成的元数据文件206与最小运行时所使用的元数据118分开。这提供了强分层模型:最低层不要求元数据并且几乎不知晓关于其格式和语义的内容。所有对所生成的元数据的使用在这一最小运行时以上的各个层中实现,这是一种具有将关于该元数据的策略向上推送至那些层的优点的办法。元数据策略解决了诸如元数据是否应当存在以及如果是有多少元数据存在以及元数据应当被如何使用等的问题。这增强了最小运行时的灵活性;使得成为付费播放;对使用这一数据206中的任一者不感兴趣的对运行时的替换使用不必生成该数据并且不必为它们不使用的特征能够支付任何成本。这一办法还使得运行时更可能不需要被频繁地更新;运行时中嵌入更少的代码和策略,该代码和策略中存在的错误范围更小。作为与熟悉的台式CLR的对比,即便用户不使用任何基于元数据的特征(例如,反射),也存在对于用户而言的资源成本,诸如略微更多的存储器使用或更长的代码路径,因为CLR的最低层是某种核心功能性所嵌入的地方。
在项目N场景中,最小运行时136导出一组基础功能性,该一组基础功能性是相当低级的,并且支持可能被认为是反射的极端最小语义集。最小运行时理解并且在其自身内仅包括用于实现那些基础操作的最小量的元数据(类型身份、vtable、接口映射表、以及若干类型输入,诸如类型是否是阵列)。这一最小元数据118常常比所生成的元数据小几个数量级(并且在许多方面简单得多)。
为了在此之上构建更高级并且更丰富的元数据,运行时136的确提供运行时映射表208、210以便在最小元数据与保留的本机代码属性以及所生成的元数据中的条目之间进行映射。但那些表格在项目N实现中是相对简单的:运行时仅将它们视作具有相关联的ID的不透明团块,并且提供运行时机制以根据ID来查找那些团块,但运行时不理解表格内容。编译流水线理解得稍多一些,但该流水线中被紧密绑定到运行时的那一部分(在这一实现中的rhbind绑定程序)仅理解映射的本机(最小)侧:它不知晓本机侧映射到什么。
映射表
元数据文件(诸如根据先前段落所生成的元数据文件)在最终模块140内包含类型218的描述,但这一信息并不具有到在编译618期间生成的运行时结构216的链接,诸如表示最小运行时136内的类型或方法的实际机器代码140的结构。在一种实现中,映射表208作为元数据生成的一部分被生成608;映射表208描述运行时构造216与分开的元数据206文件中所生成的数据118之间的映射。在一些实现中,还生成610运行时构造216之间的映射表210。映射210、210取决于给定编译器和给定运行时的实现细节,但本领域技术人员将理解,这些实现细节足以将本文的教导应用于所定标的环境103。
支持代码生成
在一些情形中,出于下文所述的原因和/或对本领域技术人员而言显而易见的原因,模块中的机器代码不适于被映射表直接引用。在这些情形中的一些情形中,提前编译器218还生成612弹跳代码以支持反射调用。这一弹跳代码在将程序控制流重定向到要通过反射被调用(例如,当使用微软.NET反射API(微软公司的标志))时的方法之前执行附加任务。一些示例在下文中讨论。
用于虚拟方法和接口方法的调用的支持代码
在虚拟方法和其它动态分派方法的情形中,本领域技术人员无法容易地在不知晓系统将在其上执行方法的对象的确切类型(及其vtable槽)的情况下确定方法主体的位置。执行到虚拟方法的分派的问题特别针对不容易由v-table槽表示的方法被调用,诸如接口方法和通用虚拟方法。当这一信息在编译时被知晓时,编译器128为从映射表引用的每一动态分派方法生成小型“弹跳”方法502。弹跳方法的主体使用与常规虚拟方法调用、抽象方法调用或接口方法调用相同的机制来执行正确的vtable分派。只要需要虚拟(或抽象或接口)方法的位置,映射表就使用这一弹跳方法的位置;这一办法可以极大地降低运行时的复杂性。一个示例如下:
abstract void SomeMethod(){…}
void SomeMethod$Trampoline(){return SomeMethod();}
用于在调用站点处执行校验的方法的支持代码
按照与虚拟方法类似的方式,只要隐含具有附加调用站点要求的方法的位置,一些实施例生成612就弹跳方法。编译器128将验证弹跳方法的主体中的调用站点要求并且执行对目标方法的调用。此类方法504的一个示例是在针对其参数之一要求调用时具有附加边界校验的方法。
启用调用约定转换的支持代码
一些实施例生成612弹跳代码506,该弹跳代码506执行例如反射API调用约定与目的方法的目标调用约定之间的调用约定转换。例如,微软.NET框架反射API在传统上使用对象阵列来调用方法,如公开文档中针对MethodBase.Invoke Method(Object,Object[])所记载的。为了执行方法主体,自变量将被转换并且按照所调用方法预期的方式在栈上被建立。在编译期间,一些实施例生成按照方法所预期的方式建立栈的共享弹跳方法506,在需要时执行自变量转换,并且调用目标方法。
启用对被实现为编译器本征的方法的反射调用的支持代码
编译器本征例程是具有其实现由编译器来提供的主体的方法。该方法被处理为总是内联并且在传统意义上没有主体。为了使得主体反射可调用,一些实施例创建表现为调用其自身的主体508,如在以下伪代码示例中那样:
关于指示和描述202的附加观察
如本文他处所记载的,运行时行为描述202可采用一种或多种形式。一种形式是如本文所述且在通过援引纳入的’029申请公开中的指示文档202。在一些实现中可以使用的另一办法是使开发者通过用ECMA-355自定义属性注释源代码来控制元数据生成。其他办法对于本领域技术人员也将是显而易见的。在任一情形中,描述202包含指定什么类型218或成员228需要元数据的输入集。诸如“串行化”和“激活”等的概念由处理指示或其它描述文档的组件214转换成输入集。在该上下文中,并且特别关注于项目N文档,提供以下观察。在其中,EE类型是“运行时类型描述”(RTD)220的一个示例。
假定IL汇编件定义具有字段F、方法M和虚拟方法V的类型T。还假定管理器214决定在这一特定情景中需要以下:
情形1:没有T、F、M或V的元数据。则将不会为这些成员中的任一者生成单独的反射元数据。T、F、M和V都可以从代码来使用(例如,如果t是类型T的对象,则能够执行“t.F=something”的代码,调用t.M()或t.V())。尝试在反射API中使用该类型将很可能无法工作,除非该操作使用最小运行时(在EE类型中描述)的元数据得到满足。此类操作的示例将是类型身份(t.GetType()==typeof(T))。
情形2:浏览T的元数据,但没有任何一个成员的元数据。在这一情形中,一实施例为T生成单独的反射元数据。这一单独元数据将包括类型名称、其命名空间、以及类似的标识信息。该实施例还生成从EE类型到这一单独元数据的映射。这使得本领域技术人员完成以上情形1中提及的所有操作,加上该类型可以在更多反射API(诸如t.GetType().FullName)中被使用。使用反射API来要求成员列表将返回空集,因为没有一个成员针对元数据被启用(注意到,在反射情景之外,本领域技术人员仍然可以从代码调用t.M())。
情形3:针对T的浏览+运行时映射。这一场景等价于仅具有T的浏览。这提供了一种确保类型等价性的方法-从元数据检索到的类型将等价于EE类型所表示的。
情形4:针对T、F、M和V的浏览元数据。这是对情形3的延伸。在单独元数据中,一实施例还发出对F、M、V的描述。当应用120使用反射API来枚举T的成员时,它将看到F、M和V。它可以检查它们的类型/签名和名称,但尝试使用反射来调用命名方法或访问命名字段将会失败。M的代码可能甚至都不存在于可执行文件中,因为出于性能原因对方法的所有静态使用可能被内联到调用M的方法中。
情形5:对于T、F、M、V的浏览+运行时映射。这一情形进一步扩展情形4。现在该实施例还生成字段F与字段F的数据驻留其中的对象内的偏移之间的映射。这将使应用120使用反射来(a)定位命名字段F在T上的字段信息(本领域技术人员已经通过浏览来这么做),以及附加地(b)使用反射使用字段信息对象和T(t)实例来访问F的内容。
一些实施例还生成M的元数据和代码位置以及V$Trampoline之间的映射(以执行对于方法的类似操作),以及调用约定转换的额外代码,并且除此之外,生成弹跳代码T.V$Trampoline以执行到T.V内的虚拟调用。一些实施例还在可执行文件中提供M的方法主体(即便所有静态使用都内联,它们还会生成主体以确保M是单独可访问的)。编译器不必知晓V的位置,因为V是虚拟方法或其它动态分派方法,并且该位置将针对从T导出的类型以及盖写V的类型而不同。反射调用t.V()的尝试实际会导致调用t.V$Trampoline(),进而调用V的正确盖写。
关于反射映射表的附加观察
在一些实现中,反射映射表208将由绑定程序发到可执行模块中的运行时数据结构映射到.metadata文件内的条目(偏移)。这使得存储在.metadata文件中的仅浏览反射元数据要与运行时人工产物相匹配,从而实现诸如基于反射的类实例化的场景。各个表格在编译器中被生成,并且作为具有修补的位分类团块被发到IL文件中。绑定程序处理修补以用到绑定程序所生成的运行时结构的偏移来更新表格。每一表格用唯一ID被存储在单独团块中。表格的大小可以使用团块头部的Size(大小)字段来确定。在运行时,映射表由反射基础结构访问以将元数据句柄(其是到.metadata文件中的偏移)映射到运行时结构,并且将阵列EE类型映射到阵列元素EE类型,并且以此类推。
结语
虽然具体实施例在此处被明确示出并描述为进程、已配置的介质、或系统,但是可以理解,对一种类型的实施例的讨论也一般性地延伸到其他实施例类型。例如,结合图6对过程的描述也帮助描述已配置的介质,并帮助描述类似于结合其他附图所讨论的那些的系统和产品的技术效果和操作。对一个实施例的限制也不一定适用于另一个实施例。具体而言,进程不一定仅限于在讨论诸如已配置的存储器之类的系统或产品时呈现的数据结构和方案。
本文对具有某一特征X的实施例的引用以及本文别处对具有某一特征Y的实施例的应用不从具有特征X和特征Y两者的本公开的实施例中排除,除非这一排除在此被明确指明。术语“实施例”在此仅仅被用作过程、系统、制品、经配置的计算机可读介质和“/或此处如以与适用法律一致的方式应用的教导的其它示例的更方便的形式。”因此,给定“实施例”在该实施例与至少一个权利要求一致的情况下可包括此处所公开的特征的任何组合。
不是图中所示出的每一项都需要存在于每个实施例中。相反,实施例可以包含图中未显式地示出的项。虽然一些可能性在此处通过具体示例在文本和附图中示出,但是各实施例可以偏离这些示例。例如,一示例的具体技术效果或技术特征可以被省略、重命名、以不同的方式分组、重复、不同地以硬件和/或软件实例化,或是在两个或更多示例中出现的效果或特征的混合。在一些实施例中,在一个位置示出的功能也可以在不同位置提供;技术人员认识到在给定实现中功能模块能够以各种方式定义,而不必从作为一个整体来看的交互模块的集合中省略所需技术效果
通过附图标记参考了附图。在附图或文本中与给定附图标记相关联的措词中的任何显而易见的不一致性应该被理解为仅仅时拓宽该标记所引用的内容的范围。即使使用相同的附图标记,给定附图标记的不同实例也可以指不同的实施例。
如此处所使用的,诸如“一”和“该”等术语包括了所指示的项或步骤中的一个或多个。具体而言,在权利要求书中,对一个项的引用一般表示至少一个这样的项存在,并且对一个步骤的引用表示执行该步骤的至少一个实例。
标题仅是为了方便;关于给定话题的信息可在其标题指示该话题的章节之外被寻找到。
所提交的所有权利要求和摘要是说明书的一部分。
尽管在附图中示出并在上文中描述了示例性实施例,但本领域普通技术人员将明白,可作出多种修改而不脱离权利要求书中阐明的原理和概念,且这些修改不需要涵盖整个抽象概念。尽管用结构特征和/或过程动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于权利要求书上面所描述的具体特征或动作。不一定在给定定义或示例中标识的每一个手段或方面或技术效果都在每个实施例中存在或使用。相反,所描述的具体特征和动作以及效果是作为供当实现权利要求书时考虑的示例来公开的。
无法包围整个抽象概念但落入权利要求的等效技术方案的意义和范围内的所有改变都在法律所准许的最大程度内被包含在其范围内。
Claims (10)
1.一种用于在缩减运行时支持环境中支持静态编译的计算机程序的动态行为的软件编译过程,所述过程包括以下步骤:
接收运行时行为特性描述,所述运行时行为特性描述指定某些元数据是否要被包括在所述计算机程序的执行范围之内;
根据所述运行时行为特性描述获得在所述计算机程序的执行范围之内的一些元数据的副本;
在所获得的元数据的至少一部分与在所述计算机程序的静态提前编译期间生成的至少一个本机代码运行时人工产物之间创建映射;以及
执行以下至少一个:生成至少一个弹跳代码以支持对缩减运行时支持环境中的人工产物的反射调用,从而支持运行时诊断。
2.如权利要求1所述的过程,其特征在于,创建映射包括以下中的至少一者:
在类型定义元数据与运行时类型描述之间创建映射;
在方法定义元数据、运行时类型描述、以及所述静态编译的计算机程序中的方法的本机代码的位置之间创建映射;或者
在字段定义元数据、运行时类型描述、以及所述静态编译的计算机程序中的字段的位置之间创建映射。
3.如权利要求1所述的过程,其特征在于,进一步包括通过以下中的至少一者来在运行时人工产物之间创建映射:
在通用类型实例、运行时类型描述、以及运行时类型自变量描述之间创建映射;
在运行时阵列描述、以及运行时阵列元素描述之间创建映射;或者
在所述静态编译的计算机程序的静态类型初始化的本机代码位置以及运行时类型描述之间创建映射。
4.如权利要求1所述的过程,其特征在于,所述过程包括生成至少一个弹跳代码以支持对所述缩减运行时支持环境中的人工产物的反射调用。
5.如权利要求4所述的过程,其特征在于,生成至少一个弹跳代码的步骤生成以下中的至少一者:
执行动态分派方法调用的弹跳代码;
执行调用时边界校验的弹跳代码;
执行调用约定转换的弹跳代码;或者
表示在编译期间被内联的编译器固有方法的弹跳代码。
6.如权利要求1所述的过程,其特征在于,所述过程包括通过执行以下步骤集中的至少一个步骤来支持运行时诊断:
在所述静态编译的计算机程序内包括包含方法名称的元数据,并且从所述静态编译的计算机程序元数据中排除所述方法的任何本机代码;或者
在所述静态编译的计算机程序内包括包含类型名称的元数据,并且从所述静态编译的计算机程序元数据中排除所述类型的任何本机反射代码。
7.一种计算机系统,包括:
逻辑处理器;
与所述逻辑处理器能操作上通信的存储器;以及
驻留在所述存储器中的先前编译的计算机程序,所述先前编译的计算机程序包含以下动态支持结构中的至少一者:
元数据与至少一个本机代码运行时人工产物之间的映射;
运行时类型描述之间的映射,每一运行时类型描述包括以下中的至少一者:已编译计算机程序的执行范围中的类型的实现接口列表,或者在已编译计算机程序的执行范围内的类型的垃圾收集布局;或者
在由处理器执行之际支持对已编译计算机程序的人工产物的反射调用的至少一个代码片段。
8.如权利要求7所述的系统,其特征在于,所述已编译计算机程序在没有对即时编译的任何使用的情况下在所述计算机系统中能够完整执行。
9.如权利要求7所述的系统,其特征在于,所述系统通过以下方式中的至少一者被进一步表征:
(a)元数据与至少一个本机代码运行时人工产物之间的映射包括以下的至少一者:类型定义元数据与运行时类型描述之间的映射;方法定义元数据、运行时类型描述、以及静态编译的计算机程序中的方法的本机代码的位置之间的映射;或字段定义元数据、运行时类型描述、以及静态编译的计算机程序中的字段位置之间的映射;
(b)运行时类型描述之间的映射包括以下中的至少一者:通用类型实例、运行时类型定义描述、以及运行时类型自变量描述之间的映射;运行时阵列描述、以及运行时阵列元素描述之间的映射;或静态编译的计算机程序中静态类型初始化的本机代码位置、以及运行时类型描述之间的映射;或者
(c)在由所述处理器执行之际支持反射调用的至少一个代码片段包括以下中的至少一者:执行动态分派方法调用的代码片段;执行调用时边界校验的代码片段;执行调用约定转换的代码片段;或者表示在编译期间被内联的编译器本征方法的代码片段。
10.如权利要求7所述的系统,其特征在于,所述系统包括以下中的至少一者:智能电话、平板、具有可移动平板的膝上型计算机、或膝上型计算机。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/227,029 US9389890B2 (en) | 2014-03-27 | 2014-03-27 | Hierarchical directives-based management of runtime behaviors |
US14/227,036 US9292270B2 (en) | 2014-03-27 | 2014-03-27 | Supporting dynamic behavior in statically compiled programs |
US14/227,029 | 2014-03-27 | ||
US14/227,036 | 2014-03-27 | ||
PCT/US2015/022106 WO2015148424A1 (en) | 2014-03-27 | 2015-03-24 | Supporting dynamic behavior in statically compiled programs |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106133684A true CN106133684A (zh) | 2016-11-16 |
CN106133684B CN106133684B (zh) | 2019-08-16 |
Family
ID=52815333
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580016645.7A Active CN106133684B (zh) | 2014-03-27 | 2015-03-24 | 用于支持静态编译程序中的动态行为的方法和系统 |
CN201580016821.7A Active CN106133685B (zh) | 2014-03-27 | 2015-03-24 | 对运行时行为的基于分层指令的管理 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580016821.7A Active CN106133685B (zh) | 2014-03-27 | 2015-03-24 | 对运行时行为的基于分层指令的管理 |
Country Status (4)
Country | Link |
---|---|
EP (2) | EP3123315B1 (zh) |
CN (2) | CN106133684B (zh) |
BR (2) | BR112016021725A2 (zh) |
WO (2) | WO2015148424A1 (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107168870A (zh) * | 2017-04-28 | 2017-09-15 | 福建星瑞格软件有限公司 | 一种运行时程序信息获取方法 |
CN107515739A (zh) * | 2016-06-16 | 2017-12-26 | 阿里巴巴集团控股有限公司 | 提高代码执行性能的方法及装置 |
CN109151012A (zh) * | 2018-08-11 | 2019-01-04 | 宁波亿拍客网络科技有限公司 | 一种推送方式运行程序方法及其运用方法、相关方法 |
CN109858226A (zh) * | 2019-01-31 | 2019-06-07 | 叶春林 | 联网存储安全的保障系统 |
CN110770698A (zh) * | 2017-06-23 | 2020-02-07 | 微软技术许可有限责任公司 | 用于动态代码优化的差异静态分析 |
CN110945474A (zh) * | 2017-08-24 | 2020-03-31 | 谷歌有限责任公司 | 用于元组图程序的类型推理的系统、跨网络执行元组图程序的方法 |
CN111722849A (zh) * | 2020-07-17 | 2020-09-29 | 思客云(北京)软件技术有限公司 | Java语言虚拟编译实现方法、系统及装置 |
CN111768183A (zh) * | 2020-08-31 | 2020-10-13 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和存储介质 |
CN113168312A (zh) * | 2018-10-04 | 2021-07-23 | 摩维达产品公司 | 用于生成c/c++库与解释语言之间的绑定的方法,并且执行所述方法以转换三维(3d)模型 |
US11301222B2 (en) | 2020-08-31 | 2022-04-12 | Alipay (Hangzhou) Information Technology Co., Ltd. | Method for executing smart contract, blockchain node, and storage medium |
US11327732B2 (en) | 2020-08-31 | 2022-05-10 | Alipay (Hangzhou) Information Technology Co., Ltd. | Method for executing smart contract, blockchain node, and storage medium |
US11385917B2 (en) | 2020-08-31 | 2022-07-12 | Alipay (Hangzhou) Information Technology Co., Ltd. | Method for executing smart contract and blockchain node |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111723719B (zh) * | 2020-06-12 | 2021-08-13 | 中国科学院自动化研究所 | 基于类别外部记忆的视频目标检测方法、系统、装置 |
WO2023050036A1 (en) * | 2021-09-28 | 2023-04-06 | Huawei Technologies Co., Ltd. | Fine-grained control of instruction attributes |
CN114385388B (zh) * | 2022-03-25 | 2022-09-13 | 广东美的暖通设备有限公司 | 算法的处理方法、装置、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1395903A1 (en) * | 2001-06-15 | 2004-03-10 | Verisity Ltd. | Synthesis of verification languages |
US20050216885A1 (en) * | 2004-03-29 | 2005-09-29 | Sybase, Inc. | Attribute-Based Component Programming System and Methodology for Object-Oriented Languages |
US20080127070A1 (en) * | 2006-10-23 | 2008-05-29 | Roland Barcia | System and method for instantiating an interface or abstract class in application code |
US20090328012A1 (en) * | 2008-06-27 | 2009-12-31 | Microsoft Corporation | Compiler in a managed application context |
CN103608802A (zh) * | 2011-06-16 | 2014-02-26 | 微软公司 | 取回的文件和源文件之间的选择映射 |
US20140082597A1 (en) * | 2012-09-14 | 2014-03-20 | Hassan Chafi | Unifying static and dynamic compiler optimizations in source-code bases |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100346304C (zh) * | 2003-01-24 | 2007-10-31 | Bea系统公司 | 用于排列和解排列XML和Java中的数据类型的系统和方法 |
CN1285034C (zh) * | 2004-02-19 | 2006-11-15 | 中国科学院计算技术研究所 | 耦合寄存器的中间表示实现方法 |
US8464233B2 (en) * | 2010-06-21 | 2013-06-11 | Microsoft Corporation | Compile time interpretation of markup codes |
US9009686B2 (en) * | 2011-11-07 | 2015-04-14 | Nvidia Corporation | Algorithm for 64-bit address mode optimization |
-
2015
- 2015-03-24 CN CN201580016645.7A patent/CN106133684B/zh active Active
- 2015-03-24 CN CN201580016821.7A patent/CN106133685B/zh active Active
- 2015-03-24 EP EP15715059.0A patent/EP3123315B1/en active Active
- 2015-03-24 EP EP15715060.8A patent/EP3123316B1/en active Active
- 2015-03-24 WO PCT/US2015/022106 patent/WO2015148424A1/en active Application Filing
- 2015-03-24 BR BR112016021725A patent/BR112016021725A2/pt not_active IP Right Cessation
- 2015-03-24 WO PCT/US2015/022105 patent/WO2015148423A1/en active Application Filing
- 2015-03-24 BR BR112016021673-3A patent/BR112016021673B1/pt active IP Right Grant
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1395903A1 (en) * | 2001-06-15 | 2004-03-10 | Verisity Ltd. | Synthesis of verification languages |
US20050216885A1 (en) * | 2004-03-29 | 2005-09-29 | Sybase, Inc. | Attribute-Based Component Programming System and Methodology for Object-Oriented Languages |
US20080127070A1 (en) * | 2006-10-23 | 2008-05-29 | Roland Barcia | System and method for instantiating an interface or abstract class in application code |
US20090328012A1 (en) * | 2008-06-27 | 2009-12-31 | Microsoft Corporation | Compiler in a managed application context |
CN103608802A (zh) * | 2011-06-16 | 2014-02-26 | 微软公司 | 取回的文件和源文件之间的选择映射 |
US20140082597A1 (en) * | 2012-09-14 | 2014-03-20 | Hassan Chafi | Unifying static and dynamic compiler optimizations in source-code bases |
Non-Patent Citations (1)
Title |
---|
GOWING B 等: ""Meta-object protocols for C++: The Iguana approach"", 《PROCEEDINGS OF REFLECTION "96》 * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107515739A (zh) * | 2016-06-16 | 2017-12-26 | 阿里巴巴集团控股有限公司 | 提高代码执行性能的方法及装置 |
CN107515739B (zh) * | 2016-06-16 | 2021-02-26 | 斑马智行网络(香港)有限公司 | 提高代码执行性能的方法及装置 |
CN107168870A (zh) * | 2017-04-28 | 2017-09-15 | 福建星瑞格软件有限公司 | 一种运行时程序信息获取方法 |
CN107168870B (zh) * | 2017-04-28 | 2021-10-29 | 福建星瑞格软件有限公司 | 一种运行时程序信息获取方法 |
CN110770698A (zh) * | 2017-06-23 | 2020-02-07 | 微软技术许可有限责任公司 | 用于动态代码优化的差异静态分析 |
CN110770698B (zh) * | 2017-06-23 | 2023-10-17 | 微软技术许可有限责任公司 | 用于动态代码优化的差异静态分析 |
CN110945474A (zh) * | 2017-08-24 | 2020-03-31 | 谷歌有限责任公司 | 用于元组图程序的类型推理的系统、跨网络执行元组图程序的方法 |
CN109151012A (zh) * | 2018-08-11 | 2019-01-04 | 宁波亿拍客网络科技有限公司 | 一种推送方式运行程序方法及其运用方法、相关方法 |
CN113168312A (zh) * | 2018-10-04 | 2021-07-23 | 摩维达产品公司 | 用于生成c/c++库与解释语言之间的绑定的方法,并且执行所述方法以转换三维(3d)模型 |
CN109858226A (zh) * | 2019-01-31 | 2019-06-07 | 叶春林 | 联网存储安全的保障系统 |
CN111722849A (zh) * | 2020-07-17 | 2020-09-29 | 思客云(北京)软件技术有限公司 | Java语言虚拟编译实现方法、系统及装置 |
CN111768183A (zh) * | 2020-08-31 | 2020-10-13 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和存储介质 |
US11301222B2 (en) | 2020-08-31 | 2022-04-12 | Alipay (Hangzhou) Information Technology Co., Ltd. | Method for executing smart contract, blockchain node, and storage medium |
US11327732B2 (en) | 2020-08-31 | 2022-05-10 | Alipay (Hangzhou) Information Technology Co., Ltd. | Method for executing smart contract, blockchain node, and storage medium |
US11379830B2 (en) | 2020-08-31 | 2022-07-05 | Alipay (Hangzhou) Information Technology Co., Ltd. | Method for executing smart contract, blockchain node, and storage medium |
US11385917B2 (en) | 2020-08-31 | 2022-07-12 | Alipay (Hangzhou) Information Technology Co., Ltd. | Method for executing smart contract and blockchain node |
CN111768183B (zh) * | 2020-08-31 | 2024-04-19 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106133684B (zh) | 2019-08-16 |
BR112016021673A2 (zh) | 2017-08-15 |
EP3123315A1 (en) | 2017-02-01 |
BR112016021673B1 (pt) | 2022-09-20 |
WO2015148424A1 (en) | 2015-10-01 |
BR112016021725A2 (pt) | 2017-08-15 |
EP3123316A1 (en) | 2017-02-01 |
WO2015148423A1 (en) | 2015-10-01 |
EP3123316B1 (en) | 2020-09-02 |
CN106133685B (zh) | 2019-10-18 |
EP3123315B1 (en) | 2018-11-14 |
CN106133685A (zh) | 2016-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106133684B (zh) | 用于支持静态编译程序中的动态行为的方法和系统 | |
US10241784B2 (en) | Hierarchical directives-based management of runtime behaviors | |
US10599405B2 (en) | Application system having an LLVM compiler | |
US9836290B2 (en) | Supporting dynamic behavior in statically compiled programs | |
US9021428B2 (en) | Troubleshooting visuals and transient expressions in executing applications | |
US10545737B2 (en) | Model binding for command line parsers | |
CN102402451B (zh) | 用户定义类型的编译时边界检查 | |
CN105830025B (zh) | 动态类型化的编程语言中的属性访问 | |
CN105247483A (zh) | 应用内的带外框架库 | |
US8893081B2 (en) | Selectively enabling runtime editing of an application | |
Borowski et al. | Varv: Reprogrammable interactive software as a declarative data structure | |
US8510343B2 (en) | Cogeneration of database applications and their databases | |
Groenewegen et al. | Evolution of the WebDSL runtime: reliability engineering of the WebDSL web programming language | |
Fisher et al. | Spring Persistence with Hibernate | |
Liberty et al. | Pro Windows 8.1 Development with XAML and C | |
Oliveira et al. | Verification of plastic interactive systems | |
Galakhov | CREATION OF AN EDUCATIONAL OPERATING SYSTEM: Using the C# and. NET Framework | |
Groenewegen et al. | Evolution of the WebDSL Runtime | |
Likness | Designing Silverlight business applications: Best practices for using Silverlight effectively in the enterprise | |
Likness | Building Windows 8 Apps with C# and XAML | |
Napier et al. | IOS 5 Programming Pushing the Limits: Developing Extraordinary Mobile Apps for Apple IPhone, IPad, and IPod Touch |
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 |