CN106233251B - 元数据驱动的动态具体化 - Google Patents
元数据驱动的动态具体化 Download PDFInfo
- Publication number
- CN106233251B CN106233251B CN201580020873.1A CN201580020873A CN106233251B CN 106233251 B CN106233251 B CN 106233251B CN 201580020873 A CN201580020873 A CN 201580020873A CN 106233251 B CN106233251 B CN 106233251B
- Authority
- CN
- China
- Prior art keywords
- class
- type
- metadata
- program element
- declaration
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4492—Inheritance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- 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
-
- 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/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
- G06F8/437—Type checking
-
- 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/44—Encoding
- G06F8/443—Optimisation
-
- 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/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- 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/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4498—Finite state machines
-
- 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
- G06F9/45516—Runtime code conversion or optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
元数据驱动的动态具体化可以包括使用指令的编码形式或指令的实参的编码形式来对泛型类中的一组指令或者对包括类型变量的方法声明应用类型擦除操作。指令可以对引用类型的值进行操作并且实参可以是指示引用类型的签名。编码形式可以被注释以包括元数据,该元数据指示哪些类型变量已经被擦除以及哪些引用类型是类型变量的擦除物。附加地,元数据可以指示指令对类(或方法)声明的类型变量的值进行操作以及实参指示引用类型是类(或方法)声明的类型变量的擦除物。此外,指令或实参的编码形式可以在没有具体化或转换的情况下被直接使用。
Description
背景技术
本发明一般涉及软件开发,并且更具体地涉及诸如平台独立的、面向对象的编程语言(作为一个示例)之类的各种编程语言中的任何编程语言内的语言开发的各个方面。
在各种编程语言中,参数多态性(例如,泛型(generics))可以被认为是使得语言更有表现力同时仍维持完整的静态类型安全的方法。参数多态性可以允许以泛型的方式编写函数或数据类型,以使得该函数或数据类型可以用相同的方式处理各种数据类型而不管它们的类型不同。这样的函数和数据类型可以被称为泛型函数和泛型数据类型。例如,泛型列表类可以被编写为List<T>,这意味着它可以是任何类型T的元素的列表,其中T与List的指定分开指定。
传统上,当使用平台独立的、面向对象的语言时,不能在没有装箱(boxing)的情况下使基本(primitive)类型泛型化(generify)(例如,将比如int的基本类型的值自动转换为比如Integer的相应的包装(wrapper)类的对象)。
参数多态性(泛型)还可以涉及代码大小、生成成本和类型具体性(specificity)之间的折衷。例如,编程语言可以支持基本类型具体化的泛型,但是可以静态地生成具体化(specialized)类,从而对于代码占用空间(footprint)和编译成本来说成本潜在地增加。另一种编程语言可以为程序使用的每个实例化生成模板的具体化的实例化,这可能导致大的静态占用空间。然而第三种语言可以使用模板化的字节码格式,仅将执行具体化推到运行时,其在使用泛型类文件之前可能需要附加的步骤,从而潜在地损害运行时的性能。
发明内容
诸如可以应用到平台独立的、面向对象的编程语言之类的元数据驱动的动态具体化可以包括生成注释类文件,该注释类文件可以直接被用作类文件并且还可以是可用于具体化的模板。可以使用泛型类中的程序元素的编码(或注释)形式来应用类型擦除操作。程序元素可以表示类签名或声明、方法签名或声明、指令、指令的实参(argument),以及表示、移动或操纵数据的几乎任何程序元素。
程序元素的编码形式可以包括元数据,该元数据指示类(或方法)声明的哪些类型变量已经被擦除以及哪些类型是类型变量的擦除物(erasure)。附加地,元数据可以包括各种类型的具体化相关的信息。例如,元数据可以指示指令对类(或方法声明)的类型变量的值进行操作。类似地,元数据可以指示实参指示作为类或方法声明的类型变量的擦除物的类型。
此外,注释类文件可以直接被使用(例如,用于加载类)并且被用作用于执行类(或类文件内的其他元素)的具体化的模板。换句话说,编码形式的元数据可以不阻碍指令和/或实参被直接使用。
附图说明
图1是示出了根据一个实施例的实现元数据驱动的动态具体化的系统的部件的逻辑框图。
图2是示出了如在一个实施例中的、根据元数据驱动的动态具体化的注释类文件的使用的逻辑框图。
图3是示出了用于作为元数据驱动的动态具体化的部分的生成注释类文件的方法的一个实施例的流程图。
图4是示出了根据一个实施例的作为元数据驱动的动态具体化的部分的生成注释类文件的示例的逻辑框图。
图5是示出了用于使用元数据驱动的动态具体化进行具体化的方法的一个实施例的流程图。
图6是示出了如在一个实施例中的、根据元数据驱动的动态具体化使用注释类文件的具体化的示例的逻辑框图。
图7是示出了如在一个实施例中的、适用于实现元数据驱动的动态具体化的示例计算机系统的逻辑框图。
具体实施方式
本文描述的是对使用诸如JavaTM编程语言之类的平台独立的、面向对象的语言的软件开发的改进以支持诸如(例如)元数据驱动的动态具体化之类的各种特征的各种实施例。根据不同的实施例,元数据驱动的动态具体化可以包括生成可以以多种方式使用的注释类文件。例如,注释类文件可以直接被用作类文件,但是在具体化期间还可以被用作模板。编译器可以在注释类文件中包括类型擦除信息以作为具体化信息。例如,在具体化期间需要被调整的一个或多个程序元素可以被标记(例如,被注释、被修饰等)以创建程序元素的编码形式。因此,可以使用泛型类中的程序元素的编码形式来应用类型擦除操作。
根据一些实施例,注释类文件中的元数据可以包括具体化信息,该具体化信息指示哪些类型变量已经被擦除以及哪些类型是类型变量的擦除物。类型擦除涉及编程语言(例如,Java语言)内的泛型的使用。在执行类型擦除操作时,编译器可以被配置为将泛型类型中的所有类型参数替换为其限制(bound),或者如果类型参数是不受限的,则用Object类型替换。因此,生成的字节码可以仅包含普通类、接口和方法。附加地,执行类型擦除操作的编译器可以诸如如果必要的话通过插入类型转换(cast)之类的保持类型安全,并且可以生成桥方法以保持扩展的泛型类型中的多态性。因此,在一些实施例中,擦除可以被看作是当在较弱类型(weakly-typed)的系统上执行时在编译时执行类型检查,诸如用于高效的、但是弱类型的执行系统。
附加地,类型擦除可以被用于除了利用泛型以外的情况。例如,运行时(runtime)系统可能不包括用于所有类型的分开的字节码的完整集合。替代地,可以使用用于兼容的类型的相应的字节码来对一些类型进行编码(可能在编译器验证用于这些类型的操作的类型系统特性后)。例如,运行时系统可能不包括用于short、byte和/或boolean的分开的字节码的完整集合,但是可以在验证对short或byte和/或boolean进行的操作的类型系统特性后,替代地使用用于int的相应的字节码。
此外,注释类文件中的元数据可以不阻碍注释类文件被直接使用(例如,用于直接加载类)。因此,如本文根据各种实施例所描述的,可以允许泛型类型参数在几乎所有类型的不受限的集合内变化(例如,或者在包括不是引用的至少一个类型(诸如int)的受限的类型集合内变化)。
因此,元数据驱动的动态具体化可以允许类文件像可直接使用的类一样承担双重职责(例如,当用引用类型实例化时,促进快速类加载和共享),而当用基本类型实例化时促进按需的具体化,同时通过预先计算具体化转换并且在类文件中将它们存储为元数据来最小化具体化的运行时工作。
在下面的详细描述中,阐述了许多具体细节以提供对要求保护的主题的深入理解。然而,本领域技术人员将理解的是可以在没有这些具体细节的情况下实践要求保护的主题。在其他实例中,由于方法、装置或系统是本领域技术人员公知的,因此下文没有详细描述这些方法、装置或系统以便于不会使要求保护的主题模糊。
尽管本文以用于若干实施例和说明性的附图的示例的方式描述了各种实施例,但是本领域技术人员将认识到实施例不限于所描述的实施例或附图。应当理解的是附图及其详细描述不是旨在将实施例限制到所公开的特定形式,而是相反地,目的是覆盖落在本公开的精神和范围内的所有修改、等价物和替代物。本文使用的任何标题仅是出于组织的目的,而不是意图用于限制描述的范围。如本申请中所使用的,词语“可以”在许可的含义下(即,意味着有这样的潜力)被使用,而不是在强制的含义下(即,意味着必须)被使用。类似地,词语“包括”、“包含”和“含有”意思是包括但是不限于。
下面的详细说明的一些部分通过针对存储在特定装置或专用计算设备或平台的存储器内的二进制数字信号的操作的符号表示或算法来呈现。在该特定说明书的上下文中,术语特定装置等包括通用计算机,一旦其被编程,就根据来自程序软件的指令来执行特定功能。算法描述或符号表示是由信号处理或相关领域技术人员用于向本领域其他技术人员传达其工作实质的技术的示例。算法在此被认为、并且一般被认为是产生期望结果的操作或类似的信号处理的自洽(self-consistent)序列。在该背景下,操作或处理包括对物理量的物理操纵。通常,尽管不是必然地,这些量可以采取能够被存储、传送、组合、对比或以其他方式操纵的电信号或磁信号的形式。已经证明,主要出于常见用法的原因,有时将这些信号称为比特、数据、值、元素、符号、字符、项、数、数字等是方便的。然而,应当理解的是,这些或类似术语中的所有术语将与合适的物理量相关联并且仅仅是方便的标记。除非另外具体声明,否则如从以下讨论中明显的,要理解的是本说明书中利用诸如“处理”、“计算”、“演算”、“确定”等之类的术语的讨论是指诸如专用计算机或类似的专用电子计算设备之类的特定装置的动作或过程。因此,在本说明书的上下文中,专用计算机或类似的专用电子计算设备能够操纵或转换信号,这些信号通常被表示为该专用计算机或类似的专用电子计算设备的存储器、寄存器或其他信息存储设备、传输设备、或显示设备内的物理电子量或磁量。
现在转向图1,图1示出了根据各种实施例的、用于编译和执行计算机程序的工作流,该计算机程序在支持基本和引用数据类型以及与如本文所描述的元数据驱动的动态具体化有关的各种方法、特征和改进的高级别的、平台独立的、面向对象的语言中指定。出于说明的目的,主要在使用JavaTM编程语言的背景下提供了以下描述。然而,要注意的是,在合适的背景下,所描述的技术可以被用于支持多种类型(诸如基本类型、引用类型、记录类型、联合类型等)及其具体化的几乎任何面向对象的编程语言。
根据示出的实施例,工作流可以在诸如编译器120之类的编译器可以在一个或多个计算设备上实现并且可以接收诸如源代码110之类的用于计算机程序的源代码时开始。在各种实施例中,源代码110可以在诸如JavaTM和/或其他语言之类的各种高级别的和/或平台独立的、面向对象的编程语言中被指定。例如,在使用JavaTM的实施例中,源代码可以被提供为一组.java文件。在一些实施例中,可以使用语言的组合来指定源代码110,该语言的组合可以包括一个或多个低级别的和/或中间语言(例如,汇编语言)。在一些实施例中,源代码中的至少一些源代码可以初始地以诸如Python或Ruby之类的动态类型的高级别语言编写,而在其他实施例中,源代码中的所有源代码可以以诸如JavaTM之类的静态类型语言编写。一般来说,类可以被认为是用户定义的类型或数据结构,该用户定义的类型或数据结构可以包括数据、变量、函数、方法和/或其他属性作为成员,并且表示定义、蓝图(blueprint)或模板,以用于创建特定类型的编程对象。类可以提供用于数据成员的初始值以及用于成员函数和方法的实现。类常常包括在库(library)中。库可以被认为是由软件程序或应用使用的资源的集合。根据一些实施例,库可以包括各种类型的资源中的任何资源,该各种类型的资源包括但不限于数据、文档、类、子程序和/或类型说明。库可以被组织以便于由多于一个应用(可能同时)利用,并且可以通过提供资源以使得应用可以不必实现(或重新实现)相同的行为来促进可重用性。
编译器120可以分析源代码110以产生程序或字节码文件的可执行版本,诸如在所描绘的实施例中的注释类文件130(例如,在JavaTM的情况中的.class文件或.jar文件)。在各种实施例中可以使用不同类型的可执行代码格式;例如,二进制机器语言可以替代字节码被使用。在一些场景中,可执行代码(例如,注释类文件130)的部分可以是字节码格式,而其他部分是原生(native)二进制机器语言格式。
根据一些实施例,作为将程序源代码110编译为可执行代码(例如,注释类文件130)的部分,编译器120可以在生成可执行版本前执行一系列分析操作以及生成各种中间数据结构,诸如应用或实现元数据驱动的动态具体化。例如,编译器可以使用泛型类中的程序元素的编码的(注释的或修饰的)形式来应用类型擦除操作,从而创建注释类文件130。如上文指出的,程序元素的编码形式可以包括元数据,该元数据指示类(或方法)声明的哪些类型变量已经被擦除以及哪些类型是类型变量的擦除物。
附加地,元数据可以包括各种类型的具体化相关信息。例如,在一些实施例中,元数据驱动的动态具体化可以涉及各种元素的具体化,该各种元素包括但不限于方法接口、类接口、数据描述(例如,数据字段)和/或机器指令(例如,字节码)。因此,在一个示例中,元数据可以指示指令对类型变量的值、引用类型的值和/或类或方法声明进行操作。类似地,元数据可以指示实参指示作为类或方法声明的类型变量的擦除物的类型。附加地,元数据可以指示一个或多个类型是将类声明的类型变量用作类型实参的参数化类型的擦除物。因此,根据不同的实施例,元数据(例如,编码形式)可以指示各种类型的具体化相关信息中的任何具体化相关信息。
在一些实施例中,被配置为实现元数据驱动的动态具体化的编译器(诸如编译器120)可以保留某些类型的信息,传统上这些类型的信息在编译过程期间可能已经不被保留。例如,在一个实施例中,作为执行擦除的一部分,编译器120可以保留所利用的信息。编译器可以在注释类文件130中包括这些信息(中的至少部分信息)以作为关于具体化的元数据。
如图1所示,注释类文件130可以被传递到诸如虚拟化运行时环境140之类的执行环境,该执行环境在执行平台102上执行代码,从而创建各种输出数据和/或行为。根据各种实施例,虚拟化运行时环境140又可以包括若干不同部件,诸如存储器管理器160、字节码验证器170(例如,以便检查可执行代码的有效性)和/或解释器和/或即时(just-in-time,JIT)编译器180。在一些实施例中,JIT编译器可以负责将字节码中的一些或全部字节码(例如,字节码的大量使用的部分)翻译为平台特定的机器代码以改善程序执行的性能。在一些实施例中,虚拟化运行时环境140还可以包括用于实现若干应用编程接口(API)库190的代码。在一些实施例中,虚拟化运行时环境140可以在诸如操作系统192之类的较低级别的软件上运行。
在不同的实施例中,由于编译后的代码的执行而产生的输出或行为可以包括在各种级别的系统存储器中存储的数据(例如,内存对象和/或数据结构)、在持久性存储装置上存储的数据(例如,文件系统上的文件)等。行为还可以包括各种程序功能,诸如在屏幕上显示输出、通过网络发送消息和/或以其他方式与各种用户和/或部件交互。
在一些实施例中,虚拟化运行时环境140可以使用由编译器120生成的注释类文件130来实现元数据驱动的动态具体化。根据一些实施例,实现元数据驱动的动态具体化的虚拟化运行时环境140可以在加载要用特定的参数化进行具体化的类时,使用注释类文件130作为模板(与用来进行具体化的参数一起)并且可以产生新类,该新类是被具体化的类的特定具体化。例如,当将类具体化时,一组类型参数可以是具体化的输入的部分(例如,使用T=int作为参数可以将List<any T>具体化以获得List<int>)。一般来说,注释类文件130可以被认为是用具体化相关的元数据标记的类文件。此外,根据各种实施例,注释类文件130可以被转变为新类,该新类是注释类的具体化。
如上文指出的,注释类文件可以是可直接使用的(例如,用于在类的类型变量被擦除的情况中加载该类)并且可以被用作用于执行类(或类文件内的其他元素)的具体化的模板。图2是示出了如在一个实施例中的、根据元数据驱动的动态具体化的注释类文件的使用的逻辑框图。在一些实施例中,注释类文件130可以包括诸如类声明200之类的单个产物(artifact),该单个产物可以被用作可执行的类(例如,可以按原样被加载和使用的类),但是它还可以诸如通过包括元数据210之类的被适当地注释,以使得它可以被用作模板以生成该类的具体化版本。类似地,类文件中的方法声明也可以被注释以使得它可以被直接使用和/或被用作模板以生成该方法声明的具体化版本。
在一些实施例中,注释类文件130可以由传统虚拟化运行时环境(例如,不利用如本文所描述的元数据驱动的动态具体化的虚拟化运行时环境)使用,以及由利用如本文所描述的元数据驱动的动态具体化的虚拟化运行时环境使用。如图2所示,注释类文件130可以包括程序元素的编码形式,诸如注释类声明200。根据一个实施例,类声明200可以包括元数据210,元数据210可以由虚拟化运行时环境140使用以生成一个或多个具体化的类270。
附加地,根据一些实施例,注释类文件130和类声明200(包括元数据210)还可以由传统虚拟化运行时环境250(例如,没有被配置为实现元数据驱动的动态具体化的运行时环境)直接使用(例如,加载)以加载类260。例如,注释类文件130和/或类声明200可以包括元数据210,元数据210被组织(structure)以使得传统运行时环境250可能不会识别这些注释并且因此可能能够忽略这些注释(例如,元数据210),但是传统运行时环境250可能能够以传统的方式(例如,不利用元数据驱动的动态具体化)使用类文件以从类声明200加载类260。
例如,根据元数据驱动的动态具体化而注释的类文件可以包括注释的aload指令。传统虚拟化运行时环境可以将注释的aload识别为传统aload指令并且以普通的方式执行该指令。然而,被配置为利用元数据驱动的动态具体化的虚拟化运行时环境可以识别并且利用注释的指令以执行具体化。例如,在一个实施例中,虚拟化运行时环境140可以识别注释的aload指令,并且通过用更适用于特定的类型具体化的另一指令替换aload指令来执行该特定的类型具体化。
因此,在一些实施例中,作为仅生成不可以被直接用作类文件(例如,可作为类文件被执行)的模板或者提前生成若干类(例如,一个类用于一次实例化)的替代,单个类文件可以被生成,该单个类文件是直接可使用的,但是它还可以利用额外的信息被标记(例如,被注释)以允许它被用作模板以生成具体化(例如,在运行时)。
图3是示出了根据一个实施例的、用于作为元数据驱动的动态具体化的一部分的生成注释类文件的方法的一个实施例的流程图。如框300所示,根据一个实施例,诸如编译器120之类的编译器可以分析源代码的流以基于源代码中定义的类声明产生注释类。例如,根据一个实施例,编译器120可以分析源代码110以生成注释类文件130。尽管图2描述了关于类声明的元数据驱动的动态具体化,但是如上文指出的,元数据驱动的动态具体化可以被用于各种其他类型的程序元素,诸如方法声明、指令、实参以及移动或操纵数据和/或数据类型的几乎任何程序元素。
附加地,如框310所示,编译器120可以将类型擦除操作应用到源代码中的指令流,其中指令流旨在用于由虚拟化执行环境执行。例如,在一个实施例中,源代码110可以包括类定义,该类定义可能需要根据特定的类型参数化而被具体化。附加地,如框320所示,编译器120可以创建类声明的程序元素的编码(例如,注释)形式,其中程序元素的编码形式包括指定关于程序元素的具体化信息的元数据。因此,在一些实施例中,类型化的字节码指令可以基于元数据而被具体化,诸如通过将一些字节码标记(注释)为从特定类型变量T的擦除中得到,以使得在具体化时这些字节码可以经由机械的并且可验证的转换而成为具体化的字节码。例如,一些类型化的字节码指令可以基于元数据而被具体化,这些元数据将“aload”字节码标记为“我是aload因为我从类型变量T的擦除中得到”,以使得在具体化时它们可以(作为一个示例)经由机械的并且可验证的转换而成为iload字节码。在一些实施例中,具体化信息可以是捕获在运行时可以被用于重建类型的以其他方式擦除的、编译时类型信息的结果,或者可以被认为是该结果。
例如,图4是示出了根据一个实施例的应用到指令流的类型擦除操作的逻辑框图。如图4所示,编译器120可以分析源代码110并且可以对诸如类定义400或类定义400的一个或多个元素之类的一个或多个程序元素应用类型擦除。
泛型类的元数据驱动的动态具体化可以涉及成员签名的元数据驱动的动态具体化。根据一些实施例,成员签名的元数据驱动的动态具体化又可以涉及将方法/字段签名中的引用类型的一些出现标记(例如,注释或创建其编码形式)为类型变量T的擦除物,以使得在具体化时,它们可以成为I。在一些实施例中,成员签名中擦除后的类型的使用或其他类型使用(例如,超类型、转换(cast)、instanceof)可以被注释为从某个类型变量T的擦除中得到,以便于当具体化时,它们可以被具体化的类型的适当描述所替代,同时通过预先计算具体化转换并且在注释类文件130中将其存储为元数据的部分来最小化具体化的运行时工作。
例如,编译器120可以对类定义400应用类型擦除操作。如图4所示,根据一个示例实施例,类定义400可以包括下面的示例Box类:
用传统编译器(例如,没有被配置为实现元数据驱动的动态具体化的编译器)编译该类可以产生以下字节码:
根据各种实施例,可以采取许多方法来在字节码中表示所需要的泛型信息。例如,在一个实施例中,可以使用字节码级别的完全泛型表示。在另一个实施例中,类型和字节码可以被加标签(例如,被标记或注释)以指示该类型或字节码与源文件中存在的类型还是某一类型变量的擦除物直接相关。在一些实施例中,使用元数据驱动的动态具体化的具体化可以被考虑,并且它可以是机械的(例如,自动的和/或直接的)、不需要除了字节码验证之外在运行时进行任何附加的数据流分析或类型检查。因此,在一些实施例中,具体化的结果可以是使用现有的验证规则可验证的。因此,转换信息可以被包括在注释类文件的元数据中,该元数据又可以简化执行具体化的部件的复杂度。因此,在一些实施例中,得到的字节码可以照常(例如,用传统验证器过程)被验证。
作为如上文关于图3的框310和320所描述的应用类型擦除操作的一个示例说明,编译器120可以用T=int来具体化先前的示例Box类。因此,在上面的示例字节码(例如,类Box的编译后的版本)中,Object的一些出现可以确实意味着Object,但是一些出现可以意味着erasure(T)。根据一些实施例,如果该类对于T=int而被具体化,则get()的签名可以返回int。
图4中(以及下面的列表中)的注释类声明410示出了根据元数据驱动的动态具体化的一些实施例的被标记以保留擦除信息的相同的字节码。在一些实施例中,可以用元数据来注释类文件,该元数据可以包括在具体化期间可能需要调整的、指示签名、指令、引用、类型等的一个或多个字符或符号(例如,星号)。根据一些实施例,如注释类声明410所示,与类型名称或字节码相邻的“*”可以指示类文件中的该类型从T的擦除中得到并且因此在具体化期间可以被调整。该示例表示特定于单个类型变量并且仅用于说明目的。
因此,根据一些实施例,如注释类声明410所示,可以用“*”注释诸如字节码指令aload_1之类的各种程序元素以及数据类型声明java.lang.Object,以指示它们由T的擦除得到并且因此在具体化期间可以被调整。
尽管上面的示例包括利用星号的注释,但是在其他实施例中可以使用其他形式的注释。例如,在其他实施例中,其他符号和/或字符可以被用于指示注释类文件内的各种类型的具体化信息。附加地,在其他实施例中,指示具体化信息的元数据可以被包括在类文件内的分开的、特定的结构中。例如,在一个实施例中,注释类文件可以包括列出或以其他方式指示在具体化期间哪些程序元素可能需要被调整的一个或多个数据结构。
例如,注释类声明410可以包括指示注释的aload_1指令的元数据。传统的虚拟化运行时环境可以将注释的aload识别为传统的aload指令并且仅仅使用aload。然而,虚拟化运行时环境140可以识别并且利用注释的指令来执行具体化。因此,在一个实施例中,虚拟化运行时环境140可以通过将aload_1指令替换为更适用于特定的类型具体化的另一指令来执行该特定的类型具体化。
上文所讨论的示例仅包括待被具体化并且因此被注释的程序元素的简化集合。然而,在其他实施例中,更多个和/或不同的程序元素可能需要在具体化期间被转换并且因此可以由编译器120注释。除了上文的aload指令作为其一个示例(其他示例包括areturn和aastore)的“类型化的”字节外,其他字节码(诸如dup)也可以被注释。一般来说,根据各种实施例,采取“类”操作数的任何字节码(例如,new、checkcast、load-class-literal、getfield、putfield、invoke等)也可以由编译器120注释。
例如,继续Box类示例,当T被具体化为int时,执行
getfield Box,″t″
的任何指令可能需要被调整(例如,因为用于Box<int>的类的名称可能与用于擦除后的Box的类的名称不同)。因此,在一些实施例中,如果具体化可能导致名称改变,则通过该名称指代类型的任何指令可能需要在具体化期间调整该操作数,并且因此该指令(和/或该操作数)可能被注释。
附加地,在一些实施例中,一些字节码可以被注释以包括多种类型的具体化信息。例如,与特定的注释的字节码相关联的元数据可以指定所涉及的类(例如,用于方法调用的接收器、用于字段操作的宿主类(hosting class)等)以及被操纵的数据类型(例如,字段的类型、方法调用的返回类型等)二者。
现在回到图3,如框330所示,编译器120还可以在注释类文件中包括类声明中的程序元素的编码形式。如上文所指出的,注释类文件可以被直接使用(例如,用于加载类)以及被用作模板以用于执行类(或类文件内的其他元素)的具体化。如上文所指出的,在一些实施例中,被配置为实现元数据驱动的动态具体化的编译器(诸如编译器120)可以保留某些类型的信息,而这些类型的信息传统上在编译过程期间可能不会被保留。例如,编译器120可以保留作为执行擦除操作的部分所利用的信息,并且在注释类文件130中包括这样的信息以作为指定各种类型的具体化信息的元数据210。
在一些实施例中,元数据可以以多于一种方式被利用。例如,元数据可以被用于具体化类成员的签名(例如,类或方法签名)。附加地,元数据可以被用于具体化字节码本身(例如,以具体化单独的字节码或操作码)。例如,为特定的虚拟化运行时环境生成的字节码可能是强类型的,并且因此不同的指令可能需要基于被操纵的类型(例如,具体化的类型)而被使用(例如,与可以被用于移动或复制对象(object)的指令不同的指令可以被用于移动或复制整数(integer))。
因此,用于注释类文件的元数据可以包括关于对于特定的指令来说期望什么数据类型的信息,并且当该指令对于特定类型而被具体化时,一些指令(例如,字节码)可能需要被调整(例如,改变)以便于使用对于被操纵的特定(具体化的)类型来说合适的指令。例如,期望操纵(例如,移动、复制等)对象的指令可以被调整(例如,改变为该指令的不同版本)以便于恰当地处理不同的(具体化的)类型(例如,int、double、float等)。
在一些实施例中,元数据驱动的动态具体化可以被认为是利用泛型以使得可以生成一种类文件的方法,但是该类文件在运行时可以被动态地具体化。例如,类文件可以在没有转换的情况下直接地被使用(或解释),但是还可以在运行时作为用于具体化的模板而被使用。为了允许作为元数据驱动的动态具体化的部分而被生成的注释类文件被直接使用,可以使用用于最常见的类型信息的类型擦除来生成类文件。然而,可以用允许在运行时的类型具体化的附加信息来注释类文件。
在一些实施例中,最常见的解释可以被预先实例化,从而潜在地避免运行时(例如,用于最常见的解释的)额外的翻译步骤。例如,在一个实施例中,可以为ArrayList预先实例化ArrayList<int>和ArrayList<long>。
如上文所指出的,根据各种实施例,在注释类文件130内一个或多个程序元素(例如,类和/或方法签名)可以包括描述为了具体化如何修改程序元素的元数据210。换句话说,元数据210可以包括描述在具体化期间程序元素的哪些部分(例如,哪些指令、声明、实参等)可能需要被调整的信息。例如,类文件可以包括类签名,该类签名缺省地定义了对象的列表,但是类签名可以被注释以包括识别一个或多个部分(例如,指令、引用等)的元数据,该一个或多个部分在将类签名具体化以定义浮点数的列表(作为一个示例)时可能需要被调整。
在一些实施例中,注释类文件可以由传统虚拟化运行时环境(例如,不利用如本文所描述的元数据驱动的动态具体化的虚拟化运行时环境)使用,以及由利用如本文所描述的元数据驱动的动态具体化的虚拟化运行时环境使用。例如,注释类文件可以包括元数据,该元数据被组织以使得传统虚拟化运行时环境可能能够忽略它不识别的注释(例如,元数据),但是传统虚拟化运行时环境可能能够以传统的方式(例如,不利用元数据驱动的动态具体化)使用类文件。
例如,根据元数据驱动的动态具体化注释后的类文件可以包括注释的aload指令。传统虚拟化运行时环境可以将注释的aload识别为传统的aload指令并且仅仅使用aload。然而,被配置为利用元数据驱动的动态具体化的虚拟化运行时环境可以识别并且利用注释的指令以执行具体化。例如,在一个实施例中,虚拟化运行时环境140可以识别注释的aload指令,并且通过用更适用于特定的类型具体化的另一指令替换aload指令来执行该特定的类型具体化。
尽管本文所描述的主要关于类签名和指令,但是根据一些实施例,元数据驱动的动态具体化还可以被应用于方法签名、类签名和/或数据签名。
例如,如果给定以下类定义:
class ArrayList<T>implements Listof<T>
如果用int具体化T,则该具体化可能还需要被传播到超类,从而产生以下类签名:
class ArrayList<int>extends Listof<int>
类似地,根据一些实施例,如果方法返回T,则它可以被重写为返回int,并且具有类型ArrayList<T>的字段可以被重写为具有类型ArrayList<int>。因此,可以被认为具有类型或者与类型相关联(例如,可能引用、移动、操纵类型等)的(例如,局部变量、栈值等)几乎任何元素可以在类文件中被注释并且在具体化时被调整。
一般来说,根据各种实施例,元数据驱动的动态具体化可以被应用到承载类型信息的几乎任何元素(例如,代码、签名、由调试使用的侧表(side table)、剖析器(profiler)、垃圾收集等)。例如,不同的执行环境可能要求符合它们相应的输入格式的不同数据,但是元数据驱动的动态具体化可以应用到执行环境要求的特定类文件的所有部件。元数据驱动的动态具体化应用到的类文件部件的两个具体示例可以是签名和类型化的指令。然而,在一些实施例中,相同的具体化过程可以被应用到其他事物,诸如用于验证的栈映射表或用于调试的类型表等。
图5是示出了用于使用元数据驱动的动态具体化进行具体化的方法的一个实施例的流程图。图5示出的方法的方面可以使用图6示出的示例来讨论,图6是示出了如在一个实施例中的、根据元数据驱动的动态具体化使用注释类文件进行具体化的示例的逻辑框图。
如图5所示,虚拟化运行时环境可以(例如,在运行时)确定类内的程序元素需要根据特定的类型参数化而被具体化,如框510所示。根据一些实施例,如框520所示,然后虚拟化运行时环境可以加载包括程序元素的编码(注释)形式的类文件以作为模板,并且接着如框530所示根据类文件中的元数据来转换模板以生成根据该特定的类型参数化而被具体化的新类。当加载要利用特定的参数化而被具体化的类时,虚拟化运行时环境140可以与用于进行具体化的各个参数一起将注释类文件作为模板使用以产生新类,该新类是该类的特定的具体化。因此,根据一些实施例,注释类文件(例如,用具体化相关的元数据标记的类)可以被转变为作为注释类的具体化的新类。
例如,如图6所示,虚拟化运行时环境140可以被配置为确定类Box的实例需要根据特定的类型参数化(诸如用int)而被具体化。根据一个实施例,当针对T=int进行具体化时,可以用int替换Object的实例,并且可以用相应的i字节码替换a字节码。类似地,“aload”字节码中的一些字节码可以成为“iload”字节码。
因此,作为一个示例,虚拟化运行时环境140可以将注释类声明410具体化从而产生新类,该新类由图6和下文示出的具体化的类声明600示出:
因此,因为在该示例中Box类对于int而被具体化,所以来自注释类声明410的注释的aload_1指令可以被转换为iload_1指令。
现在回到图5,在根据元数据转换模板以生成新的具体化的类之后,如框540所示,然后虚拟化运行时环境140可以加载新类以供使用。
附加地,如果不需要具体化,则注释类文件还可以按原样使用。此外,根据一些实施例,注释类(例如,模板类)可以(例如,根据可以作为虚拟化运行时环境140的部分的程序验证器,诸如字节码验证器170)验证为擦除类。附加地,得到的具体化也可以正确地验证。换句话说,在一些实施例中,元数据驱动的动态具体化可以不涉及对验证器工作方式的任何改变。附加地,由于具体化转换可以是机械的,因此在一些实施例中,可能可以消除对具体化转换的结果的验证,诸如通过验证转换算法而不是单独的具体化转换,从而潜在地降低具体化的运行时成本。
尽管上文所描述的是关于在运行时实现元数据驱动的动态具体化,但是在一些实施例中,上文关于图5所描述的步骤中的一个或多个步骤可以在运行时之前执行。例如,在一个实施例中,类(或其他签名)可以在构建(build)时被具体化并且在运行时仅被加载,如上文所描述的。此外,根据不同的实施例,一些类可以在构建时被具体化,而其他类可以在运行时被具体化。
上文示出的和这里描述的方法可以针对现有的擦除后的泛型。用于Box.class的字节码可能已经被擦除并且适合于直接用于引用实例化。根据一些实施例,可以添加使其也能够被用作用于基本实例化的运行时具体化的模板的元数据。
如上面的示例所示,引用特有的字节码也可以被标记,该引用特有的字节码要从“areturn”改写为诸如“ireturn”(或其他基本类型或值类型)之类的它们的int特有的对应物(counterpart)。类似地,在一些实施例中,需要被调整的字段或方法签名的部件也可以被标记。附加地,指向代码属性以识别对于每个可具体化的类型变量哪些字节码可以被调整的属性、以及注释常量池中的字段或方法签名的哪些部件类似地可以被调整的属性。在一些实施例中,这可以采取新的类文件属性和/或新的常量池类型的形式。
本文描述的方法仅表示许多可能的选择中的一个选择,并且在其他实施例中可以使用注释的其他方式。如上文所指出的,尽管本文的示例使用“*”符号来表示用于传达与基本实例化的具体化有关的信息的元数据,但是根据各种实施例,出于相同的目的还可以使用不同的符号和/或机制。
根据各种实施例,具体化可以被认为是编译/执行工具链的部件。换句话说,实现元数据驱动的动态具体化的系统可以有在运行时按需执行具体化(例如,如果虚拟化运行时环境愿意/能够这样做)或提前(例如,在运行时之前)执行具体化的自由。因此,在一些实施例中,元数据驱动的动态具体化可以被实现以便于在运行时仅实例化(和/或具体化)正在被使用的类(或方法、引用等)。然而,在其他实施例中,元数据驱动的动态具体化可以被实现以便于根据一些实施例在构建时(例如,在运行之前)生成多个可能的具体化。
因此,根据各种实施例,元数据驱动的动态具体化可以涉及在构建时(例如,在运行之前)具体化和/或实例化如所期望的一样少或一样多的类/方法的能力,以及在运行时动态地具体化和/或实例化如所要求的任何附加的类/方法的能力。换句话说,元数据驱动的动态具体化可以提供确定并且利用诸如应用启动时间(例如,在运行之前具体化/实例化)和占用空间大小(例如,在运行时具体化/实例化)之间的折衷之类的各种折衷的灵活性。
根据一些实施例,在仍然使用相同的格式和相同的过程(例如,相同的具体化转换)的同时将具体化延迟到晚至运行时或者早至构建时(例如,基于各种工程考虑)的灵活性可以被认为是元数据驱动的动态具体化的特征。
根据各种实施例,在构建时还是在运行时具体化类(或其他签名)可以基于各种标准而确定。例如,在一个实施例中,编译器120(或者其他软件开发工具)可以被配置为基于源代码确定哪些类(例如,哪些具体化)可能是最可能使用的,并且可以在构建时具体化这些类同时允许其他类(例如,其他具体化)在运行时被具体化。在另一实施例中,要在构建时被具体化的类的数量可以至少部分地基于与应用占用空间大小和/或应用启动速度有关的特定目标值。在其他实施例中,当确定类应当在构建时还是运行时被具体化时,编译器可以利用预期的类使用、占用空间大小和/或启动速度的组合。
根据一个实施例,一般来说,用于确定在构建时还是运行时具体化任何特定类的特定标准还可以至少部分地基于直接在源代码中的用户(例如,程序员)输入或可替代地经由(例如,应用构建软件的)一个或多个用户接口模块的用户输入。
因此,实现元数据驱动的动态具体化的系统可以提前(例如,在运行前)执行具体化,以生成已知需要的类并且因此允许应用更快地启动(例如,尽管可能没有生成每个可能的具体化),同时还在运行时动态地具体化先前没有具体化的类。
尽管上文所描述的是关于类型特有的字节码的具体化,但是元数据驱动的动态具体化还可以被用于操纵各种类型的数据的指令(例如,字节码)。例如,在一个基于Java的示例中,元数据驱动的动态具体化还可以结合例如dup、invoke、getfield字节码以及栈映射帧、局部变量类型映射等而被利用。
附加地,根据一些实施例,元数据驱动的动态具体化还可以由其他部件和/或服务(单独地或作为虚拟化运行时环境的部分)利用。例如,调试、剖析、局部变量类型表、垃圾收集等也可以利用如本文所描述的元数据驱动的动态具体化。一般来说,涉及操纵数据类型的软件开发、执行和/或调试的几乎任何方面可以利用和/或实现元数据驱动的动态具体化。因此,在一些实施例中,具体化信息(例如,如由元数据驱动的动态具体化定义的)可以被传播到一个或多个部件,诸如以允许这些部件确定关于被具体化的数据的类型以及关于被使用的签名的具体化版本的细节。换句话说,注释类文件中的注释类型信息(例如,元数据)可以告知多个部件/服务(例如,应用执行、调试、垃圾收集、剖析等)。
根据各种实施例,注释类文件还可以包含描述由部件(例如,调试器、剖析器等)使用的数据的类型的其他属性,并且根据元数据驱动的动态具体化的某些转换也可以应用于这些属性。例如,根据一个实施例,注释类文件可以包括元数据,该元数据描述关于在调试期间使用的一个或多个类型表的具体化信息。类似地,注释类文件可以包括元数据,该元数据描述关于在验证期间将使用的一个或多个栈映射表的具体化信息。
在一些实施例中,用于元数据驱动的动态具体化的方法可以包括由编译器基于类声明生成类文件。生成类文件可以包括将类型擦除操作应用到包括类声明的指令流,其中该指令流旨在由虚拟化执行环境执行。类声明可以包括一个或多个类型变量。
附加地,在一些实施例中,应用类型擦除操作可以包括创建类声明的程序元素的编码形式。程序元素的编码形式可以包括指定关于程序元素的具体化信息的元数据,以使得虚拟化执行环境可以根据特定的类型参数化来具体化该编码形式。
根据一些实施例,应用类型擦除操作可以涉及在类文件中包括程序元素的编码形式,其中该程序元素可由虚拟化执行环境用于在不考虑编码形式的元数据的存在的情况下加载程序元素。
在一些实施例中,用于元数据驱动的动态具体化的方法可以包括由虚拟化运行时环境的部件确定类内的程序元素需要根据特定的类型参数化而被具体化。响应于确定程序元素需要被具体化,方法还可以包括加载包括该程序元素的编码形式的类文件,其中该编码形式被转换以根据特定的类型参数化生成该程序元素的具体化版本。附加地,编码形式可以包括元数据信息以允许编码形式根据特定的类型参数化而被具体化。在一些实施例中,程序元素的编码形式可以是在不考虑编码形式的元数据的存在的情况下可用的。附加地,根据一些实施例,方法可以包括基于编码形式转换程序元素以生成该程序元素的具体化版本。
在至少一些实施例中,实现本文所描述的技术中的一个或多个技术的一部分或者全部的计算机系统可以包括通用计算机系统,该通用计算机系统包括一个或多个计算机可读介质或者被配置为访问一个或多个计算机可读介质。图7示出了适用于实现本文所描述的方法、特征和改进的这样的通用计算设备3000。在示出的实施例中,计算设备3000包括经由输入/输出(I/O)接口3030耦接到系统存储器3020的一个或多个处理器3010。计算设备3000还包括耦接到I/O接口3030的网络接口3040。
在各种实施例中,计算设备3000可以是包括一个处理器3010的单处理器系统或包括若干处理器3010(例如,两个、四个、八个或另一合适的数量)的多处理器系统。处理器3010可以包括能够执行指令的任何合适的处理器。例如,在各种实施例中,处理器3010可以是实现诸如x86、PowerPC、SPARC或MIPS指令集架构(ISA)或者任何其他合适的ISA之类的各种ISA中的任何ISA的通用处理器或嵌入式处理器。在多处理器系统中,处理器3010中的每个处理器可以通常地但不是必然地实现相同的ISA。
系统存储器3020可以被配置为存储可由处理器3010访问的程序指令和数据。在各种实施例中,可以使用诸如静态随机存取存储器(SRAM)、同步动态RAM(SDRAM)、非易失性/闪存型存储器或任何其他类型的存储器之类的任何合适的存储器技术来实现系统存储器3020。在示出的实施例中,实现诸如上文所描述的那些方法、技术和数据之类的一个或多个期望的功能的程序指令和数据被示为作为代码(即,程序指令)3025和数据3026存储在系统存储器3020内。例如,在一个实施例中,存储器3020以及代码3025和数据3026可以存储用于实现上文所描述的编译器120和/或虚拟化运行时环境140的程序指令和数据。
在各种实施例中,编译器120和/或虚拟化运行时环境140(和/或其任何独立的子模块)可以各自以各种编程语言或方法中的任何编程语言或方法实现。例如,在一个实施例中,编译器120和/或虚拟化运行时环境140可以以C、C++、汇编、JAVA或其他通用编程语言中的任何通用编程语言来编写,而在另一实施例中,它们中的一个或多个可以使用不同的、更具体化的编程语言来编写。此外,在一些实施例中,可以不使用相同的编程语言来实现编译器120和/或虚拟化运行时环境140(和/或其各个子模块)。
在一个实施例中,I/O接口3030可以被配置为协调处理器3010、系统存储器3020和设备中的任何外围设备(包括网络接口3040或其他外围接口)之间的I/O业务。在一些实施例中,I/O接口3030可以执行任何所需协议、时序或其他数据转换,以将来自一个部件(例如,系统存储器3020)的数据信号转换为适合于由另一部件(例如,处理器3010)使用的格式。在一些实施例中,I/O接口3030可以包括对于通过诸如(例如)外围部件互联(PCI)总线标准或通用串行总线(USB)标准的变型之类的各种类型的外围总线附接的设备的支持。另外,在一些实施例中,I/O接口3030的功能(诸如到系统存储器3020的接口)中的一些功能或全部功能可以被直接合并到处理器3010中。
网络接口3040可以被配置为允许数据在附接到一个或多个网络3050的计算设备3000和其他设备3060之间交换。在各种实施例中,网络接口3040可以支持经由诸如例如以太网网络的类型之类的任何适合的有线或无线通用数据网络的通信。
在一些实施例中,系统存储器3020可以是被配置为存储如上文参照图1-6所描述的程序指令和数据以用于实现相应的方法和装置的实施例的计算机可读(例如,计算机可访问)介质的一个实施例。然而,在其他实施例中,程序指令和/或数据可以在不同类型的计算机可读介质上接收、发送或存储。一般而言,计算机可读介质可以包括诸如磁介质或光介质之类的非暂态存储介质或存储器介质,例如经由I/O接口3030耦接到计算设备3000的盘或DVD/CD。非暂态计算机可读存储介质还可以包括可以作为系统存储器3020或另一类型的存储器被包括在计算设备3000的一些实施例中的任何易失性或非易失性介质,诸如RAM(例如,SDRAM、DDR SDRAM、RDRAM、SRAM等)、ROM等。
此外,计算机可读介质可以包括经由诸如网络和/或无线链路之类的通信介质传送(诸如可以经由网络接口3040实现)的诸如电信号、电磁信号或数字信号之类的传输介质或信号。诸如图7示出的计算设备之类的多个计算设备中的部分或全部计算设备可以被用于实现各种实施例中的所描述的功能;例如,在各种不同的设备和服务器上运行的软件部件可以协作以提供功能。在一些实施例中,所描述的功能中的部分功能除了使用通用计算机系统实现之外或者作为使用通用计算机系统实现的替代,可以使用存储设备、网络设备或专用计算机系统来实现。如在此使用的术语“计算设备”是指至少所有这些类型的设备,但是不限于这些类型的设备。
各种实施例还可以包括接收、发送或存储在计算机可读介质上根据前面的描述而实现的指令和/或数据。一般而言,计算机可读介质可以包括存储介质或存储器介质,诸如磁介质或光介质(例如盘或DVD/CD-ROM)、诸如RAM(例如,SDRAM、DDR、RDRAM、SRAM等)、ROM等之类的易失性或非易失性介质。在一些实施例中,计算机可读介质还可以包括经由诸如网络和/或无线链路之类的通信介质传送的诸如电信号、电磁信号或数字信号之类的传输介质或信号。
如附图中所示的以及如本文所描述的各种方法表示方法的示例性实施例。方法可以在软件、硬件或其组合中实现。在各种方法中,步骤的顺序可以被改变,并且各种元素可以被增加、重新排序、组合、省略、修改等。各种步骤可以自动地(例如,不用由用户输入直接引起)执行和/或以编程方式(例如,根据程序指令)执行。
尽管本文参照具体实施例并且在具体实施例的背景下描述了各种系统和方法,但是要理解的是这些实施例是说明性的并且本公开的范围不限于这些具体实施例。许多变型、修改、添加和改进是可能的。例如,描述中提到的框和逻辑单元是为了理解所描述的实施例而不是意图限制本公开。例如,在一些实施例中,本文所描述的由编译器120执行的动作、过程、方法、任务或功能可以由虚拟化运行时环境140执行,反之亦然。附加地,在本文所描述的或者用不同术语所描述的系统和方法的各种实现中,功能可以以不同方式在框中分开或组合。
意图将这些实施例作为说明性的而不是限制性的。因此,可以为在此被描述为单个实例的部件提供多个实例。各种部件、操作和数据存储之间的界限在某种程度上是任意的,并且特定的操作是在具体的说明性配置的背景下示出的。功能的其他分配是所预期的并且可以落入遵从的示例的范围内。最终,在示例性配置中呈现为分离的部件的结构和功能可以被实现为组合的结构或部件。
尽管详细描述了以上实施例,但是一旦充分理解了以上公开,则许多变型和修改将变得明显。旨在将以下权利要求解释为包括所有这样的变型和修改。
Claims (18)
1.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储程序指令,所述程序指令在计算设备上被执行时使得所述计算设备执行以下步骤:
由编译器基于类声明生成注释类文件,其中所述生成包括:
对用于所述类声明的指令流应用类型擦除操作,其中所述指令流由虚拟化执行环境执行,以及其中所述类声明包括一个或多个类型变量;
其中应用所述类型擦除操作包括:
用元数据编码所述类声明的程序元素以创建所述程序元素的编码形式以提供类型具体化,所述元数据指定关于所述程序元素的具体化信息,所述具体化信息指示哪些类型变量已经被擦除;以及
在所述注释类文件中包括所述程序元素的所述编码形式,其中所述程序元素在被所述虚拟化执行环境针对特定类型具体化时基于所述元数据被转换以根据所述特定类型的特定参数化生成所述程序元素的具体化版本,其中所述程序元素的编码形式在未转换的情况下也是能够由虚拟化执行环境执行的。
2.如权利要求1所述的非暂态计算机可读存储介质,其中所述程序元素包括所述指令流中的指令,其中所述指令指示其对一个或多个引用类型的值进行操作。
3.如权利要求2所述的非暂态计算机可读存储介质,其中所述元数据指示所述一个或多个引用类型是所述类声明的一个或多个类型变量的擦除物。
4.如权利要求2所述的非暂态计算机可读存储介质,其中所述元数据指示所述一个或多个引用类型是一个或多个参数化类型的擦除物,所述一个或多个参数化类型将所述类声明的一个或多个类型变量用作类型实参。
5.如权利要求1、3或4所述的非暂态计算机可读存储介质,其中所述程序元素包括所述指令流中的指令的实参,其中所述实参是指示一个或多个引用类型的签名。
6.如权利要求1所述的非暂态计算机可读存储介质,其中所述指令流在以下主体中的一个或多个主体内出现:
所述类声明中的方法声明的主体,其中所述类声明是泛型类声明,或者
类声明中的泛型方法声明的主体。
7.如权利要求1所述的非暂态计算机可读存储介质,其中所述程序元素的所述编码形式包括所述指令流的字节码版本,以及其中所述编码形式的所述元数据识别一个或多个字节码,所述一个或多个字节码要被调整以基于所述类声明生成类的具体化版本。
8.一种用于具体化泛型类的方法,包括:
由在一个或多个计算设备上实现的编译器基于类声明生成注释类文件,其中所述生成包括:
对用于所述类声明的指令流应用类型擦除操作,其中所述指令流由虚拟化执行环境执行,以及其中所述类声明包括一个或多个类型变量;
其中应用所述类型擦除操作包括:
用元数据编码所述类声明的程序元素以创建所述程序元素的编码形式以提供具体化,所述元数据指定关于所述程序元素的具体化信息,所述具体化信息指示哪些类型变量已经被擦除;以及
在所述注释类文件中包括所述程序元素的所述编码形式,其中所述程序元素在被所述虚拟化执行环境针对特定类型具体化时基于所述元数据被转换以根据所述特定类型的特定参数化生成所述程序元素的具体化版本,其中所述程序元素的编码形式在未转换的情况下也是能够由虚拟化执行环境执行的。
9.如权利要求8所述的方法,其中所述程序元素包括所述指令流中的指令,以及
其中所述应用所述类型擦除操作还包括:
确定所述指令指示其对一个或多个引用类型的一个或多个值进行操作;以及
至少部分地基于所述确定,在所述程序元素的所述编码形式中包括所述指令对所述一个或多个引用类型的所述一个或多个值进行操作的指示。
10.如权利要求9所述的方法,其中所述创建编码形式包括:
在所述元数据中包括所述一个或多个引用类型是所述类声明的一个或多个类型变量的擦除物的指示。
11.如权利要求9所述的方法,其中所述创建编码形式包括:
在所述元数据中包括所述一个或多个引用类型是一个或多个参数化类型的擦除物的指示,所述一个或多个参数化类型将所述类声明的一个或多个类型变量用作类型实参。
12.如权利要求8、10或11所述的方法,其中所述程序元素包括所述指令流中的指令的实参,其中所述实参是指示一个或多个引用类型的签名,以及其中所述应用所述类型擦除操作还包括:
在所述程序元素的所述编码形式中包括所述签名指示所述一个或多个引用类型的指示。
13.如权利要求8所述的方法,其中所述指令流在以下主体中的一个或多个主体内出现:
所述类声明中的方法声明的主体,其中所述类声明是泛型类声明,或者
类声明中的泛型方法声明的主体。
14.如权利要求8所述的方法,所述创建编码形式包括:
在所述程序元素的所述编码形式中包括所述指令流的字节码版本;以及
在所述编码形式的所述元数据中包括识别一个或多个字节码的信息,所述一个或多个字节码需要被调整以便于基于所述类声明生成类的具体化版本。
15.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储程序指令,所述程序指令在计算设备上执行时使得所述计算设备执行以下步骤:
由虚拟化运行时环境的部件确定类内的程序元素需要根据特定的类型参数化而被具体化;
响应于所述确定,加载根据权利要求10的方法生成的类文件,所述类文件包括所述类的所述程序元素的编码形式,其中所述编码形式待被转换以根据所述特定的类型参数化生成所述程序元素的具体化版本,其中所述编码形式包括元数据信息,所述元数据信息指定关于所述程序元素的具体化信息,所述具体化信息指示所述类的已经被擦除的类型变量并且允许所述编码形式根据所述特定的类型参数化而被具体化;以及
基于所述编码形式转换所述程序元素以根据所述特定的类型参数化生成所述程序元素的所述具体化版本。
16.如权利要求15所述的非暂态计算机可读存储介质,其中所述程序元素包括以下各项中的一个或多个:
类签名;
方法签名;
指令;或者
指令的实参。
17.一种用于具体化泛型类的计算设备,包括:
处理器;以及
存储器,其上存储有指令,所述指令在被处理器执行时使得处理器执行如权利要求8-14中任一项所述的方法。
18.一种用于具体化泛型类的装置,包括用于执行如权利要求8-14中任一项所述的方法的各个步骤的部件。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201461982802P | 2014-04-22 | 2014-04-22 | |
US61/982,802 | 2014-04-22 | ||
US14/660,143 US9785456B2 (en) | 2014-04-22 | 2015-03-17 | Metadata-driven dynamic specialization |
US14/660,143 | 2015-03-17 | ||
PCT/US2015/026947 WO2015164426A1 (en) | 2014-04-22 | 2015-04-21 | Metadata-driven dynamic specialization |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106233251A CN106233251A (zh) | 2016-12-14 |
CN106233251B true CN106233251B (zh) | 2019-12-31 |
Family
ID=53059453
Family Applications (6)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580020873.1A Active CN106233251B (zh) | 2014-04-22 | 2015-04-21 | 元数据驱动的动态具体化 |
CN201580028725.4A Active CN106716349B (zh) | 2014-04-22 | 2015-04-21 | 特化类的手动精炼 |
CN202010673980.7A Pending CN111813389A (zh) | 2014-04-22 | 2015-04-21 | 特化类的手动精炼 |
CN201580028016.6A Active CN106415488B (zh) | 2014-04-22 | 2015-04-22 | 将泛型类分解成层 |
CN201580028400.6A Active CN106462412B (zh) | 2014-04-22 | 2015-04-22 | 动态地产生的基于模式的类的结构识别 |
CN201580029282.0A Active CN106462414B (zh) | 2014-04-22 | 2015-04-22 | 特化类的依赖性驱动的共同特化 |
Family Applications After (5)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580028725.4A Active CN106716349B (zh) | 2014-04-22 | 2015-04-21 | 特化类的手动精炼 |
CN202010673980.7A Pending CN111813389A (zh) | 2014-04-22 | 2015-04-21 | 特化类的手动精炼 |
CN201580028016.6A Active CN106415488B (zh) | 2014-04-22 | 2015-04-22 | 将泛型类分解成层 |
CN201580028400.6A Active CN106462412B (zh) | 2014-04-22 | 2015-04-22 | 动态地产生的基于模式的类的结构识别 |
CN201580029282.0A Active CN106462414B (zh) | 2014-04-22 | 2015-04-22 | 特化类的依赖性驱动的共同特化 |
Country Status (6)
Country | Link |
---|---|
US (9) | US9785456B2 (zh) |
EP (5) | EP3134809B1 (zh) |
JP (1) | JP6592009B2 (zh) |
CN (6) | CN106233251B (zh) |
BR (1) | BR112016024522B1 (zh) |
WO (5) | WO2015164436A1 (zh) |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9785456B2 (en) | 2014-04-22 | 2017-10-10 | Oracle International Corporation | Metadata-driven dynamic specialization |
US9792094B2 (en) * | 2014-09-04 | 2017-10-17 | Home Box Office, Inc. | Factory identification system |
EP3198424B1 (en) | 2014-09-25 | 2021-11-17 | Oracle International Corporation | System and method for supporting dynamic deployment of executable code in a distributed computing environment |
US9575750B2 (en) * | 2014-12-11 | 2017-02-21 | Successfactors, Inc. | Generic annotation seeker |
US9921859B2 (en) * | 2014-12-12 | 2018-03-20 | The Regents Of The University Of Michigan | Runtime compiler environment with dynamic co-located code execution |
US10146522B1 (en) * | 2015-03-10 | 2018-12-04 | Twitter, Inc. | Live code updates |
US9594904B1 (en) * | 2015-04-23 | 2017-03-14 | Fireeye, Inc. | Detecting malware based on reflection |
US10129361B2 (en) * | 2015-07-01 | 2018-11-13 | Oracle International Corporation | System and method for multi-version remote function execution control in a distributed computing environment |
US9471285B1 (en) | 2015-07-09 | 2016-10-18 | Synopsys, Inc. | Identifying software components in a software codebase |
US10120661B2 (en) * | 2015-07-16 | 2018-11-06 | Sugarcrm Inc. | Multi-flavored software execution from a singular code base |
US10055208B2 (en) * | 2015-08-09 | 2018-08-21 | Oracle International Corporation | Extending a virtual machine instruction set architecture |
US10083014B2 (en) * | 2015-09-08 | 2018-09-25 | Oracle International Corporation | Generating dynamic modular proxies |
US10275226B2 (en) * | 2015-10-23 | 2019-04-30 | Oracle International Corporation | Structural representation of generic type variable in a nominally typed virtual machine |
US9904543B2 (en) * | 2015-10-26 | 2018-02-27 | Hewlett-Packard Development Company, L.P. | Setting a build indicator to enable or disable a feature |
US10861202B1 (en) | 2016-07-31 | 2020-12-08 | Splunk Inc. | Sankey graph visualization for machine data search and analysis system |
US11037342B1 (en) * | 2016-07-31 | 2021-06-15 | Splunk Inc. | Visualization modules for use within a framework for displaying interactive visualizations of event data |
US10459939B1 (en) | 2016-07-31 | 2019-10-29 | Splunk Inc. | Parallel coordinates chart visualization for machine data search and analysis system |
US10459938B1 (en) | 2016-07-31 | 2019-10-29 | Splunk Inc. | Punchcard chart visualization for machine data search and analysis system |
US10853380B1 (en) | 2016-07-31 | 2020-12-01 | Splunk Inc. | Framework for displaying interactive visualizations of event data |
US20180074797A1 (en) * | 2016-09-09 | 2018-03-15 | Hewlett Packard Enterprise Development Lp | Transform a data object in a meta model based on a generic type |
US10083029B2 (en) * | 2016-11-09 | 2018-09-25 | Red Hat, Inc. | Detect application defects by correlating contracts in application dependencies |
KR102471221B1 (ko) * | 2016-11-14 | 2022-11-28 | 삼성에스디에스 주식회사 | 애플리케이션 변환 장치 및 방법 |
US10228957B2 (en) * | 2017-01-20 | 2019-03-12 | International Business Machines Corporation | Online method handle deduplication |
US10417036B2 (en) * | 2017-02-24 | 2019-09-17 | Oracle International Corporation | Evaluation techniques for fast access to structured, semi-structured and unstructured data using a virtual machine that provides support for dynamic code generation |
US10572275B2 (en) | 2017-06-15 | 2020-02-25 | Microsoft Technology Licensing, Llc | Compatible dictionary layout |
US11360976B2 (en) | 2017-08-31 | 2022-06-14 | Oracle International Corporation | Deployment of javascript and typescript stored procedures and user-defined functions into database management systems |
US11662719B2 (en) * | 2017-09-29 | 2023-05-30 | Rockwell Automation Technologies, Inc. | Classification modeling for monitoring, diagnostics optimization and control |
EP3693851B1 (en) * | 2017-10-09 | 2023-01-11 | Huawei Technologies Co., Ltd. | Class unloading method and electronic device |
CN110119274A (zh) * | 2018-02-05 | 2019-08-13 | 北京智明星通科技股份有限公司 | 一种数据编译的方法、装置以及电子终端、计算机可读存储介质 |
CN108446113B (zh) * | 2018-03-28 | 2021-06-15 | 武汉斗鱼网络科技有限公司 | 类名称获取方法、装置及电子设备 |
CN110347372B (zh) * | 2018-04-08 | 2022-07-05 | 福建省天奕网络科技有限公司 | 一种遍历数据的方法及终端 |
CN109117142B (zh) * | 2018-07-19 | 2020-11-24 | 北京理工大学 | 一种基于变量关联树的基本类型重构方法 |
US11425002B1 (en) * | 2018-11-26 | 2022-08-23 | Amazon Technologies, Inc. | Infrastructure managing framework for serverless architecture |
CN111736913B (zh) * | 2019-03-25 | 2021-11-19 | 华为技术有限公司 | 类加载方法和装置 |
US11068543B2 (en) * | 2019-06-11 | 2021-07-20 | Dell Products L.P. | Component and object management of information handling systems |
US11030066B2 (en) * | 2019-10-30 | 2021-06-08 | EMC IP Holding Company LLC | Dynamic application decomposition for execution in a computing environment |
CN111857662B (zh) * | 2020-07-15 | 2023-06-30 | 曹蕤 | 基于map和接口来描述对象特定构成的程序设计方法 |
US20220134222A1 (en) * | 2020-11-03 | 2022-05-05 | Nvidia Corporation | Delta propagation in cloud-centric platforms for collaboration and connectivity |
CN114706619A (zh) * | 2020-12-16 | 2022-07-05 | 武汉斗鱼鱼乐网络科技有限公司 | 配置信息的处理方法、装置、电子设备及存储介质 |
US20220300352A1 (en) | 2021-03-19 | 2022-09-22 | Oracle International Corporation | Determining a resolution state of an anchor constant associated with an application programming interface (api) point |
US11947931B2 (en) * | 2021-10-12 | 2024-04-02 | Sap Se | Generic factory class |
US12020023B2 (en) * | 2022-08-08 | 2024-06-25 | Capital One Services, Llc | Computer-based systems configured to decouple delivery of product configuration changes associated with continuous integration/continuous delivery programming pipelines and methods of use thereof |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6067577A (en) * | 1996-09-30 | 2000-05-23 | Apple Computer, Inc. | Dynamic method resolution for native methods in a dynamic object-oriented programming language |
CN102511033A (zh) * | 2009-09-25 | 2012-06-20 | 国际商业机器公司 | 对象级别兼容性和使用语义值的类大小调整 |
Family Cites Families (124)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5421016A (en) * | 1991-12-12 | 1995-05-30 | International Business Machines Corporation | System and method for dynamically invoking object methods from an application designed for static method invocation |
WO1994005289A1 (en) | 1992-09-09 | 1994-03-17 | Vanderbilt University | Method and compositions for maintaining glomerular filtration rate while inhibition extracellular matrix accumulation |
US6378003B1 (en) * | 1993-04-05 | 2002-04-23 | International Business Machines Corporation | Method and system for deriving metaclasses in an object oriented system |
US5379432A (en) * | 1993-07-19 | 1995-01-03 | Taligent, Inc. | Object-oriented interface for a procedural operating system |
US5628016A (en) | 1994-06-15 | 1997-05-06 | Borland International, Inc. | Systems and methods and implementing exception handling using exception registration records stored in stack memory |
US5630131A (en) * | 1994-11-14 | 1997-05-13 | Object Technology Licensing Corp. | Method and apparatus for importing and exporting archive files for a graphical user interface |
US6360360B1 (en) | 1996-02-08 | 2002-03-19 | International Business Machines Corporation | Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects |
US5940616A (en) * | 1996-05-31 | 1999-08-17 | International Business Machines Corporation | Tracker class for object-oriented programming environments |
US5923878A (en) * | 1996-11-13 | 1999-07-13 | Sun Microsystems, Inc. | System, method and apparatus of directly executing an architecture-independent binary program |
US6513152B1 (en) * | 1997-07-23 | 2003-01-28 | International Business Machines Corporation | Object oriented framework mechanism for customization of object oriented frameworks |
US6230314B1 (en) * | 1997-10-02 | 2001-05-08 | International Business Machines Corporation | Method and device for program transformation using class hierarchy transformation based upon type constraint analysis |
US5966702A (en) * | 1997-10-31 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for pre-processing and packaging class files |
US6279008B1 (en) | 1998-06-29 | 2001-08-21 | Sun Microsystems, Inc. | Integrated graphical user interface method and apparatus for mapping between objects and databases |
US6138269A (en) * | 1998-05-20 | 2000-10-24 | Sun Microsystems, Inc. | Determining the actual class of an object at run time |
US6018628A (en) * | 1998-06-16 | 2000-01-25 | Sun Microsystems, Inc. | Method of implementing parameterized types to be compatible with existing unparameterized libraries |
US6769124B1 (en) * | 1998-07-22 | 2004-07-27 | Cisco Technology, Inc. | Persistent storage of information objects |
US6226788B1 (en) * | 1998-07-22 | 2001-05-01 | Cisco Technology, Inc. | Extensible network management system |
US8418131B2 (en) * | 1998-11-25 | 2013-04-09 | Helmut Emmelmann | Interactive server side components |
WO2000070417A1 (en) * | 1999-05-17 | 2000-11-23 | The Foxboro Company | Process control configuration system with parameterized objects |
US7089530B1 (en) * | 1999-05-17 | 2006-08-08 | Invensys Systems, Inc. | Process control configuration system with connection validation and configuration |
US6484313B1 (en) * | 1999-06-30 | 2002-11-19 | Microsoft Corporation | Compiling and persisting of intermediate language code |
US6560774B1 (en) * | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
US6484276B1 (en) * | 1999-10-25 | 2002-11-19 | Lucent Technologies Inc. | Method and apparatus for providing extensible object-oriented fault injection |
US6907546B1 (en) | 2000-03-27 | 2005-06-14 | Accenture Llp | Language-driven interface for an automated testing framework |
US7334216B2 (en) | 2000-04-04 | 2008-02-19 | Sosy, Inc. | Method and apparatus for automatic generation of information system user interfaces |
US6901588B1 (en) * | 2000-04-17 | 2005-05-31 | Codemesh, Inc. | Sharing components between programming languages by use of polymorphic proxy |
EP1292887A1 (en) | 2000-04-21 | 2003-03-19 | Togethersoft Corporation | Methods and systems for generating source code for object-oriented elements |
US7577834B1 (en) * | 2000-05-09 | 2009-08-18 | Sun Microsystems, Inc. | Message authentication using message gates in a distributed computing environment |
GB0011954D0 (en) * | 2000-05-17 | 2000-07-05 | Univ Surrey | Protocol stacks |
JP4662657B2 (ja) * | 2000-07-10 | 2011-03-30 | マイクロソフト コーポレーション | 統一データ型システムおよび方法 |
CA2417752A1 (en) * | 2000-08-02 | 2002-02-07 | Philipp Kutter | Xml-robot |
US6701501B2 (en) * | 2000-10-16 | 2004-03-02 | Simon Joshua Waters | Structured algorithmic programming language approach to system design |
US6968540B2 (en) * | 2000-10-25 | 2005-11-22 | Opnet Technologies Inc. | Software instrumentation method and apparatus |
EP1330709A2 (en) | 2000-11-03 | 2003-07-30 | Wilde Technologies Limited | A software development process |
US6757890B1 (en) * | 2000-12-28 | 2004-06-29 | Sun Microsystems, Inc. | Methods and apparatus for enabling local Java object allocation and collection |
US7277836B2 (en) * | 2000-12-29 | 2007-10-02 | Exxonmobil Upstream Research Company | Computer system and method having a facility network architecture |
US7761270B2 (en) * | 2000-12-29 | 2010-07-20 | Exxonmobil Upstream Research Co. | Computer system and method having a facility management logic architecture |
US7243346B1 (en) * | 2001-05-21 | 2007-07-10 | Microsoft Corporation | Customized library management system |
US7162716B2 (en) | 2001-06-08 | 2007-01-09 | Nvidia Corporation | Software emulator for optimizing application-programmable vertex processing |
US7117489B2 (en) | 2001-06-20 | 2006-10-03 | Sun Microsystems, Inc. | Optional attribute generator for customized Java programming environments |
US7149734B2 (en) * | 2001-07-06 | 2006-12-12 | Logic Library, Inc. | Managing reusable software assets |
US7017162B2 (en) * | 2001-07-10 | 2006-03-21 | Microsoft Corporation | Application program interface for network software platform |
US7853933B2 (en) * | 2001-09-29 | 2010-12-14 | Siebel Systems, Inc. | Computing system and method to perform compile-time extension for world wide web application |
US6948156B2 (en) | 2001-10-24 | 2005-09-20 | Sun Microsystems, Inc. | Type checking in java computing environments |
US6961933B2 (en) | 2001-10-24 | 2005-11-01 | Sun Microsystems, Inc. | Representation of Java data types in virtual machines |
US7353502B2 (en) * | 2002-07-03 | 2008-04-01 | The Mathworks, Inc. | System and method for creation of software components |
US7127709B2 (en) * | 2002-09-25 | 2006-10-24 | Microsoft Corporation | System and method for jointly managing dynamically generated code and data |
US8032860B2 (en) * | 2003-02-26 | 2011-10-04 | Oracle International Corporation | Methods for type-independent source code editing |
US20040221228A1 (en) | 2003-04-30 | 2004-11-04 | International Business Machines Corporation | Method and apparatus for domain specialization in a document type definition |
US7496892B2 (en) * | 2003-05-06 | 2009-02-24 | Andrew Nuss | Polymorphic regular expressions |
US7380242B2 (en) * | 2003-05-14 | 2008-05-27 | Mainsoft Israel Ltd. | Compiler and software product for compiling intermediate language bytecodes into Java bytecodes |
US7240327B2 (en) * | 2003-06-04 | 2007-07-03 | Sap Ag | Cross-platform development for devices with heterogeneous capabilities |
US7707566B2 (en) * | 2003-06-26 | 2010-04-27 | Microsoft Corporation | Software development infrastructure |
US7219330B2 (en) * | 2003-06-26 | 2007-05-15 | Microsoft Corporation | Extensible metadata |
US7086041B2 (en) * | 2003-06-27 | 2006-08-01 | Microsoft Corporation | Extensible type system for representing and checking consistency of program components during the process of compilation |
US7634763B2 (en) * | 2003-07-15 | 2009-12-15 | Microsoft Corporation | Extensible multi-language compilation |
US7890928B2 (en) * | 2003-07-26 | 2011-02-15 | Pilla Gurumurty Patrudu | Mechanism and system for representing and processing rules |
US20050055682A1 (en) | 2003-09-08 | 2005-03-10 | Microsoft Corporation | Authoring and using generic classes in JAVA language code |
US7130863B2 (en) * | 2003-09-24 | 2006-10-31 | Tablecode Software Corporation | Method for enhancing object-oriented programming through extending metadata associated with class-body class-head by adding additional metadata to the database |
US7669193B1 (en) * | 2003-09-25 | 2010-02-23 | Lantronix, Inc. | Program transformation using flow-sensitive type constraint analysis |
US7496908B2 (en) * | 2004-01-14 | 2009-02-24 | International Business Machines Corporation | Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information |
US7448022B1 (en) * | 2004-02-10 | 2008-11-04 | Prasad Ram | Dynamic software composition in a component-based software system |
US7644402B1 (en) * | 2004-03-17 | 2010-01-05 | Sun Microsystems, Inc. | Method for sharing runtime representation of software components across component loaders |
US8677312B1 (en) | 2004-03-30 | 2014-03-18 | Synopsys, Inc. | Generation of compiler description from architecture description |
US7343379B2 (en) * | 2004-05-21 | 2008-03-11 | Bea Systems, Inc. | System and method for controls |
US7665062B1 (en) * | 2004-07-02 | 2010-02-16 | Borland Software Corporation | System and methodology for design-time dynamic class type construction |
AU2004322201B2 (en) * | 2004-08-12 | 2008-10-30 | Fujitsu Limited | Java applet, jar file creating method, jar file creating program, and jar file creating device |
US7657874B2 (en) * | 2004-08-24 | 2010-02-02 | Microsoft Corporation | Pattern types as constraints on generic type parameters |
US7676476B2 (en) * | 2004-08-25 | 2010-03-09 | Microsoft Corporation | Data types with incorporated collation information |
US7475150B2 (en) | 2004-09-07 | 2009-01-06 | International Business Machines Corporation | Method of generating a common event format representation of information from a plurality of messages using rule-based directives and computer keys |
US7614045B2 (en) * | 2004-09-24 | 2009-11-03 | Sap (Ag) | Sharing classes and class loaders |
US7530051B1 (en) * | 2004-10-21 | 2009-05-05 | Sun Microsystems, Inc. | Method and apparatus for dimensional analysis encoded in metatypes and generics |
DE102004057490B4 (de) * | 2004-11-29 | 2007-02-22 | Infineon Technologies Ag | Vorrichtung und Verfahren zum Verarbeiten eines Programmcodes |
US8250528B2 (en) | 2004-12-15 | 2012-08-21 | Microsoft Corporation | Static inheritance systems and methods |
US7493605B2 (en) * | 2004-12-29 | 2009-02-17 | Mainsoft R&D Ltd | Method and a software product for adapting a .Net framework compliant reflection mechanism to a java environment |
US7571430B2 (en) * | 2005-01-24 | 2009-08-04 | Lsi Logic Corporation | Adaptive dispatch table based on templates |
US7844958B2 (en) * | 2005-03-11 | 2010-11-30 | Aptana, Inc. | System and method for creating target byte code |
CA2504333A1 (en) * | 2005-04-15 | 2006-10-15 | Symbium Corporation | Programming and development infrastructure for an autonomic element |
US7983209B2 (en) | 2005-04-18 | 2011-07-19 | Research In Motion Limited | System and method for producing notification based web services |
US8438551B2 (en) | 2005-06-27 | 2013-05-07 | Csc Technology Singapore Pte Ltd | Code transformation |
US7716630B2 (en) * | 2005-06-27 | 2010-05-11 | Ab Initio Technology Llc | Managing parameters for graph-based computations |
US7992140B2 (en) * | 2005-07-29 | 2011-08-02 | Microsoft Corporation | Compiler supporting programs as data objects |
WO2007035545A2 (en) * | 2005-09-15 | 2007-03-29 | Invixa, Llc | Apparatus, method and system for building software by composition |
US8121985B2 (en) * | 2005-10-24 | 2012-02-21 | Sap Aktiengesellschaft | Delta versioning for learning objects |
US20070168926A1 (en) * | 2005-12-16 | 2007-07-19 | Raghuram Rajah | Software customization framework |
US7966602B1 (en) * | 2006-03-16 | 2011-06-21 | Oracle America, Inc. | Incremental modification detector, and methods, systems, and apparatus for implementing the same |
US8572138B2 (en) * | 2006-03-30 | 2013-10-29 | Ca, Inc. | Distributed computing system having autonomic deployment of virtual machine disk images |
US8225294B2 (en) * | 2006-04-27 | 2012-07-17 | Oracle America, Inc. | Method and apparatus for expressing and checking relationships between types |
US7836440B2 (en) | 2006-04-27 | 2010-11-16 | Oracle America, Inc. | Dependency-based grouping to establish class identity |
US20080033968A1 (en) | 2006-08-07 | 2008-02-07 | Quan Dennis A | Methods and apparatus for input specialization |
US20080040360A1 (en) | 2006-08-14 | 2008-02-14 | Microsoft Corporation | Design pattern for choice types in object oriented languages |
US8370818B2 (en) * | 2006-12-02 | 2013-02-05 | Time Warner Cable Inc. | Methods and apparatus for analyzing software interface usage |
US20080154950A1 (en) * | 2006-12-21 | 2008-06-26 | Sap Ag | Object constructors for generic frameworks |
WO2008115553A1 (en) * | 2007-03-20 | 2008-09-25 | The University Of North Carolina At Chapel Hill | Methods, systems, and computer readable media for automatically generating customizable user interfaces using proagramming patterns |
US8079023B2 (en) | 2007-03-22 | 2011-12-13 | Microsoft Corporation | Typed intermediate language support for existing compilers |
US7654413B2 (en) | 2007-04-17 | 2010-02-02 | Kuei-Tang Chang | Supporting device for package water dispenser |
US8806324B2 (en) * | 2007-08-03 | 2014-08-12 | Sap Ag | Annotation data filtering of computer files |
CN101251795A (zh) * | 2007-11-01 | 2008-08-27 | 中国地质大学(武汉) | 泛型空间网络分析模型及其算法 |
US8615734B2 (en) * | 2007-11-09 | 2013-12-24 | Oracle International Corporation | System and method for dynamically redefining class files in an application server environment |
CN101520733B (zh) * | 2008-02-27 | 2014-04-16 | 国际商业机器公司 | 装载类的方法和装置及重组类存档文件方法 |
US9063765B2 (en) * | 2008-04-28 | 2015-06-23 | Kaazing Corporation | System and methods for distributed execution of computer executable programs utilizing asymmetric translation |
US8935293B2 (en) | 2009-03-02 | 2015-01-13 | Oracle International Corporation | Framework for dynamically generating tuple and page classes |
US9075667B2 (en) * | 2009-05-21 | 2015-07-07 | Microsoft Technology Licensing, Llc | Dynamic binding directed by static types |
US8484614B2 (en) * | 2009-05-29 | 2013-07-09 | Red Hat, Inc. | Fast late binding of object methods |
US8843920B2 (en) | 2009-09-15 | 2014-09-23 | Advanced Micro Devices, Inc. | Systems and methods for deferring software implementation decisions until load time |
WO2011042228A1 (en) * | 2009-10-06 | 2011-04-14 | International Business Machines Corporation | Method and system to handle java class versioning |
US8549506B2 (en) * | 2010-04-27 | 2013-10-01 | Microsoft Corporation | Resumable methods |
US8645490B2 (en) * | 2010-06-08 | 2014-02-04 | Microsoft Corporation | Web site implementation by mapping expression evaluation |
US8813049B2 (en) | 2010-06-30 | 2014-08-19 | Oracle International Corporation | Type inference of partially-specified parameterized types |
US8533695B2 (en) * | 2010-09-28 | 2013-09-10 | Microsoft Corporation | Compile-time bounds checking for user-defined types |
US8959501B2 (en) * | 2010-12-14 | 2015-02-17 | Microsoft Corporation | Type and length abstraction for data types |
US9207935B2 (en) * | 2011-04-07 | 2015-12-08 | Infosys Limited | Early analysis of software design diagrams |
US8997070B2 (en) * | 2011-12-15 | 2015-03-31 | Sap Se | Extension mechanism for scripting language compiler |
US9411560B2 (en) * | 2012-01-26 | 2016-08-09 | Oracle International Corporation | Error propagation |
JP2013235386A (ja) | 2012-05-08 | 2013-11-21 | Internatl Business Mach Corp <Ibm> | 最適化装置、最適化方法、及び最適化プログラム |
CN103491111B (zh) * | 2012-06-08 | 2016-12-14 | 阿里巴巴集团控股有限公司 | 无线应用发布、实现方法与装置 |
US8863079B2 (en) | 2012-07-31 | 2014-10-14 | Oracle International Corporation | Efficient and expansive conversions between reference and primitive |
US8776031B1 (en) * | 2012-08-09 | 2014-07-08 | Noble Systems Corporation | Manipulating resources embedded in a dynamic-link library |
US8893082B2 (en) * | 2012-08-31 | 2014-11-18 | Oracle International Corporation | Type inference of generic type parameters in overloaded functions using type intervals and inference directions |
US9170908B2 (en) * | 2012-12-14 | 2015-10-27 | Salesforce.Com, Inc. | System and method for dynamic analysis bytecode injection for application dataflow |
US9817804B2 (en) * | 2013-09-12 | 2017-11-14 | Wix.Com Ltd. | System for comparison and merging of versions in edited websites and interactive applications |
US9606783B2 (en) * | 2013-10-14 | 2017-03-28 | International Business Machines Corporation | Dynamic code selection based on data policies |
US9329985B1 (en) * | 2014-04-04 | 2016-05-03 | Xoom Corporation | Using emulation to disassociate verification from stimulus in functional test |
US9785456B2 (en) | 2014-04-22 | 2017-10-10 | Oracle International Corporation | Metadata-driven dynamic specialization |
-
2015
- 2015-03-17 US US14/660,143 patent/US9785456B2/en active Active
- 2015-03-17 US US14/660,177 patent/US9772828B2/en active Active
- 2015-03-17 US US14/660,604 patent/US9910680B2/en active Active
- 2015-04-21 US US14/692,590 patent/US9678729B2/en active Active
- 2015-04-21 CN CN201580020873.1A patent/CN106233251B/zh active Active
- 2015-04-21 BR BR112016024522-9A patent/BR112016024522B1/pt active IP Right Grant
- 2015-04-21 CN CN201580028725.4A patent/CN106716349B/zh active Active
- 2015-04-21 US US14/692,592 patent/US9524152B2/en active Active
- 2015-04-21 US US14/692,593 patent/US9477450B2/en active Active
- 2015-04-21 EP EP15721428.9A patent/EP3134809B1/en active Active
- 2015-04-21 US US14/692,601 patent/US9483242B2/en active Active
- 2015-04-21 WO PCT/US2015/026962 patent/WO2015164436A1/en active Application Filing
- 2015-04-21 CN CN202010673980.7A patent/CN111813389A/zh active Pending
- 2015-04-21 WO PCT/US2015/026947 patent/WO2015164426A1/en active Application Filing
- 2015-04-21 EP EP15721427.1A patent/EP3134808B1/en active Active
- 2015-04-22 EP EP15721429.7A patent/EP3134810B1/en active Active
- 2015-04-22 EP EP15771741.4A patent/EP3134811B1/en active Active
- 2015-04-22 EP EP15721430.5A patent/EP3134806B1/en active Active
- 2015-04-22 WO PCT/US2015/026965 patent/WO2015191165A1/en active Application Filing
- 2015-04-22 CN CN201580028016.6A patent/CN106415488B/zh active Active
- 2015-04-22 JP JP2016564078A patent/JP6592009B2/ja active Active
- 2015-04-22 WO PCT/US2015/026964 patent/WO2015164438A1/en active Application Filing
- 2015-04-22 WO PCT/US2015/026966 patent/WO2015164439A1/en active Application Filing
- 2015-04-22 CN CN201580028400.6A patent/CN106462412B/zh active Active
- 2015-04-22 CN CN201580029282.0A patent/CN106462414B/zh active Active
-
2016
- 2016-02-26 US US15/055,469 patent/US9891900B2/en active Active
-
2017
- 2017-09-25 US US15/714,836 patent/US10740115B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6067577A (en) * | 1996-09-30 | 2000-05-23 | Apple Computer, Inc. | Dynamic method resolution for native methods in a dynamic object-oriented programming language |
CN102511033A (zh) * | 2009-09-25 | 2012-06-20 | 国际商业机器公司 | 对象级别兼容性和使用语义值的类大小调整 |
Non-Patent Citations (3)
Title |
---|
"Compatible genericity with run-time types for the Java programming language";Robert Cartwrigh etc.;《OOPSLA "98 Proceedings of the 13th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications》;19981022;201-215 * |
"making the future safe for the past:Adding genericity to the JavaTM Programming Language";Gilad Bracha etc.;《OOPSLA "98 Proceedings of the 13th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications》;19981022;183-200 * |
Efficient Implementation of Run-time Generic Types for Java;E Allen;《2002 article.Bibiliometrics Data Bibiliometrics》;20021231;1-27 * |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106233251B (zh) | 元数据驱动的动态具体化 | |
US7512938B2 (en) | Typed intermediate representation for object-oriented languages | |
US20080114804A1 (en) | System and method for interoperating with foreign objects from a single language computing environment | |
US10521204B2 (en) | Existential type packing for structurally-restricted existential types | |
US20180113837A1 (en) | Systems and methods for facilitating interactions with remote memory spaces |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |