CN1271892A - 自动的承接软件/适配器生成器 - Google Patents
自动的承接软件/适配器生成器 Download PDFInfo
- Publication number
- CN1271892A CN1271892A CN00107023A CN00107023A CN1271892A CN 1271892 A CN1271892 A CN 1271892A CN 00107023 A CN00107023 A CN 00107023A CN 00107023 A CN00107023 A CN 00107023A CN 1271892 A CN1271892 A CN 1271892A
- Authority
- CN
- China
- Prior art keywords
- bytecode
- adapter
- compiler
- computer
- run
- 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
Images
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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
用于自动地在被规定的运行期环境中提供一个适配器或承接软件的系统和方法。适配器生成器随输入参数被提供,这些输入参数被处理以及向编译器输入。该编码器被连接到用于保存已生成的适配器的适配器库。该适配器库根据要求在执行字节码或一系列字节码时向运行期系统提供适配器。
Description
本发明一般地涉及计算机系统。更具体地,用于自动地在多平台环境中生成承接软件的方法和装置被公开。
JavaTM程序设计语言是由Sun Microsystems开发的面向对象的高级程序设计语言,并被设计为可移植,足以在从小到个人计算机大到超级计算机的广泛的计算机上执行。用Java(以及其它语言)写的计算机程序可能被编译为虚拟机指令,用于由Java虚拟机执行。通常,Java虚拟机是一个解释器,该解释器解码并执行那些虚拟机指令。
用于Java虚拟机的虚拟机指令是字节码,即它们包括一个或多个字节。这些字节码被保存在被称为“类文件”的特殊文件格式中,该“类文件”包括关于类的方法的字节码。除类的方法的字节码外,该类文件包括一个符号表以及其它辅助信息。
作为Java字节码被包含在一个或多个类文件中的计算机程序是独立于平台的。该计算机程序可以在任何能够运行Java虚拟机的一个实现的计算机上被执行,反修改。该Java虚拟机是一个“类属”计算机的软件仿真器,这是使用于Java虚拟机的计算机程序独立于平台的主要因素。
Java虚拟机通常被实现为一个软件解释器。传统的解释器在执行中解码并执行被解释程序的虚拟机指令,一次一条指令。另一方面,编译器在执行前将源代码解码为本机指令,因此解码不在执行时进行。因为传统的解释器在一条指令每次被遇到时在执行该指令前重复地解码该指令,解释程序的执行一般比编译程序的执行慢得多,因为已编译程序的本机指令可以在本机或本计算机系统执行而不需要解码。因此,当性能是一个重要因素时,最好使用编译器代替解释器来解码源代码。但是,为实现这一点,所谓的适配器将被依赖于平台的解释器使用的执行栈翻译为依赖于平台的编译器要求的形式。不幸地,由于由依赖于平台的编译器生成的代码可能以不同于解释器的方式存储和交换信息,必须为每个运行Java虚拟机的平台构造该平台特有的适配器。这通常需要用户使用,举例来说,汇编语言或C++代码,为每个平台生成适配器。为每个运行Java虚拟机的平台编码适配器很费时间并易于出错。
通常,Java虚拟机将被用一种不同于Java编程语言的编程语言(例如,C++编程语言)编写。因此,Java程序的执行可能涉及用多种编程语言编写的函数的执行。此外,字节码本身可以调用不用Java编程语言编写的本机函数(例如,用于输入/输出的系统特有的函数)。因此通常执行一个Java程序必然要执行用多种编程语言编写的函数。一个RPC(远程过程调用)是一个协议,一个程序使用该协议能够请求来自位于网络中另一计算机上的程序的服务,而不需要知道网络细节。一个过程调用有时也被称为函数调用或子程序调用。使用客户端—服务器模式,发出请求的程序是一个客户,而提供服务的程序是服务器。在常规的或本地的过程调用中,一个RPC是一个同步操作,要求发出请求的程序被挂起直到远程过程的结果被返回。但是,共享相同地址空间的轻量级过程或线程的使用允许多个RPC被同时执行。
当使用RPC的程序语句被编译成一个可执行程序,一个承接软件被包含在编译后的用来表示远程过程代码的代码中。承接软件是一个小程序例程替代一个较长的程序,该较长的程序可能以后再被加载或位于远程。举例来说,一个使用远程过程调用(RPC)的程序被编译,用承接软件替代提供被请求的过程的程序。该承接软件接受请求,然后将它(通过另一个程序)传递给远程过程。当该过程完成其服务,它将结果或其它状态返回给承接软件,承接软件再将它传回发出该请求的程序。
如同适配器,在传统的虚拟机中,每个运行该虚拟机的平台需要一个手工编码的承接软件库。为每个运行虚拟机的平台为每个RPC编码承接软件很费时间并易于出错。
因此,需要用于自动地生成依赖于平台的适配器库的技术。此外,需要提供用于为每个运行虚拟机的平台自动地提供依赖于平台的承接软件库的技术。
通常,本发明的实施例提供创新的系统和方法,用于自动地生成依赖于平台的用于虚拟机的适配器和承接软件的库。
用于在运行期系统中执行字节码以及自动地提供一个适配器或承接软件的装置被公开。该装置包括连接到一个解释器单元的字节码源。该解释器被用于解释字节码。该解释器又被连接到运行期系统,该系统执行经解释的字节码。该字节码源也被连接到一个用于编译字节码的编译器。该编译器又被连接到执行经编译的字节码的运行期系统。该装置还包括与编译器相连的适配器/承接软件生成器单元,根据要求向运行期系统提供适配器或承接软件。
在一个优选实施例中,连接到运行期系统的库被用于保存适配器和承接软件,这些适配器和承接软件然后被运行期系统在需要时检索。
在另一实施例中,一个实现用于在运行期系统中处理字节码的装置的计算机程序产品被公开。该程序产品包括解释接收到的字节码,并将解释后的字节码传递给将被执行的运行期系统的计算机代码。该计算机代码也编译接收到的字节码并将编译后的字节码传递给运行期系统用于执行。
在另一实施例中,一种计算机实现的用于在运行期环境中处理字节码的方法被公开。如果需要一个适配器以处理字节码,需要的适配器是否在适配器库中的判断被作出。如果需要的适配器不在适配器库中,适配器生成器生成适配器并将它保存在库中,然后该库在运行期系统执行该字节码时向运行期系统提供适配器。
本发明的其它特性和优点在考察下面与附图相联系的详细描述后将变得显而易见。
图1图示了一个计算机系统的例子,该计算机系统可能被用于执行本发明的一个实施例的软件。
图2显示了图1的计算机系统的一个系统块图。
图3显示了Java源代码程序如何被执行。
图4显示了Java运行期系统的一个实现的元件。
图5图示了关于被保存在一个执行栈上的函数的框架。
图6以Java虚拟机显示了本发明的一个实施例。
图7以Java虚拟机显示了关于适配器/承接软件使用的流程图。
图8显示了用于生成一个适配器/承接软件的流程图。
定义
函数—一个软件例程(也被称为子例程,过程,成员函数,以及方法)。
框架(或活动框架,活动记录)—一个保存在执行栈上的记录,用于一个函数保存有关该函数执行的信息,这些信息可以包括状态变量,局部变量和一个操作数栈。
执行栈—在程序执行过程中用于为函数以它们顺序调用的次序保存框架的栈。当一个函数(“被调用者”)被调用,关于该函数的一个框架被压入该执行栈。随后,当该函数结束,该框架被弹出栈,在执行栈顶部的框架的函数(“调用者”)恢复执行。
操作数栈—用于在执行过程中保存被机器指令使用的操作数的栈。
外部码—用不同于一种特定的编程语言(例如,Java编程语言)的其它编程语言编写的计算机代码。举例来说,Java虚拟机可以被用C++编程语言编写,Java虚拟机相对于正被解释的Java代码程序可以被认为是外部码(外部码包括本机方法)。
本机方法—用不同于Java编程语言编写的函数。本机方法可以被Java程序调用,导致它们被动态地加载并执行。此外,本机方法可以调用用Java编程语言编写的函数。
在下面的描述中,本发明将根据优选实施例被描述,该实施例为Java虚拟机实现一个执行栈,该虚拟机执行Java程序(例如字节码)。特别地,在描述的例子中,Java虚拟机用C++编程语言写成。但是,本发明不限于任何特别的语言,计算机结构,或特别的实现。因此,下面对实施例的描述用于示例的目的而不是限制。
图1图示了一个计算机系统的例子,该计算机系统可能被用于执行本发明的一个实施例的软件。图1显示了计算机系统1,该系统包含显示器3,屏幕5,机箱7,键盘9,以及鼠标11。鼠标11可以具有一个或多个按键用于与图形用户界面交互。机箱7容纳CD-ROM驱动器13,系统内存和硬盘驱动器(见图2),它们可以被用于保存和检索由实现本发明的计算机代码组成的软件程序,与本发明一起使用的数据,等等。尽管CD-ROM15被显示为典型的计算机可读存储媒体,其它计算机可读媒体,包括软盘,磁带,快闪存储器,系统内存,以及硬盘可以被使用。此外,包含在载波中的数据信号(例如,在网络,包括因特网中)可以是计算机可读存储媒体。
图2显示了图1的用于执行本发明实施例的软件的计算机系统1的一个系统块图。如同在图1中,计算机系统1包括监视器3和键盘9,以及鼠标11。计算机系统1还包含子系统,诸如中央处理器51,系统内存53,固定存储器55(例如硬盘驱动器),活动存储器57(例如CD-ROM驱动器),显示适配器59,声卡61,扬声器63,以及网络借口65。其它适于随本发明使用的计算机系统可以包括额外的或较少的子系统。举例来说,另一个计算机系统可以包括多于一个的处理器51(即一个多处理器系统),或高速缓存。
计算机系统1的系统总线结构由箭头67表示。但是,这些箭头演示了用于连接子系统的任一互连方案。举例来说,本地总线可以被用于连接中央处理器到系统内存和显示适配器。图2所示的计算机系统1只是适于随本发明使用的计算机系统的一个例子。其它具有不同子系统配置的计算机系统也可以被使用。
典型地,用Java编程语言编写的计算机程序被编译为字节码或Java虚拟机指令,然后被Java虚拟机执行。字节码被保存在类文件中,该类文件被输入到Java虚拟机中解释。图3显示了一段简单的Java源代码在Java虚拟机中被解释器执行的过程。
Java源代码101包括用Java写的经典的Hello World程序。该源代码然后被输入到字节码编译器103中,该字节码编译器将源代码编译为字节码。该字节码是虚拟机指令,它们将被软件仿真的计算机执行。典型地,虚拟机指令是类属(即,不为任何特定的微处理器或计算机结构设计),但这不是必须的。该字节码编译器输出Java类文件105,该文件包含Java程序的字节码。
Java类文件被输入到Java虚拟机107中。该Java虚拟机是一个解释器,它解码并执行Java类文件中的字节码。该Java虚拟机是一个解释器,但通常被称为虚拟机,因为它用软件仿真微处理器或计算机结构(例如,微处理器或计算机结构可以不以硬件形式存在)。
图4显示了一个Java运行期系统的实现的元件。Java虚拟机的实现被称为Java运行期系统。Java运行期系统201可以接收Java类文件203,标准内建Java类205,以及本机方法207的输入以执行Java程序。标准内建Java类可以是关于诸如线程,字串等等对象的类。本机方法可以用不同于Java编程语言的编程语言编写。本机方法通常被保存在动态链接库(DLL)或共享库中。
Java运行期系统也可以于操作系统209接口。举例来说,输入/输出函数可以由操作系统处理,包括向该Java运行期系统提供与Java类文件203,标准内建Java类205,以及本机方法207的接口。
动态类加载和验证器211经由操作系统209将Java类文件203,标准内建Java类205加载到内存213。此外,动态类加载和验证器可以验证Java类文件中字节码的正确性并报告任何检测到的错误。
本机方法链接器215经由操作系统209将本机方法207链接进Java运行期系统并将本机方法保存在内存213中。如图所示,内存213可以包含一个用于Java类的类和方法区,以及用于本机方法的本机方法区。内存中的类和方法区可以被保存在一个垃圾收集堆。当新对象被创建,它们被保存在该垃圾收集堆。Java运行期系统,而不是应用程序,在空间不再被使用时收回在垃圾收集堆中的内存。
位于图四中显示的Java运行期系统的核心的是执行引擎217。该执行引擎执行保存在内存213中的指令,并且可以被用软件、硬件或两者的结合实现。执行引擎支持面向对象的应用,并且从概念上可以有多个引擎同时运行,每个Java线程一个。执行引擎217还可以利用支持代码221。该支持代码可以提供与异常、线程、安全性等等相关的功能。
当一个Java程序执行时,函数在每个线程内被顺序调用。对于每个线程有一个执行栈,该栈保存每个尚未完成执行的函数的框架。一个框架保存函数的执行信息,该信息可以包括状态变量,局部变量以及操作数栈。当一个函数被调用,该函数的框架被压入执行栈。当该函数结束,该函数的框架被弹出执行栈。因此,只有与位于执行栈顶部的框架相应的函数是活动的,与位于执行栈顶部以下的框架相应的函数的执行被挂起,直到它们调用的函数返回(即结束)。
图5图示了关于被保存在一个执行栈上的函数的框架。被显示的执行栈301具有位于执行栈顶部的框架303和保存在框架303之下的框架305和307。栈指针SP指向执行栈的顶部,而框架指针FP指向位于执行栈301顶部的框架中的框架指针。
每个被显示的框架包括与该框架相应的函数的状态变量,局部变量以及操作数栈。此外,保存在框架中的最后一项是一个框架指针,该指针指向位于执行栈上当前框架之下的框架中的框架指针,如箭头309和311所示。
当一个函数调用另一个函数,系统首先将当前函数的返回地址压入执行栈301,然后压入最近被调用函数的新框架。以这种方式,当新函数返回,系统能够弹出位于执行栈顶部的框架,然后从执行栈弹出返回地址,并将程序计数器设置为该返回地址,因此调用函数的执行可以恢复。因此,这是框架305和307包括返回地址而活动框架303不包括返回地址的原因。但是,如果与框架303相应的函数调用另一个函数,在新函数的框架被压入执行栈之前,返回地址将被压入执行栈301。
框架指针允许系统精确地跨越执行栈上的框架。举例来说,栈指针SP和框架指针FP勾画了位于执行栈顶部的框架。此外,框架303中的框架指针指明了执行栈上的下一个框架。正好在框架303中的框架指针之下的地址是执行栈上下一个框架的开始,并且框架303的框架指针的内容指明执行栈上下一个框架中的最后一项,即框架305。类似地,框架305中的框架指针指明执行栈上下一个框架的位置。因此,框架指针链允许系统跨越在执行栈上的框架(例如,当框架被弹出执行栈)。
尽管图5显示了执行栈的一种实现,本发明不限于所示的实现。举例来说,该执行栈被显示为在内存中向上生长,但是,应当明确该栈也可以在内存中向下生长。此外,保存在每个框架中的信息可以根据实现而改变。
最近,Java编程语言,一种面向对象的语言,已经引入了编译输出(称为字节码)的可能,该编译输出可以在提供Java虚拟机(或字节码解释器)的任何计算机系统平台上运行。该Java虚拟机被设计来将字节码转换为能够由实际硬件处理器执行的指令。使用此虚拟机,而不是每次解释一条指令,字节码可以在每个特定系统平台有时通过即时(JIT)编译器重新编译。
图6图示了一个装置,包含根据本发明的一个实施例的一个Java虚拟机(JVM)600。在Java编程语言和环境中,一个即时(JIT)编译器是一个程序,将Java字节码转变为能够被直接发送给处理器的指令。在Java被编写完成后,Java源语言语句被Java编译器编译为Java字节码而不是包含与特定硬件平台的处理器(例如,IntelPentium微处理器或IBM System/390处理器)相匹配的指令的代码。该Java字节码是独立于平台的代码,能够被发送给任何平台并在该平台上运行。
更具体地,当字节码被提供给编译器602提供的JIT编译器,对包含在字节码604中方法的编译被延迟直到该方法即将被执行。当字节码604被提供给解释器606,字节码604被每次一个字节码地读入解释器606。然后解释器606将与被该字节码定义的操作相应的参数装入执行栈500。一旦被装入,解释器606执行被字节码604定义的操作。即,解释器606“解释”字节码604,如同本领域的技术人员应当理解的。通常,解释器606连续地处理字节码604并执行与字节码604相联系的操作。
当一个方法被另一个方法激活,或者,如果该方法被解释,运行期系统608得到以字节码604的序列的形式出现的该方法,其中字节码604可以被解释器606直接执行。如果,在另一方面,被激活的方法是尚未被编译的编译方法,运行期系统608也得到以字节码604的序列的形式出现的该方法,然后可以激活由编译器602提供的平台特定的编译器,编译得到的机器语言指令可以被目标平台操作系统610直接执行。通常,当虚拟机600终止时该机器语言指令被丢弃。
但是,为在编译器602中编译字节码或字节码序列,需要有限数量的编译时间。在执行前,编译器将源代码解码为本机指令,从而解码不在执行过程中进行。因为传统的解释器在一条指令每次被遇到时在执行该指令前重复地解码该指令,解释程序的执行一般比编译程序的执行慢得多,因为已编译程序的本机指令可以在本机或本计算机系统执行而不需要解码。因此,当性能是一个重要因素时,最好使用编译器代替解释器来解码源代码。因此当字节码或字节码序列被虚拟机600接收时,字节码或字节码序列是否将被解释器解释或被编译器编译的判断被作出。举例来说,在接收的字节码或字节码序列将通过执行编译后的代码被处理,而前一个字节码或字节码序列已经被解释器处理的情况下,一个平台特定的适配器必须被提供。该平台特定的解释器到已编译代码(I/C)的适配器被用于将被解释器使用的执行栈500翻译为能够被已编译代码使用的栈。此外,该适配器可以更新系统中其它部分的状态。
可替换地,当前面的字节码或字节码序列已经通过执行已编译的代码被处理,该代码可能由编译器602生成,并且确定解释当前字节码或字节码序列执行效率更高,然后一个已编译代码到解释器(C/I)的适配器必须被提供以适当地将执行栈500翻译为可以被解释器使用的栈。此外,该适配器可以更新系统中其它部分的状态。
当I/C适配器或C/I适配器被创建,它被保存在连接到编译器602和运行期系统的库614中。以这种方式,无论何时确定需要一个特定的适配器,库614被查询,如果该特定适配器不存在,那么它被创建。为创建一个特定平台的适配器,需要依赖于不同平台的输入。在一个实施例中,这些输入包括,举例来说,调用者的已知类型,被调用者的已知类型,被调用者的已知参数数目及其类型,调用约定,等。
图7是一个流程图,详细描述了用于根据本发明的实施例处理字节码或字节码序列的过程700。该过程700在702当字节码或字节码序列被接收时开始。在704,该字节码或字节码序列是否将被解释或通过执行已编译代码被处理的判断被作出。如果字节码或字节码序列将通过执行已编译代码被处理,然后在708判断是否需要一个I/C适配器。如果不需要适配器,在710,该字节码或字节码序列通过执行已编译代码被处理,其结果在711被返回。但是,如果需要适配器,在712判断所需的适配器是否被保存在库中。如果所需的适配器没有被保存在库中,所需的适配器在714被生成,否则,所需的适配器在716被从库中得到。两种情况下,适配器在718被编译,其后适配器在720被保存在库中,在722为执行已编译代码作准备,一旦完成准备,字节码或字节码序列在710通过执行已编译字节码被处理。
在711,已编译字节码(或字节码序列)的执行结果被返回后,在724判断是否有更多的字节码。如果有更多的字节码,控制被传递给704,字节码被接收,否则,过程700停止。
返回704,如果确定字节码或字节码序列将被解释,然后在726判断是否需要C/I适配器。如果不需要适配器,字节码或字节码序列在728被解释,其结果在730被返回。但是,如果需要适配器,在732判断所需的适配器是否被保存在库中。如果所需的适配器没有被保存在库中,所需的适配器在734被生成,否则,所需的适配器在736被从库中得到。两种情况下,适配器在738被编译,其后适配器在740被保存在库中,在742为执行已编译代码作准备,然后字节码或字节码序列在728被解释,其结果在730被返回。
在730,已解释字节码(或字节码序列)的执行结果被返回后,在724判断是否有更多的字节码。如果有更多的字节码,控制被传递给704,字节码被接收,否则,过程700停止。
图8是详细描述根据本发明的实施例用于生成一个适配器/承接软件的过程800的流程图。过程800在802通过识别用于调用已编译代码的参数以及恰当的机器状态开始。接着,在804,输入参数和机器状态被映射到已编译代码调用的输入。在806,机器状态和返回值被映射到解释器到已编译代码的适配器的返回点。在808,适配器/承接软件的表示被提供给编译器用于编译并生成目标代码。
尽管上面是对本发明的优选实施例的一个完整描述,存在备选的,修正的以及等价的方案可以被使用。显然,通过对上面描述的实施例作适当的修改,本发明是适用的。举例来说,上面描述的实施例已经引用了一个包括Java框架的执行栈,但是本发明的原则可以被容易地应用于其它系统和语言。因此,上面的描述不应当被看作是对本发明的范围的限制。本发明的范围被所附的权利要求的组合和约束以及它们等价的完整范围定义。
Claims (7)
1.用于在运行期系统执行字节码的装置,包括:
字节码源;
与字节码源相连用于解释字节码的解释器;
与字节码源相连用于编译字节码的编译器;
与该解释器和编译器相连的运行期系统,其中运行期系统被设定用于当字节码被解释器解释时执行已解释的字节码,以及,当字节码被编译器编译时执行已编译的字节码;
与编译器相连的适配器/承接软件生成器单元,被设定用于根据要求向编译器提供适配器源代码或承接软件源代码;
与编译器和运行期系统相连的库,被设定用于保存被编译器编译的适配器和承接软件,其中运行期系统在需要时检索适配器。
2.如权利要求1中描述的装置,其中字节码是一系列字节码之一。
3.如权利要求1中描述的装置,其中适配器生成器随适配器输入参数被提供,用于生成需要的适配器。
4.计算机程序产品,该产品实现用于处理字节码的装置,包括:
解释接收到的字节码的计算机代码;
编译接收到的字节码的计算机代码;
当被编译器请求时生成适配器的计算机代码;
保存适配器以及在执行已编译或已解释的字节码时向运行期系统提供适配器的计算机代码;以及
保存计算机代码的计算机可读的媒体。
5.在一个计算机系统中,用于在运行期环境中处理字节码的方法,该方法包括:
判断为处理字节码是否需要一个适配器;
如果需要适配器,确定该适配器是否位于一个适配器库中;
如果需要的适配器不在库中,生成该适配器;
在库中保存生成的适配器;
向运行期环境提供该适配器;以及
执行该字节码。
6.计算机程序产品,该产品在运行期环境中处理字节码,包括:
提供字节码的计算机代码;
判断为执行字节码是否需要一个适配器,当需要的适配器不在适配器库中时生成需要的适配器,以及根据要求向运行期系统提供所需的适配器的计算机代码;以及
保存计算机代码的计算机可读的媒体。
7.权利要求6中的计算机程序产品,其中计算机可读的媒体选自CD-ROM,软盘,磁带,快闪存储器,系统内存,硬盘,以及包含在载波中的数字信号。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/298,637 US6381737B1 (en) | 1999-04-23 | 1999-04-23 | Automatic adapter/stub generator |
US09/298637 | 1999-04-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1271892A true CN1271892A (zh) | 2000-11-01 |
CN1171147C CN1171147C (zh) | 2004-10-13 |
Family
ID=23151373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB001070231A Expired - Lifetime CN1171147C (zh) | 1999-04-23 | 2000-04-24 | 自动的承接软件/适配器生成器 |
Country Status (6)
Country | Link |
---|---|
US (2) | US6381737B1 (zh) |
EP (1) | EP1046984A3 (zh) |
JP (1) | JP2000347871A (zh) |
CN (1) | CN1171147C (zh) |
AU (1) | AU774467B2 (zh) |
CA (1) | CA2306545A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1802632B (zh) * | 2003-04-22 | 2010-04-14 | 国际商业机器公司 | 用于在程序代码转换期间执行解释器优化的方法和装置 |
CN102346685A (zh) * | 2010-07-29 | 2012-02-08 | 甲骨文国际公司 | 集成适配器管理系统和方法 |
CN101458633B (zh) * | 2007-12-13 | 2012-02-15 | 华为软件技术有限公司 | 通过脚本程序访问宿主程序的方法及其系统和装置 |
CN111095198A (zh) * | 2019-06-28 | 2020-05-01 | 阿里巴巴集团控股有限公司 | 用于数据处理的系统和方法 |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE10104043A1 (de) * | 2000-02-23 | 2001-08-30 | Ibm | Die Schaffung der Möglichkeit, dass vorhandene Anwendungen andere Sprachen als ihre eingebauten Makrosprachen benutzen, ohne die vorhandene Anwendung zu ändern |
US6748396B2 (en) * | 2001-06-01 | 2004-06-08 | International Business Machines Corporation | Independent class loader for dynamic class loading |
US7315980B2 (en) * | 2002-03-21 | 2008-01-01 | International Business Machines Corporation | Method and apparatus for generating electronic document definitions |
US6772292B2 (en) * | 2002-06-04 | 2004-08-03 | Isaak Garber | Two area stack |
GB0213218D0 (en) * | 2002-06-08 | 2002-07-17 | Koninkl Philips Electronics Nv | Operation of java virtual machine |
US20040172614A1 (en) * | 2003-02-28 | 2004-09-02 | Bea Systems, Inc. | Dynamic code generation method |
US7472400B2 (en) * | 2003-02-28 | 2008-12-30 | Bea Systems, Inc. | Method for dynamically generating a wrapper class |
US7536675B2 (en) * | 2003-02-28 | 2009-05-19 | Bea Systems, Inc. | Dynamic code generation system |
US7472401B2 (en) * | 2003-02-28 | 2008-12-30 | Bea Systems, Inc. | Computer product for a dynamically generated wrapper class |
US7917898B2 (en) * | 2004-02-02 | 2011-03-29 | Intel Corporation | Methods and apparatus to provide a modular native method invocation system |
US8881099B2 (en) * | 2004-09-10 | 2014-11-04 | Oracle International Corporation | Dynamic generation of wrapper classes to implement call-by-value semantics |
FI20041517A0 (fi) * | 2004-11-25 | 2004-11-25 | Nokia Corp | Menetelmä elektroniikkalaitteiden ohjelmien turvalliseen tulkintaan |
US20060129972A1 (en) * | 2004-11-30 | 2006-06-15 | Tyburski John C | Application developer and method for generating platform independent code |
US7590988B2 (en) * | 2005-03-08 | 2009-09-15 | Microsoft Corporation | Dynamic service generation for legacy components |
US7844958B2 (en) * | 2005-03-11 | 2010-11-30 | Aptana, Inc. | System and method for creating target byte code |
US7707547B2 (en) * | 2005-03-11 | 2010-04-27 | Aptana, Inc. | System and method for creating target byte code |
US20070011669A1 (en) * | 2005-07-06 | 2007-01-11 | International Business Machines Corporation | Software migration |
US8694797B2 (en) * | 2006-02-14 | 2014-04-08 | Lenovo (Sinapore) Pte Ltd | Method for preventing malicious software from execution within a computer system |
US8086873B2 (en) * | 2006-06-05 | 2011-12-27 | Lenovo (Singapore) Pte. Ltd. | Method for controlling file access on computer systems |
US8762976B2 (en) * | 2007-03-09 | 2014-06-24 | Microsoft Corporation | Static extensibility models with dynamic languages and scripts |
US8914774B1 (en) | 2007-11-15 | 2014-12-16 | Appcelerator, Inc. | System and method for tagging code to determine where the code runs |
US8954989B1 (en) | 2007-11-19 | 2015-02-10 | Appcelerator, Inc. | Flexible, event-driven JavaScript server architecture |
US8260845B1 (en) | 2007-11-21 | 2012-09-04 | Appcelerator, Inc. | System and method for auto-generating JavaScript proxies and meta-proxies |
US8566807B1 (en) | 2007-11-23 | 2013-10-22 | Appcelerator, Inc. | System and method for accessibility of document object model and JavaScript by other platforms |
US8719451B1 (en) | 2007-11-23 | 2014-05-06 | Appcelerator, Inc. | System and method for on-the-fly, post-processing document object model manipulation |
US8806431B1 (en) | 2007-12-03 | 2014-08-12 | Appecelerator, Inc. | Aspect oriented programming |
US8756579B1 (en) | 2007-12-03 | 2014-06-17 | Appcelerator, Inc. | Client-side and server-side unified validation |
US8819539B1 (en) | 2007-12-03 | 2014-08-26 | Appcelerator, Inc. | On-the-fly rewriting of uniform resource locators in a web-page |
US8527860B1 (en) | 2007-12-04 | 2013-09-03 | Appcelerator, Inc. | System and method for exposing the dynamic web server-side |
US8938491B1 (en) | 2007-12-04 | 2015-01-20 | Appcelerator, Inc. | System and method for secure binding of client calls and server functions |
US8639743B1 (en) | 2007-12-05 | 2014-01-28 | Appcelerator, Inc. | System and method for on-the-fly rewriting of JavaScript |
US8335982B1 (en) | 2007-12-05 | 2012-12-18 | Appcelerator, Inc. | System and method for binding a document object model through JavaScript callbacks |
US8285813B1 (en) | 2007-12-05 | 2012-10-09 | Appcelerator, Inc. | System and method for emulating different user agents on a server |
US8291079B1 (en) | 2008-06-04 | 2012-10-16 | Appcelerator, Inc. | System and method for developing, deploying, managing and monitoring a web application in a single environment |
US8880678B1 (en) | 2008-06-05 | 2014-11-04 | Appcelerator, Inc. | System and method for managing and monitoring a web application using multiple cloud providers |
US7596620B1 (en) | 2008-11-04 | 2009-09-29 | Aptana, Inc. | System and method for developing, deploying, managing and monitoring a web application in a single environment |
US9043765B2 (en) * | 2011-11-09 | 2015-05-26 | Microsoft Technology Licensing, Llc | Simultaneously targeting multiple homogeneous and heterogeneous runtime environments |
US8949809B2 (en) | 2012-03-01 | 2015-02-03 | International Business Machines Corporation | Automatic pipeline parallelization of sequential code |
JP5868246B2 (ja) * | 2012-04-05 | 2016-02-24 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | ソフトウェア開発支援方法、プログラム及び装置 |
US8910137B2 (en) * | 2012-04-13 | 2014-12-09 | International Business Machines Corporation | Code profiling of executable library for pipeline parallelization |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2242293A (en) * | 1990-01-05 | 1991-09-25 | Apple Computer | Apparatus and method for dynamic linking of computer software components |
US5432795A (en) * | 1991-03-07 | 1995-07-11 | Digital Equipment Corporation | System for reporting errors of a translated program and using a boundry instruction bitmap to determine the corresponding instruction address in a source program |
US5553286A (en) * | 1994-03-17 | 1996-09-03 | International Business Machines Corporation | System and method for preparing a computer program for execution |
US6321275B1 (en) * | 1995-04-24 | 2001-11-20 | Microsoft Corporation | Interpreted remote procedure calls |
US5675804A (en) * | 1995-08-31 | 1997-10-07 | International Business Machines Corporation | System and method for enabling a compiled computer program to invoke an interpretive computer program |
US5848274A (en) * | 1996-02-29 | 1998-12-08 | Supercede, Inc. | Incremental byte code compilation system |
US6938263B2 (en) * | 1996-04-23 | 2005-08-30 | Sun Microsystems, Inc. | System and method for facilitating dynamic loading of “stub” information to enable a program operating in one address space to invoke processing of a remote method or procedure in another address space |
US6151703A (en) * | 1996-05-20 | 2000-11-21 | Inprise Corporation | Development system with methods for just-in-time compilation of programs |
US5822591A (en) * | 1996-08-29 | 1998-10-13 | Hewlett-Packard Company | Virtual code system |
US5999988A (en) * | 1997-03-31 | 1999-12-07 | Sun Microsystems, Inc. | Method and apparatus for generating and employing a run-time generated stub to reference an object in object oriented systems |
US6081665A (en) * | 1997-12-19 | 2000-06-27 | Newmonics Inc. | Method for efficient soft real-time execution of portable byte code computer programs |
US6167565A (en) * | 1998-01-08 | 2000-12-26 | Microsoft Corporation | Method and system of custom marshaling of inter-language parameters |
US6074432A (en) * | 1998-03-19 | 2000-06-13 | Xilinx, Inc. | Method for generating a software class compatible with two or more interpreters |
US6141723A (en) * | 1998-04-07 | 2000-10-31 | Microware | Virtual machine system for accessing external subprogram functions |
US6164841A (en) * | 1998-05-04 | 2000-12-26 | Hewlett-Packard Company | Method, apparatus, and product for dynamic software code translation system |
US6247172B1 (en) * | 1998-07-02 | 2001-06-12 | Hewlett-Packard Company | Method for a translation system that aggressively optimizes and preserves full synchronous exception state |
US6202208B1 (en) * | 1998-09-29 | 2001-03-13 | Nortel Networks Limited | Patching environment for modifying a Java virtual machine and method |
US6851109B1 (en) * | 1999-05-06 | 2005-02-01 | International Business Machines Corporation | Process and system for dynamically compiling a partially interpreted method |
-
1999
- 1999-04-23 US US09/298,637 patent/US6381737B1/en not_active Expired - Lifetime
-
2000
- 2000-04-20 AU AU28922/00A patent/AU774467B2/en not_active Expired
- 2000-04-20 CA CA002306545A patent/CA2306545A1/en not_active Abandoned
- 2000-04-24 JP JP2000122755A patent/JP2000347871A/ja active Pending
- 2000-04-24 CN CNB001070231A patent/CN1171147C/zh not_active Expired - Lifetime
- 2000-04-25 EP EP00303412A patent/EP1046984A3/en not_active Withdrawn
-
2002
- 2002-02-20 US US10/080,793 patent/US20020083416A1/en not_active Abandoned
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1802632B (zh) * | 2003-04-22 | 2010-04-14 | 国际商业机器公司 | 用于在程序代码转换期间执行解释器优化的方法和装置 |
CN101458633B (zh) * | 2007-12-13 | 2012-02-15 | 华为软件技术有限公司 | 通过脚本程序访问宿主程序的方法及其系统和装置 |
CN102346685A (zh) * | 2010-07-29 | 2012-02-08 | 甲骨文国际公司 | 集成适配器管理系统和方法 |
CN102346685B (zh) * | 2010-07-29 | 2016-09-28 | 甲骨文国际公司 | 集成适配器管理系统和方法 |
CN111095198A (zh) * | 2019-06-28 | 2020-05-01 | 阿里巴巴集团控股有限公司 | 用于数据处理的系统和方法 |
CN111095198B (zh) * | 2019-06-28 | 2023-06-30 | 创新先进技术有限公司 | 用于数据处理的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
AU774467B2 (en) | 2004-07-01 |
JP2000347871A (ja) | 2000-12-15 |
CN1171147C (zh) | 2004-10-13 |
AU2892200A (en) | 2000-10-26 |
EP1046984A3 (en) | 2003-07-23 |
US20020083416A1 (en) | 2002-06-27 |
CA2306545A1 (en) | 2000-10-23 |
US6381737B1 (en) | 2002-04-30 |
EP1046984A2 (en) | 2000-10-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1171147C (zh) | 自动的承接软件/适配器生成器 | |
CN1134731C (zh) | 在计算机系统中编译指令的方法 | |
US6272674B1 (en) | Method and apparatus for loading a Java application program | |
US6609248B1 (en) | Cross module representation of heterogeneous programs | |
CN1181428C (zh) | 软件翻译的内省编辑器系统、程序和方法 | |
CN1149470C (zh) | 一种分析面向对象的程序的执行的方法和设备 | |
US6601235B1 (en) | Method and apparatus for dynamically deoptimizing compiled activations | |
CN1119756C (zh) | 用于进行静态初始化的方法和系统 | |
EP1145120B1 (en) | Generating compiled programs for interpretive runtime environments | |
US20040158577A1 (en) | System and method for cross platform and configuration build system | |
EP1909174B1 (en) | Method for generating interpretable code for storage in a device having limited storage | |
CN1234548A (zh) | 混合执行堆栈及异常处理 | |
US5469574A (en) | Method and system for interfacing interpreted applications with compiled procedures using signature files | |
CN1821964A (zh) | 将本机函数内嵌到编译的Java代码中的方法和系统 | |
CN1271891A (zh) | 用于在多平台环境的指令选择的装置和方法 | |
JP2002508560A (ja) | マルチプル・クラスファイルのランタイムイメージへの結合 | |
US20040003377A1 (en) | Converting byte code instructions to a new instruction set | |
US20090319554A1 (en) | Unified metadata for external components | |
US7313789B1 (en) | Methods and systems for reducing a program size | |
CN1427968A (zh) | 用于在无虚拟存储管理器的数据处理设备中预加载类的系统和方法 | |
US5889995A (en) | Using constant selectors for method identification | |
US8805801B2 (en) | Method for compressing a .net file | |
US6901591B1 (en) | Frameworks for invoking methods in virtual machines | |
EP1445694A2 (en) | Modularization for J2ME platform implementation | |
CN100337198C (zh) | 一种移动通信设备应用程序处理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20041013 |