專利名稱:自動的承接軟件/適配器生成器的制作方法
技術領域:
本發(fā)明一般地涉及計算機系統。更具體地,用于自動地在多平臺環(huán)境中生成承接軟件的方法和裝置被公開。
JavaTM程序設計語言是由Sun Microsystems開發(fā)的面向對象的高級程序設計語言,并被設計為可移植,足以在從小到個人計算機大到超級計算機的廣泛的計算機上執(zhí)行。用Java(以及其它語言)寫的計算機程序可能被編譯為虛擬機指令,用于由Java虛擬機執(zhí)行。通常,Java虛擬機是一個解釋器,該解釋器解碼并執(zhí)行那些虛擬機指令。
用于Java虛擬機的虛擬機指令是字節(jié)碼,即它們包括一個或多個字節(jié)。這些字節(jié)碼被保存在被稱為“類文件”的特殊文件格式中,該“類文件”包括關于類的方法的字節(jié)碼。除類的方法的字節(jié)碼外,該類文件包括一個符號表以及其它輔助信息。
作為Java字節(jié)碼被包含在一個或多個類文件中的計算機程序是獨立于平臺的。該計算機程序可以在任何能夠運行Java虛擬機的一個實現的計算機上被執(zhí)行,反修改。該Java虛擬機是一個“類屬”計算機的軟件仿真器,這是使用于Java虛擬機的計算機程序獨立于平臺的主要因素。
Java虛擬機通常被實現為一個軟件解釋器。傳統的解釋器在執(zhí)行中解碼并執(zhí)行被解釋程序的虛擬機指令,一次一條指令。另一方面,編譯器在執(zhí)行前將源代碼解碼為本機指令,因此解碼不在執(zhí)行時進行。因為傳統的解釋器在一條指令每次被遇到時在執(zhí)行該指令前重復地解碼該指令,解釋程序的執(zhí)行一般比編譯程序的執(zhí)行慢得多,因為已編譯程序的本機指令可以在本機或本計算機系統執(zhí)行而不需要解碼。因此,當性能是一個重要因素時,最好使用編譯器代替解釋器來解碼源代碼。但是,為實現這一點,所謂的適配器將被依賴于平臺的解釋器使用的執(zhí)行棧翻譯為依賴于平臺的編譯器要求的形式。不幸地,由于由依賴于平臺的編譯器生成的代碼可能以不同于解釋器的方式存儲和交換信息,必須為每個運行Java虛擬機的平臺構造該平臺特有的適配器。這通常需要用戶使用,舉例來說,匯編語言或C++代碼,為每個平臺生成適配器。為每個運行Java虛擬機的平臺編碼適配器很費時間并易于出錯。
通常,Java虛擬機將被用一種不同于Java編程語言的編程語言(例如,C++編程語言)編寫。因此,Java程序的執(zhí)行可能涉及用多種編程語言編寫的函數的執(zhí)行。此外,字節(jié)碼本身可以調用不用Java編程語言編寫的本機函數(例如,用于輸入/輸出的系統特有的函數)。因此通常執(zhí)行一個Java程序必然要執(zhí)行用多種編程語言編寫的函數。一個RPC(遠程過程調用)是一個協議,一個程序使用該協議能夠請求來自位于網絡中另一計算機上的程序的服務,而不需要知道網絡細節(jié)。一個過程調用有時也被稱為函數調用或子程序調用。使用客戶端—服務器模式,發(fā)出請求的程序是一個客戶,而提供服務的程序是服務器。在常規(guī)的或本地的過程調用中,一個RPC是一個同步操作,要求發(fā)出請求的程序被掛起直到遠程過程的結果被返回。但是,共享相同地址空間的輕量級過程或線程的使用允許多個RPC被同時執(zhí)行。
當使用RPC的程序語句被編譯成一個可執(zhí)行程序,一個承接軟件被包含在編譯后的用來表示遠程過程代碼的代碼中。承接軟件是一個小程序例程替代一個較長的程序,該較長的程序可能以后再被加載或位于遠程。舉例來說,一個使用遠程過程調用(RPC)的程序被編譯,用承接軟件替代提供被請求的過程的程序。該承接軟件接受請求,然后將它(通過另一個程序)傳遞給遠程過程。當該過程完成其服務,它將結果或其它狀態(tài)返回給承接軟件,承接軟件再將它傳回發(fā)出該請求的程序。
如同適配器,在傳統的虛擬機中,每個運行該虛擬機的平臺需要一個手工編碼的承接軟件庫。為每個運行虛擬機的平臺為每個RPC編碼承接軟件很費時間并易于出錯。
因此,需要用于自動地生成依賴于平臺的適配器庫的技術。此外,需要提供用于為每個運行虛擬機的平臺自動地提供依賴于平臺的承接軟件庫的技術。
通常,本發(fā)明的實施例提供創(chuàng)新的系統和方法,用于自動地生成依賴于平臺的用于虛擬機的適配器和承接軟件的庫。
用于在運行期系統中執(zhí)行字節(jié)碼以及自動地提供一個適配器或承接軟件的裝置被公開。該裝置包括連接到一個解釋器單元的字節(jié)碼源。該解釋器被用于解釋字節(jié)碼。該解釋器又被連接到運行期系統,該系統執(zhí)行經解釋的字節(jié)碼。該字節(jié)碼源也被連接到一個用于編譯字節(jié)碼的編譯器。該編譯器又被連接到執(zhí)行經編譯的字節(jié)碼的運行期系統。該裝置還包括與編譯器相連的適配器/承接軟件生成器單元,根據要求向運行期系統提供適配器或承接軟件。
在一個優(yōu)選實施例中,連接到運行期系統的庫被用于保存適配器和承接軟件,這些適配器和承接軟件然后被運行期系統在需要時檢索。
在另一實施例中,一個實現用于在運行期系統中處理字節(jié)碼的裝置的計算機程序產品被公開。該程序產品包括解釋接收到的字節(jié)碼,并將解釋后的字節(jié)碼傳遞給將被執(zhí)行的運行期系統的計算機代碼。該計算機代碼也編譯接收到的字節(jié)碼并將編譯后的字節(jié)碼傳遞給運行期系統用于執(zhí)行。
在另一實施例中,一種計算機實現的用于在運行期環(huán)境中處理字節(jié)碼的方法被公開。如果需要一個適配器以處理字節(jié)碼,需要的適配器是否在適配器庫中的判斷被作出。如果需要的適配器不在適配器庫中,適配器生成器生成適配器并將它保存在庫中,然后該庫在運行期系統執(zhí)行該字節(jié)碼時向運行期系統提供適配器。
本發(fā)明的其它特性和優(yōu)點在考察下面與附圖相聯系的詳細描述后將變得顯而易見。
圖1圖示了一個計算機系統的例子,該計算機系統可能被用于執(zhí)行本發(fā)明的一個實施例的軟件。
圖2顯示了圖1的計算機系統的一個系統塊圖。
圖3顯示了Java源代碼程序如何被執(zhí)行。
圖4顯示了Java運行期系統的一個實現的元件。
圖5圖示了關于被保存在一個執(zhí)行棧上的函數的框架。
圖6以Java虛擬機顯示了本發(fā)明的一個實施例。
圖7以Java虛擬機顯示了關于適配器/承接軟件使用的流程圖。
圖8顯示了用于生成一個適配器/承接軟件的流程圖。
定義函數—一個軟件例程(也被稱為子例程,過程,成員函數,以及方法)。
框架(或活動框架,活動記錄)—一個保存在執(zhí)行棧上的記錄,用于一個函數保存有關該函數執(zhí)行的信息,這些信息可以包括狀態(tài)變量,局部變量和一個操作數棧。
執(zhí)行?!诔绦驁?zhí)行過程中用于為函數以它們順序調用的次序保存框架的棧。當一個函數(“被調用者”)被調用,關于該函數的一個框架被壓入該執(zhí)行棧。隨后,當該函數結束,該框架被彈出棧,在執(zhí)行棧頂部的框架的函數(“調用者”)恢復執(zhí)行。
操作數棧—用于在執(zhí)行過程中保存被機器指令使用的操作數的棧。
外部碼—用不同于一種特定的編程語言(例如,Java編程語言)的其它編程語言編寫的計算機代碼。舉例來說,Java虛擬機可以被用C++編程語言編寫,Java虛擬機相對于正被解釋的Java代碼程序可以被認為是外部碼(外部碼包括本機方法)。
本機方法—用不同于Java編程語言編寫的函數。本機方法可以被Java程序調用,導致它們被動態(tài)地加載并執(zhí)行。此外,本機方法可以調用用Java編程語言編寫的函數。
在下面的描述中,本發(fā)明將根據優(yōu)選實施例被描述,該實施例為Java虛擬機實現一個執(zhí)行棧,該虛擬機執(zhí)行Java程序(例如字節(jié)碼)。特別地,在描述的例子中,Java虛擬機用C++編程語言寫成。但是,本發(fā)明不限于任何特別的語言,計算機結構,或特別的實現。因此,下面對實施例的描述用于示例的目的而不是限制。
圖1圖示了一個計算機系統的例子,該計算機系統可能被用于執(zhí)行本發(fā)明的一個實施例的軟件。圖1顯示了計算機系統1,該系統包含顯示器3,屏幕5,機箱7,鍵盤9,以及鼠標11。鼠標11可以具有一個或多個按鍵用于與圖形用戶界面交互。機箱7容納CD-ROM驅動器13,系統內存和硬盤驅動器(見圖2),它們可以被用于保存和檢索由實現本發(fā)明的計算機代碼組成的軟件程序,與本發(fā)明一起使用的數據,等等。盡管CD-ROM15被顯示為典型的計算機可讀存儲媒體,其它計算機可讀媒體,包括軟盤,磁帶,快閃存儲器,系統內存,以及硬盤可以被使用。此外,包含在載波中的數據信號(例如,在網絡,包括因特網中)可以是計算機可讀存儲媒體。
圖2顯示了圖1的用于執(zhí)行本發(fā)明實施例的軟件的計算機系統1的一個系統塊圖。如同在圖1中,計算機系統1包括監(jiān)視器3和鍵盤9,以及鼠標11。計算機系統1還包含子系統,諸如中央處理器51,系統內存53,固定存儲器55(例如硬盤驅動器),活動存儲器57(例如CD-ROM驅動器),顯示適配器59,聲卡61,揚聲器63,以及網絡借口65。其它適于隨本發(fā)明使用的計算機系統可以包括額外的或較少的子系統。舉例來說,另一個計算機系統可以包括多于一個的處理器51(即一個多處理器系統),或高速緩存。
計算機系統1的系統總線結構由箭頭67表示。但是,這些箭頭演示了用于連接子系統的任一互連方案。舉例來說,本地總線可以被用于連接中央處理器到系統內存和顯示適配器。圖2所示的計算機系統1只是適于隨本發(fā)明使用的計算機系統的一個例子。其它具有不同子系統配置的計算機系統也可以被使用。
典型地,用Java編程語言編寫的計算機程序被編譯為字節(jié)碼或Java虛擬機指令,然后被Java虛擬機執(zhí)行。字節(jié)碼被保存在類文件中,該類文件被輸入到Java虛擬機中解釋。圖3顯示了一段簡單的Java源代碼在Java虛擬機中被解釋器執(zhí)行的過程。
Java源代碼101包括用Java寫的經典的Hello World程序。該源代碼然后被輸入到字節(jié)碼編譯器103中,該字節(jié)碼編譯器將源代碼編譯為字節(jié)碼。該字節(jié)碼是虛擬機指令,它們將被軟件仿真的計算機執(zhí)行。典型地,虛擬機指令是類屬(即,不為任何特定的微處理器或計算機結構設計),但這不是必須的。該字節(jié)碼編譯器輸出Java類文件105,該文件包含Java程序的字節(jié)碼。
Java類文件被輸入到Java虛擬機107中。該Java虛擬機是一個解釋器,它解碼并執(zhí)行Java類文件中的字節(jié)碼。該Java虛擬機是一個解釋器,但通常被稱為虛擬機,因為它用軟件仿真微處理器或計算機結構(例如,微處理器或計算機結構可以不以硬件形式存在)。
圖4顯示了一個Java運行期系統的實現的元件。Java虛擬機的實現被稱為Java運行期系統。Java運行期系統201可以接收Java類文件203,標準內建Java類205,以及本機方法207的輸入以執(zhí)行Java程序。標準內建Java類可以是關于諸如線程,字串等等對象的類。本機方法可以用不同于Java編程語言的編程語言編寫。本機方法通常被保存在動態(tài)鏈接庫(DLL)或共享庫中。
Java運行期系統也可以于操作系統209接口。舉例來說,輸入/輸出函數可以由操作系統處理,包括向該Java運行期系統提供與Java類文件203,標準內建Java類205,以及本機方法207的接口。
動態(tài)類加載和驗證器211經由操作系統209將Java類文件203,標準內建Java類205加載到內存213。此外,動態(tài)類加載和驗證器可以驗證Java類文件中字節(jié)碼的正確性并報告任何檢測到的錯誤。
本機方法鏈接器215經由操作系統209將本機方法207鏈接進Java運行期系統并將本機方法保存在內存213中。如圖所示,內存213可以包含一個用于Java類的類和方法區(qū),以及用于本機方法的本機方法區(qū)。內存中的類和方法區(qū)可以被保存在一個垃圾收集堆。當新對象被創(chuàng)建,它們被保存在該垃圾收集堆。Java運行期系統,而不是應用程序,在空間不再被使用時收回在垃圾收集堆中的內存。
位于圖四中顯示的Java運行期系統的核心的是執(zhí)行引擎217。該執(zhí)行引擎執(zhí)行保存在內存213中的指令,并且可以被用軟件、硬件或兩者的結合實現。執(zhí)行引擎支持面向對象的應用,并且從概念上可以有多個引擎同時運行,每個Java線程一個。執(zhí)行引擎217還可以利用支持代碼221。該支持代碼可以提供與異常、線程、安全性等等相關的功能。
當一個Java程序執(zhí)行時,函數在每個線程內被順序調用。對于每個線程有一個執(zhí)行棧,該棧保存每個尚未完成執(zhí)行的函數的框架。一個框架保存函數的執(zhí)行信息,該信息可以包括狀態(tài)變量,局部變量以及操作數棧。當一個函數被調用,該函數的框架被壓入執(zhí)行棧。當該函數結束,該函數的框架被彈出執(zhí)行棧。因此,只有與位于執(zhí)行棧頂部的框架相應的函數是活動的,與位于執(zhí)行棧頂部以下的框架相應的函數的執(zhí)行被掛起,直到它們調用的函數返回(即結束)。
圖5圖示了關于被保存在一個執(zhí)行棧上的函數的框架。被顯示的執(zhí)行棧301具有位于執(zhí)行棧頂部的框架303和保存在框架303之下的框架305和307。棧指針SP指向執(zhí)行棧的頂部,而框架指針FP指向位于執(zhí)行棧301頂部的框架中的框架指針。
每個被顯示的框架包括與該框架相應的函數的狀態(tài)變量,局部變量以及操作數棧。此外,保存在框架中的最后一項是一個框架指針,該指針指向位于執(zhí)行棧上當前框架之下的框架中的框架指針,如箭頭309和311所示。
當一個函數調用另一個函數,系統首先將當前函數的返回地址壓入執(zhí)行棧301,然后壓入最近被調用函數的新框架。以這種方式,當新函數返回,系統能夠彈出位于執(zhí)行棧頂部的框架,然后從執(zhí)行棧彈出返回地址,并將程序計數器設置為該返回地址,因此調用函數的執(zhí)行可以恢復。因此,這是框架305和307包括返回地址而活動框架303不包括返回地址的原因。但是,如果與框架303相應的函數調用另一個函數,在新函數的框架被壓入執(zhí)行棧之前,返回地址將被壓入執(zhí)行棧301。
框架指針允許系統精確地跨越執(zhí)行棧上的框架。舉例來說,棧指針SP和框架指針FP勾畫了位于執(zhí)行棧頂部的框架。此外,框架303中的框架指針指明了執(zhí)行棧上的下一個框架。正好在框架303中的框架指針之下的地址是執(zhí)行棧上下一個框架的開始,并且框架303的框架指針的內容指明執(zhí)行棧上下一個框架中的最后一項,即框架305。類似地,框架305中的框架指針指明執(zhí)行棧上下一個框架的位置。因此,框架指針鏈允許系統跨越在執(zhí)行棧上的框架(例如,當框架被彈出執(zhí)行棧)。
盡管圖5顯示了執(zhí)行棧的一種實現,本發(fā)明不限于所示的實現。舉例來說,該執(zhí)行棧被顯示為在內存中向上生長,但是,應當明確該棧也可以在內存中向下生長。此外,保存在每個框架中的信息可以根據實現而改變。
最近,Java編程語言,一種面向對象的語言,已經引入了編譯輸出(稱為字節(jié)碼)的可能,該編譯輸出可以在提供Java虛擬機(或字節(jié)碼解釋器)的任何計算機系統平臺上運行。該Java虛擬機被設計來將字節(jié)碼轉換為能夠由實際硬件處理器執(zhí)行的指令。使用此虛擬機,而不是每次解釋一條指令,字節(jié)碼可以在每個特定系統平臺有時通過即時(JIT)編譯器重新編譯。
圖6圖示了一個裝置,包含根據本發(fā)明的一個實施例的一個Java虛擬機(JVM)600。在Java編程語言和環(huán)境中,一個即時(JIT)編譯器是一個程序,將Java字節(jié)碼轉變?yōu)槟軌虮恢苯影l(fā)送給處理器的指令。在Java被編寫完成后,Java源語言語句被Java編譯器編譯為Java字節(jié)碼而不是包含與特定硬件平臺的處理器(例如,IntelPentium微處理器或IBM System/390處理器)相匹配的指令的代碼。該Java字節(jié)碼是獨立于平臺的代碼,能夠被發(fā)送給任何平臺并在該平臺上運行。
更具體地,當字節(jié)碼被提供給編譯器602提供的JIT編譯器,對包含在字節(jié)碼604中方法的編譯被延遲直到該方法即將被執(zhí)行。當字節(jié)碼604被提供給解釋器606,字節(jié)碼604被每次一個字節(jié)碼地讀入解釋器606。然后解釋器606將與被該字節(jié)碼定義的操作相應的參數裝入執(zhí)行棧500。一旦被裝入,解釋器606執(zhí)行被字節(jié)碼604定義的操作。即,解釋器606“解釋”字節(jié)碼604,如同本領域的技術人員應當理解的。通常,解釋器606連續(xù)地處理字節(jié)碼604并執(zhí)行與字節(jié)碼604相聯系的操作。
當一個方法被另一個方法激活,或者,如果該方法被解釋,運行期系統608得到以字節(jié)碼604的序列的形式出現的該方法,其中字節(jié)碼604可以被解釋器606直接執(zhí)行。如果,在另一方面,被激活的方法是尚未被編譯的編譯方法,運行期系統608也得到以字節(jié)碼604的序列的形式出現的該方法,然后可以激活由編譯器602提供的平臺特定的編譯器,編譯得到的機器語言指令可以被目標平臺操作系統610直接執(zhí)行。通常,當虛擬機600終止時該機器語言指令被丟棄。
但是,為在編譯器602中編譯字節(jié)碼或字節(jié)碼序列,需要有限數量的編譯時間。在執(zhí)行前,編譯器將源代碼解碼為本機指令,從而解碼不在執(zhí)行過程中進行。因為傳統的解釋器在一條指令每次被遇到時在執(zhí)行該指令前重復地解碼該指令,解釋程序的執(zhí)行一般比編譯程序的執(zhí)行慢得多,因為已編譯程序的本機指令可以在本機或本計算機系統執(zhí)行而不需要解碼。因此,當性能是一個重要因素時,最好使用編譯器代替解釋器來解碼源代碼。因此當字節(jié)碼或字節(jié)碼序列被虛擬機600接收時,字節(jié)碼或字節(jié)碼序列是否將被解釋器解釋或被編譯器編譯的判斷被作出。舉例來說,在接收的字節(jié)碼或字節(jié)碼序列將通過執(zhí)行編譯后的代碼被處理,而前一個字節(jié)碼或字節(jié)碼序列已經被解釋器處理的情況下,一個平臺特定的適配器必須被提供。該平臺特定的解釋器到已編譯代碼(I/C)的適配器被用于將被解釋器使用的執(zhí)行棧500翻譯為能夠被已編譯代碼使用的棧。此外,該適配器可以更新系統中其它部分的狀態(tài)。
可替換地,當前面的字節(jié)碼或字節(jié)碼序列已經通過執(zhí)行已編譯的代碼被處理,該代碼可能由編譯器602生成,并且確定解釋當前字節(jié)碼或字節(jié)碼序列執(zhí)行效率更高,然后一個已編譯代碼到解釋器(C/I)的適配器必須被提供以適當地將執(zhí)行棧500翻譯為可以被解釋器使用的棧。此外,該適配器可以更新系統中其它部分的狀態(tài)。
當I/C適配器或C/I適配器被創(chuàng)建,它被保存在連接到編譯器602和運行期系統的庫614中。以這種方式,無論何時確定需要一個特定的適配器,庫614被查詢,如果該特定適配器不存在,那么它被創(chuàng)建。為創(chuàng)建一個特定平臺的適配器,需要依賴于不同平臺的輸入。在一個實施例中,這些輸入包括,舉例來說,調用者的已知類型,被調用者的已知類型,被調用者的已知參數數目及其類型,調用約定,等。
圖7是一個流程圖,詳細描述了用于根據本發(fā)明的實施例處理字節(jié)碼或字節(jié)碼序列的過程700。該過程700在702當字節(jié)碼或字節(jié)碼序列被接收時開始。在704,該字節(jié)碼或字節(jié)碼序列是否將被解釋或通過執(zhí)行已編譯代碼被處理的判斷被作出。如果字節(jié)碼或字節(jié)碼序列將通過執(zhí)行已編譯代碼被處理,然后在708判斷是否需要一個I/C適配器。如果不需要適配器,在710,該字節(jié)碼或字節(jié)碼序列通過執(zhí)行已編譯代碼被處理,其結果在711被返回。但是,如果需要適配器,在712判斷所需的適配器是否被保存在庫中。如果所需的適配器沒有被保存在庫中,所需的適配器在714被生成,否則,所需的適配器在716被從庫中得到。兩種情況下,適配器在718被編譯,其后適配器在720被保存在庫中,在722為執(zhí)行已編譯代碼作準備,一旦完成準備,字節(jié)碼或字節(jié)碼序列在710通過執(zhí)行已編譯字節(jié)碼被處理。
在711,已編譯字節(jié)碼(或字節(jié)碼序列)的執(zhí)行結果被返回后,在724判斷是否有更多的字節(jié)碼。如果有更多的字節(jié)碼,控制被傳遞給704,字節(jié)碼被接收,否則,過程700停止。
返回704,如果確定字節(jié)碼或字節(jié)碼序列將被解釋,然后在726判斷是否需要C/I適配器。如果不需要適配器,字節(jié)碼或字節(jié)碼序列在728被解釋,其結果在730被返回。但是,如果需要適配器,在732判斷所需的適配器是否被保存在庫中。如果所需的適配器沒有被保存在庫中,所需的適配器在734被生成,否則,所需的適配器在736被從庫中得到。兩種情況下,適配器在738被編譯,其后適配器在740被保存在庫中,在742為執(zhí)行已編譯代碼作準備,然后字節(jié)碼或字節(jié)碼序列在728被解釋,其結果在730被返回。
在730,已解釋字節(jié)碼(或字節(jié)碼序列)的執(zhí)行結果被返回后,在724判斷是否有更多的字節(jié)碼。如果有更多的字節(jié)碼,控制被傳遞給704,字節(jié)碼被接收,否則,過程700停止。
圖8是詳細描述根據本發(fā)明的實施例用于生成一個適配器/承接軟件的過程800的流程圖。過程800在802通過識別用于調用已編譯代碼的參數以及恰當的機器狀態(tài)開始。接著,在804,輸入參數和機器狀態(tài)被映射到已編譯代碼調用的輸入。在806,機器狀態(tài)和返回值被映射到解釋器到已編譯代碼的適配器的返回點。在808,適配器/承接軟件的表示被提供給編譯器用于編譯并生成目標代碼。
盡管上面是對本發(fā)明的優(yōu)選實施例的一個完整描述,存在備選的,修正的以及等價的方案可以被使用。顯然,通過對上面描述的實施例作適當的修改,本發(fā)明是適用的。舉例來說,上面描述的實施例已經引用了一個包括Java框架的執(zhí)行棧,但是本發(fā)明的原則可以被容易地應用于其它系統和語言。因此,上面的描述不應當被看作是對本發(fā)明的范圍的限制。本發(fā)明的范圍被所附的權利要求的組合和約束以及它們等價的完整范圍定義。
權利要求
1.用于在運行期系統執(zhí)行字節(jié)碼的裝置,包括字節(jié)碼源;與字節(jié)碼源相連用于解釋字節(jié)碼的解釋器;與字節(jié)碼源相連用于編譯字節(jié)碼的編譯器;與該解釋器和編譯器相連的運行期系統,其中運行期系統被設定用于當字節(jié)碼被解釋器解釋時執(zhí)行已解釋的字節(jié)碼,以及,當字節(jié)碼被編譯器編譯時執(zhí)行已編譯的字節(jié)碼;與編譯器相連的適配器/承接軟件生成器單元,被設定用于根據要求向編譯器提供適配器源代碼或承接軟件源代碼;與編譯器和運行期系統相連的庫,被設定用于保存被編譯器編譯的適配器和承接軟件,其中運行期系統在需要時檢索適配器。
2.如權利要求1中描述的裝置,其中字節(jié)碼是一系列字節(jié)碼之一。
3.如權利要求1中描述的裝置,其中適配器生成器隨適配器輸入參數被提供,用于生成需要的適配器。
4.計算機程序產品,該產品實現用于處理字節(jié)碼的裝置,包括解釋接收到的字節(jié)碼的計算機代碼;編譯接收到的字節(jié)碼的計算機代碼;當被編譯器請求時生成適配器的計算機代碼;保存適配器以及在執(zhí)行已編譯或已解釋的字節(jié)碼時向運行期系統提供適配器的計算機代碼;以及保存計算機代碼的計算機可讀的媒體。
5.在一個計算機系統中,用于在運行期環(huán)境中處理字節(jié)碼的方法,該方法包括判斷為處理字節(jié)碼是否需要一個適配器;如果需要適配器,確定該適配器是否位于一個適配器庫中;如果需要的適配器不在庫中,生成該適配器;在庫中保存生成的適配器;向運行期環(huán)境提供該適配器;以及執(zhí)行該字節(jié)碼。
6.計算機程序產品,該產品在運行期環(huán)境中處理字節(jié)碼,包括提供字節(jié)碼的計算機代碼;判斷為執(zhí)行字節(jié)碼是否需要一個適配器,當需要的適配器不在適配器庫中時生成需要的適配器,以及根據要求向運行期系統提供所需的適配器的計算機代碼;以及保存計算機代碼的計算機可讀的媒體。
7.權利要求6中的計算機程序產品,其中計算機可讀的媒體選自CD-ROM,軟盤,磁帶,快閃存儲器,系統內存,硬盤,以及包含在載波中的數字信號。
全文摘要
用于自動地在被規(guī)定的運行期環(huán)境中提供一個適配器或承接軟件的系統和方法。適配器生成器隨輸入參數被提供,這些輸入參數被處理以及向編譯器輸入。該編碼器被連接到用于保存已生成的適配器的適配器庫。該適配器庫根據要求在執(zhí)行字節(jié)碼或一系列字節(jié)碼時向運行期系統提供適配器。
文檔編號G06F9/45GK1271892SQ0010702
公開日2000年11月1日 申請日期2000年4月24日 優(yōu)先權日1999年4月23日
發(fā)明者小C·N·克利克, C·A·維克, M·H·帕萊茨尼 申請人:太陽微系統有限公司