[go: nahoru, domu]

JP5090279B2 - Program conversion system - Google Patents

Program conversion system Download PDF

Info

Publication number
JP5090279B2
JP5090279B2 JP2008186452A JP2008186452A JP5090279B2 JP 5090279 B2 JP5090279 B2 JP 5090279B2 JP 2008186452 A JP2008186452 A JP 2008186452A JP 2008186452 A JP2008186452 A JP 2008186452A JP 5090279 B2 JP5090279 B2 JP 5090279B2
Authority
JP
Japan
Prior art keywords
bytecode
language
byte code
virtual
instruction
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.)
Expired - Fee Related
Application number
JP2008186452A
Other languages
Japanese (ja)
Other versions
JP2010026728A (en
Inventor
道昭 立堀
スチュアート ジェイ ヘイトン,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2008186452A priority Critical patent/JP5090279B2/en
Publication of JP2010026728A publication Critical patent/JP2010026728A/en
Application granted granted Critical
Publication of JP5090279B2 publication Critical patent/JP5090279B2/en
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、プログラムを変換するシステムに関し、特に、特定の言語のバイトコード上に他の言語のバイトコードをエンコードするシステムおよび変換方法に関する。   The present invention relates to a system for converting a program, and more particularly to a system and a conversion method for encoding a byte code of another language on a byte code of a specific language.

コンピュータ・システムを動作させる際に、相異なるプログラミング言語で記載された複数のプログラムを連携させて実行する場合がある。例えば、Java(米国サン・マイクロシステムズ社の登録商標)によるプラットフォーム上で、PHP(PHP:Hypertext Preprocessor)等で記述されたプログラムを実行する場合等である。   When a computer system is operated, a plurality of programs written in different programming languages may be executed in cooperation with each other. For example, there is a case where a program written in PHP (PHP: Hypertext Preprocessor) or the like is executed on a platform by Java (registered trademark of Sun Microsystems, Inc.).

様々な局面で効果的に動作する言語処理系を実現するためには、このような複数の機械語コードをうまく使い分けることが望まれる。しかし、1つの機械語コード表現を理解する処理系は、通常、そのままでは他の機械語コード表現を理解できない。そこで、従来から、1つの機械語コードを実行する処理系から他の機械語コードを実行するための工夫が行われている。   In order to realize a language processing system that operates effectively in various aspects, it is desirable to properly use a plurality of such machine language codes. However, a processing system that understands one machine language code expression usually cannot understand another machine language code expression as it is. Therefore, conventionally, a device for executing another machine language code from a processing system that executes one machine language code has been devised.

特許文献1には、2種類のバイナリ表現によるプログラムを1つのアプリケーションに両方備えた処理系が開示されている。この従来技術によれば、アプリケーションが複数の異なる種類の機械語コードを実行できるため、上記のような機械語コードの使い分けが可能である。   Patent Document 1 discloses a processing system in which two types of binary representation programs are provided in one application. According to this prior art, since the application can execute a plurality of different types of machine language codes, the machine language codes as described above can be used properly.

非特許文献1には、サブルーチン・スレッディングと呼ばれるプログラム変換方式について開示されている。この従来技術によれば、例えば、PHPバイトコードの各命令がJavaバイトコード上のサブルーチン(メソッド)呼び出しに対応するようにJavaバイトコードが構成され、呼び出されるメソッドがJavaで実装される。このサブルーチン・スレッディングを用いることで、コンパイル結果のJavaバイトコードからPHP言語のセマンティクスを読み取ることが可能になる。   Non-Patent Document 1 discloses a program conversion method called subroutine threading. According to this prior art, for example, the Java byte code is configured so that each instruction of the PHP byte code corresponds to a subroutine (method) call on the Java byte code, and the method to be called is implemented in Java. By using this subroutine threading, it is possible to read PHP language semantics from the Java bytecode of the compilation result.

米国特許第5432937号明細書US Pat. No. 5,432,937 C. J. Cheney, "A Nonrecursive List Compacting Algorithm", Communications of the ACM 13 (11), 1970.C. J. Cheney, "A Nonrecursive List Compacting Algorithm", Communications of the ACM 13 (11), 1970.

上記のように、1つの機械語コードを実行する処理系から他の機械語コードを実行するための工夫が、従来から行われている。
しかし、2種類のバイナリ表現によるプログラムを1つのアプリケーションに両方備えた処理系で対応する場合、次のような問題があった。例えば2種の処理系がある場合には、その処理系を2つとも実行系に読み込むことになる。そのため、各処理系に対応したバイナリ・データをそれぞれ用意しなければならず、プログラムのサイズが増大していた。また、このとき用意される複数のバイナリ・データは各々独立した異なる表現である。そのため、所定のバイトコードを調べて成り立つことがわかった性質が、他のバイトコードで成り立つか否かについては、実際に他のバイトコードでも調べてみないとわからない。そのため、バイナリ・データごとに全く独立の検証作業が必要になる。
As described above, a device for executing another machine language code from a processing system that executes one machine language code has been conventionally performed.
However, when dealing with two types of binary representation programs in a processing system provided in one application, there are the following problems. For example, when there are two types of processing systems, both of the processing systems are read into the execution system. For this reason, binary data corresponding to each processing system has to be prepared, and the size of the program has increased. The plurality of binary data prepared at this time are independent and different expressions. For this reason, whether or not the property found by examining a predetermined byte code is realized by other byte codes can be understood only by examining other byte codes. Therefore, a completely independent verification operation is required for each binary data.

また、サブルーチン・スレッディングによる手法では、サブルーチンを読み取る際の処理コストが大きいという問題があった。これは、サブルーチン・スレッディングが、そもそも、プラットフォーム(例えば、Java仮想機械)上で直接実行することのみを意図したものであり、そこに埋め込まれている他の言語(例えば、PHP言語)のインストラクションなどのセマンティクスを読み取るために作られてはいないためである。   Further, the technique based on subroutine threading has a problem that the processing cost for reading a subroutine is high. This is intended only for subroutine threading to be executed directly on a platform (eg, Java virtual machine) in the first place, and instructions for other languages (eg, PHP language) embedded therein This is because it is not designed to read the semantics.

本発明は、これらの課題を解決し、異なる種類の複数のバイトコードを1つのファイル上にエンコーディングし、効率良く実行されるプログラムを生成するシステムおよびプログラム変換方法を提供することを目的とする。   An object of the present invention is to solve these problems, and to provide a system and a program conversion method for generating a program to be executed efficiently by encoding a plurality of different types of byte codes on one file.

上記の目的を達成するため、本発明は、次のようなシステムとして実現される。このシステムは、第1の言語のバイトコード上に第2の言語のバイトコードをエンコードして第1の言語のバイトコードのクラス・ファイルを生成するシステムであって、第2の言語のバイトコードに対する前処理を行う前処理部と、前処理の結果を元に実際に前記第1の言語のバイトコードを生成して、メソッド呼び出しのバイトコードから参照される値を保持するデータ構造を持つクラス・ファイルを生成するコード化処理部とを備える。前処理部は、第1の言語のバイトコードの処理系が実行可能な形式に書き替えられた第2の言語のバイトコードである仮想バイトコードの命令により使用される領域を、一時記憶手段に保持された当該データ構造における第2の言語のバイトコードの命令ごとに予め定められた場所に確保し、第2の言語のバイトコードにおける各命令を仮想バイトコードに変換して、この仮想バイトコードを一時記憶手段に保持する。コード化処理部は、一時記憶手段に保持されたデータ構造および仮想バイトコードを含む第1の言語のバイトコードのクラス・ファイルを生成する。   In order to achieve the above object, the present invention is realized as the following system. The system encodes a second language byte code on a first language byte code to generate a class file of the first language byte code, the second language byte code And a class having a data structure for actually generating the byte code of the first language based on the result of the pre-processing and holding a value referred to from the byte code of the method call A coding processing unit for generating a file; The preprocessing unit stores, in the temporary storage unit, an area used by a virtual bytecode instruction that is a bytecode of the second language that has been rewritten into a format executable by the bytecode processing system of the first language. This virtual bytecode is secured in a predetermined location for each instruction of the second language bytecode in the data structure held, and each instruction in the bytecode of the second language is converted into a virtual bytecode. Is stored in the temporary storage means. The encoding processing unit generates a bytecode class file of the first language including the data structure and virtual bytecode held in the temporary storage means.

また、このシステムは、生成されたクラス・ファイルを通常の第1の言語のバイトコードの実行形態とは異なる形で実行する実行部をさらに備える構成としても実現される。
そして、好ましくは、実行部は、第2の言語のバイトコードの命令と、予め定められた命令により使用されるデータ構造上の場所との対応関係を示す情報を記憶手段に保持し、この情報に基づいて、クラス・ファイルの多くの部分を読まずして、データ構造上の場所から仮想バイトコードの内容を認識する。
This system can also be realized as a configuration further including an execution unit that executes the generated class file in a form different from the execution form of the normal first language bytecode.
Preferably, the execution unit holds information indicating a correspondence relationship between the byte code instruction of the second language and a place on the data structure used by the predetermined instruction in the storage unit, and this information Based on the above, the contents of the virtual bytecode are recognized from the location on the data structure without reading many parts of the class file.

上記のシステムにおいて、より詳細には、コード化処理部は、仮想バイトコードを第1の言語のバイトコードのメソッドとしてエンコードする。
また、コード化処理部は、データ構造に、仮想バイトコードの実行に必要なデータおよびメソッドの位置を示す情報を記録する。そして、実行部は、データ構造に記録された、データおよびメソッドの位置を示す情報に基づき、仮想バイトコードの実行に不要な内容の解読を省略してクラス・ファイルの解読および実行を行う。
In the above system, more specifically, the encoding processing unit encodes the virtual bytecode as a bytecode method of the first language.
In addition, the encoding processing unit records information indicating the position of the data and the method necessary for executing the virtual bytecode in the data structure. Then, the execution unit decodes and executes the class file based on the information indicating the position of the data and the method recorded in the data structure, omitting the decoding of the contents unnecessary for the execution of the virtual bytecode.

また、本発明は、次のような方法としても実現される。この方法は、第1の言語のバイトコード上に第2の言語のバイトコードをエンコードして第1の言語のバイトコードのクラス・ファイルを生成するプログラム変換方法であって、所定のバイトコードのクラス・ファイルは、メソッド呼び出しのバイトコードから参照される値を保持するデータ構造を持ち、第1の言語のバイトコードの処理系が実行可能な形式に書き替えられた第2の言語のバイトコードである仮想バイトコードの命令により使用される領域を、一時記憶手段に保持された当該データ構造における第2の言語のバイトコードの命令ごとに予め定められた場所に確保するステップと、第2の言語のバイトコードにおける各命令を仮想バイトコードに変換して、仮想バイトコードを一時記憶手段に保持させるステップと、一時記憶手段に保持されたデータ構造を含み、仮想バイトコードをメソッドとしてエンコードした第1の言語のバイトコードのクラス・ファイルを生成するステップと、を含む。   The present invention is also realized as the following method. This method is a program conversion method for encoding a byte code of a second language on a byte code of a first language to generate a class file of the byte code of the first language. The class file has a data structure that holds a value referenced from the byte code of the method call, and the byte code of the second language that has been rewritten into a format that can be executed by the processing system of the first language byte code Securing a region used by a virtual bytecode instruction that is a predetermined location for each bytecode instruction of the second language in the data structure held in the temporary storage means; Converting each instruction in the language bytecode into a virtual bytecode and holding the virtual bytecode in a temporary storage means; and temporary storage It includes holding data structures stage, and generating the class files bytecode first language encodes the virtual byte code as a method, a.

さらに本発明は、コンピュータを制御して、上記のシステムにおける各機能を実現させるプログラムや、上記の方法における各ステップに対応する処理を実行させるプログラムとしても実解される。このプログラムは、光ディスクや磁気ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより、提供される。   Furthermore, the present invention is also realized as a program for controlling a computer to realize each function in the above system and a program for executing a process corresponding to each step in the above method. This program is provided by being stored and distributed in an optical disk, magnetic disk, semiconductor memory, or other recording medium, or distributed via a network.

以上のように構成された本発明によれば、異なる種類の複数のバイトコードを1つのファイル上にエンコーディングし、効率良く実行されるプログラムを生成するシステムおよびプログラム変換方法を提供することができる。   According to the present invention configured as described above, it is possible to provide a system and a program conversion method for encoding a plurality of different types of byte codes on one file and generating a program to be executed efficiently.

以下、添付図面を参照して、本発明の実施形態について詳細に説明する。
本発明は、一定の特徴(後述)を備えたプログラミング言語で記述されたプログラムに対して適用できるものであるが、本実施形態では、JavaバイトコードとPHPバイトコードとを1つのファイル上にエンコードする場合を例として説明する。具体的には、PHPバイトコードを仮想バイトコード(後述)として、Javaバイトコードにエンコードする。
Hereinafter, embodiments of the present invention will be described in detail with reference to the accompanying drawings.
The present invention can be applied to a program written in a programming language having certain features (described later). In this embodiment, Java byte code and PHP byte code are encoded on one file. This will be described as an example. Specifically, the PHP byte code is encoded into a Java byte code as a virtual byte code (described later).

<システム構成>
図1は、本実施形態が適用されるシステムの全体構成を示す図である。
図1に示すシステムは、パーソナルコンピュータ等のコンピュータで実現される。このシステムは、PHPスクリプトが記述されたソースコードをコンパイルしてJavaのバイトコードを生成する変換部100と、生成されたバイトコードを実行する実行部200とを備える。
<System configuration>
FIG. 1 is a diagram showing an overall configuration of a system to which the present embodiment is applied.
The system shown in FIG. 1 is realized by a computer such as a personal computer. This system includes a conversion unit 100 that compiles a source code in which a PHP script is described to generate a Java bytecode, and an execution unit 200 that executes the generated bytecode.

変換部100は、コンパイラであり、仮想バイトコードを生成する前処理部110と、仮想バイトコードを組み込んだJavaバイトコードのクラス・ファイルを生成するコード化処理部120とを備える。ここで、仮想バイトコードとは、PHPバイトコードをJavaバイトコード上のメソッド呼び出しとしてエンコードしたものであり、言い換えれば、Java仮想機械がそのまま実行できる形に変換したものである。仮想バイトコードは、仮想インストラクションと仮想コンスタント値(定数値)とからなる。   The conversion unit 100 is a compiler, and includes a preprocessing unit 110 that generates a virtual bytecode, and a coding processing unit 120 that generates a class file of a Java bytecode incorporating the virtual bytecode. Here, the virtual bytecode is a PHP bytecode encoded as a method call on the Java bytecode, in other words, converted into a form that can be executed as it is by the Java virtual machine. The virtual bytecode is composed of a virtual instruction and a virtual constant value (constant value).

実行部200は、Java仮想機械、または、PHPバイトコードの実行系、または、両者の性質を備えた実行系である。実行部200がJava仮想機械である場合は通常のJavaバイトコードとして実行される。一方、PHPバイトコードの実行系である場合、詳しくは後述するが、実行部200は、変換部100により生成されるバイトコードに固有のデータ構造に応じて、このバイトコードを実行する。実行部200の実装は、インタプリタであっても良いし、JIT(Just In Time)コンパイラであっても良い。また、複数の実装を併存させても良い。   The execution unit 200 is a Java virtual machine, an execution system of PHP bytecode, or an execution system having the properties of both. When the execution unit 200 is a Java virtual machine, it is executed as a normal Java bytecode. On the other hand, when the execution system is a PHP bytecode, the execution unit 200 executes the bytecode according to the data structure unique to the bytecode generated by the conversion unit 100, as will be described in detail later. The implementation of the execution unit 200 may be an interpreter or a JIT (Just In Time) compiler. A plurality of implementations may coexist.

図2は、本実施形態のプログラム処理装置を実現するコンピュータのハードウェア構成例を示す図である。
図2に示すコンピュータ10は、演算手段であるCPU(Central Processing Unit)10aと、記憶手段であるメイン・メモリ10cおよび磁気ディスク装置(HDD:Hard Disk Drive)10gを備える。また、ネットワークを介して外部装置に接続するためのネットワーク・インタフェース・カード10fと、表示出力を行うためのビデオ・カード10dおよび表示装置10jと、音声出力を行うための音声機構10hとを備える。さらに、キーボードやマウス等の入力デバイス10iを備える。
FIG. 2 is a diagram illustrating a hardware configuration example of a computer that realizes the program processing apparatus according to the present embodiment.
The computer 10 shown in FIG. 2 includes a CPU (Central Processing Unit) 10a that is a calculation means, a main memory 10c that is a storage means, and a magnetic disk device (HDD: Hard Disk Drive) 10g. In addition, a network interface card 10f for connecting to an external device via a network, a video card 10d and a display device 10j for performing display output, and an audio mechanism 10h for performing audio output are provided. Furthermore, an input device 10i such as a keyboard or a mouse is provided.

図2に示すように、メイン・メモリ10cおよびビデオ・カード10dは、システム・コントローラ10bを介してCPU10aに接続されている。また、ネットワーク・インタフェース・カード10f、磁気ディスク装置10g、音声機構10hおよび入力デバイス10iは、I/Oコントローラ10eを介してシステム・コントローラ10bと接続されている。各構成要素は、システム・バスや入出力バス等の各種のバスによって接続される。例えば、CPU10aとメイン・メモリ10cの間は、システム・バスやメモリ・バスにより接続される。また、CPU10aと磁気ディスク装置10g、ネットワーク・インタフェース・カード10f、ビデオ・カード10d、音声機構10h、入力デバイス10i等との間は、PCI(Peripheral Components Interconnect)、PCI Express、シリアルATA(AT Attachment)、USB(Universal Serial Bus)、AGP(Accelerated Graphics Port)等の入出力バスにより接続される。   As shown in FIG. 2, the main memory 10c and the video card 10d are connected to the CPU 10a via the system controller 10b. The network interface card 10f, the magnetic disk device 10g, the sound mechanism 10h, and the input device 10i are connected to the system controller 10b via the I / O controller 10e. Each component is connected by various buses such as a system bus and an input / output bus. For example, the CPU 10a and the main memory 10c are connected by a system bus or a memory bus. Between the CPU 10a and the magnetic disk device 10g, the network interface card 10f, the video card 10d, the audio mechanism 10h, the input device 10i, etc., PCI (Peripheral Components Interconnect), PCI Express, serial ATA (AT Attachment) , USB (Universal Serial Bus), AGP (Accelerated Graphics Port) and other input / output buses.

なお、図2は、本実施形態が適用されるのに好適なコンピュータのハードウェア構成を例示するに過ぎず、実際の各サーバが図示の構成に限定されないことは言うまでもない。例えば、ビデオ・カード10dを設ける代わりに、ビデオメモリのみを搭載し、CPU10aにてイメージ・データを処理する構成としても良い。また、音声機構10hを独立した構成とせず、システム・コントローラ10bやI/Oコントローラ10eを構成するチップセットの機能として備えるようにしても良い。また、補助記憶装置として磁気ディスク装置10gの他に、各種の光学ディスクやフレキシブル・ディスクをメディアとするドライブを設けても良い。表示装置10jとしては、主として液晶ディスプレイが用いられるが、その他、CRTディスプレイやプラズマ・ディスプレイ等、任意の方式のディスプレイを用いて良い。   Note that FIG. 2 merely exemplifies a hardware configuration of a computer suitable for application of the present embodiment, and it is needless to say that each actual server is not limited to the illustrated configuration. For example, instead of providing the video card 10d, only the video memory may be mounted and the CPU 10a may process the image data. Further, the audio mechanism 10h may be provided as a function of a chip set that constitutes the system controller 10b and the I / O controller 10e without being an independent configuration. In addition to the magnetic disk device 10g, an auxiliary storage device may be provided with a drive using various optical disks and flexible disks as media. A liquid crystal display is mainly used as the display device 10j, but any other type of display such as a CRT display or a plasma display may be used.

図1に示したシステムにおいて、変換部100および実行部200は、例えば図2に示したコンピュータにおいて、メイン・メモリ10cに読み込まれたプログラムをCPU10aが実行することにより実現される。また、変換部100および実行部200の処理中に生成される一時ファイル等は、メイン・メモリ10cの作業領域等に保持される。   In the system shown in FIG. 1, the conversion unit 100 and the execution unit 200 are realized by the CPU 10 a executing the program read into the main memory 10 c in the computer shown in FIG. 2, for example. Temporary files and the like generated during the processing of the conversion unit 100 and the execution unit 200 are held in a work area or the like of the main memory 10c.

<バイトコードのデータ構造>
図3は、Javaバイトコードのデータ構造を示す図である。
変換部100により生成される、本実施形態のバイトコードのクラス・ファイルは、全体的な構成としては、通常のJavaバイトコードのクラス・ファイルと変わらない。すなわち、図3に示すように、ヘッダ301、コンスタント・プール302、クラス情報303、フィールド304、メソッド305、アトリビュート306と呼ばれる部分が含まれる。メソッド305内には、Java自体のインストラクションの他、PHPのインストラクションである仮想インストラクションと、仮想インストラクションに使用されるPHP内部のコンスタント・プールとが含まれる。
<Data structure of byte code>
FIG. 3 is a diagram showing the data structure of the Java byte code.
The byte code class file of the present embodiment generated by the conversion unit 100 is the same as an ordinary Java byte code class file as an overall configuration. That is, as shown in FIG. 3, a portion called a header 301, a constant pool 302, class information 303, a field 304, a method 305, and an attribute 306 is included. The method 305 includes a Java instruction, a virtual instruction that is a PHP instruction, and a constant pool inside the PHP that is used for the virtual instruction.

上述したように、本実施形態では、PHPバイトコードを仮想バイトコードとして、Javaバイトコードにエンコードする。具体的には、仮想バイトコードは、invokestatic(0xb8)インストラクションと、メソッドを示すコンスタント値が入っているコンスタント・プール302中のインデックス(索引番号)として、エンコードされる。例えば、PHP言語用の仮想バイトコードを考えると、PHPオブジェクトの足し算を行うADDという仮想インストラクションは、VirtualOpcodesクラスのスタティック・メソッドadd()へのメソッド呼び出しになる。なお、コンスタント・プール302は、メソッド呼び出しのバイトコードから参照される値を保持するデータ構造である。   As described above, in this embodiment, a PHP byte code is encoded as a virtual byte code into a Java byte code. More specifically, the virtual bytecode is encoded as an index (index number) in the constant pool 302 that contains an invocative (0xb8) instruction and a constant value indicating a method. For example, when considering a virtual bytecode for PHP language, a virtual instruction called ADD for adding PHP objects is a method call to the static method add () of the Virtual Opcodes class. The constant pool 302 is a data structure that holds a value that is referred to from the byte code of the method call.

実際のバイト列は、

0xb8(invokestatic)
0x00(higher byte of 5, index for the constant pool)
0x05(lower byte of 5, index for the constant pool)

という、3バイトになる。ただし、コンスタント・プール302は図4のようになっているとする。これにより、Javaバイトコードとしては、com.ibm.VirtualOpcodesクラスのvoid add(Runtime)というスタティック・メソッドを呼び出すという意味になる。なお、実装形態によっては、invokestatic(0xb8)インストラクションの代わりに、invokevirtual(0xb6)、invokeinterface(0xb9)、invokespecial(0xb7)等を使用して実現しても良い。
The actual byte sequence is

0xb8 (invokestatic)
0x00 (higher byte of 5, index for the constant pool)
0x05 (lower byte of 5, index for the constant pool)

It becomes 3 bytes. However, it is assumed that the constant pool 302 is as shown in FIG. As a result, as a Java byte code, com. ibm. This means that a static method called void add (Runtime) of the Virtual Opcodes class is called. Note that, depending on the implementation, instead of the invokative (0xb8) instruction, the invokevirtual (0xb6), invokeinterface (0xb9), invokespecial (0xb7), or the like may be used.

メソッドの引数には、実行コンテキスト(Runtime)を渡している。仮想機械の状態を変えるような仮想インストラクションをJavaのメソッドとして実装する場合には、この実行コンテキスト・オブジェクトに対する操作として実装されることになる。ここで、仮想機械の状態とは、PHPバイトコードにおけるレジスタ、スタック、ヒープなどの仮想的な記憶装置の内容や、広義には入出力などを含む。したがって、仮想機械の状態を変えるとは、例えば、外部入出力へのアクセスや、スタックへの積み下ろしなどが行われることを意味する。具体的には、例えばADDというインストラクションは、
・スタックから2つ値を取り出す。
・スタックに計算結果の値を積む。
という、仮想機械の状態変化を起こす。なお、実行コンテキストを必要としないインストラクションの場合は省略して良い。
An execution context (Runtime) is passed as an argument of the method. When a virtual instruction that changes the state of the virtual machine is implemented as a Java method, it is implemented as an operation on this execution context object. Here, the state of the virtual machine includes contents of virtual storage devices such as registers, stacks, and heaps in the PHP byte code, and input / output in a broad sense. Therefore, changing the state of the virtual machine means that, for example, access to an external input / output or loading / unloading to / from a stack is performed. Specifically, for example, an instruction called ADD
-Take two values from the stack.
・ Put the value of the calculation result on the stack.
This causes a change in the state of the virtual machine. Note that this may be omitted for instructions that do not require an execution context.

仮想バイトコードの無条件分岐命令や条件分岐命令のエンコードには、実際のJava仮想機械の分岐命令を用いる。具体的には、無条件分岐にはgoto(0xa7)、条件分岐にはifne(0x9a)やifeq(0x99)を用いる。また、実装形態により、さらに、多条件分岐命令tableswitch(0xaa)、lookupswitch(0xab)と組み合わせた分岐も考えられる。   An actual Java virtual machine branch instruction is used to encode an unconditional branch instruction of a virtual bytecode or a conditional branch instruction. Specifically, goto (0xa7) is used for the unconditional branch, and ifne (0x9a) or ifeq (0x99) is used for the conditional branch. Further, depending on the implementation form, a branch combined with a multi-condition branch instruction tableswitch (0xaa) and lookupswitch (0xab) is also conceivable.

仮想バイトコードの定数には、スタティック・フィールドと、そこからの読み出しである、getstatic(0xb2)を用いる。なお、実装形態によっては、インスタンス・フィールドと、そこからの読み出しである、getfield(0xb4)を使用して実現しても良い。   As a constant of the virtual bytecode, a static field and a read static (getstatic (0xb2)) are used. Depending on the implementation, it may be realized by using an instance field and getfield (0xb4) that is read from the instance field.

<コンスタント・プールのデータ構造>
次に、本実施形態におけるコンスタント・プールのデータ構造について説明する。
図5は、PHPのオペコード(Opcode)の一部を例示する図である。
図5に示すように、本実施形態では、仮想バイトコードの各オペコードに対し、できるだけ連続した番号(ID)を割り振り、この番号は利用者間で共通化されているものとする。番号の始まりは、大きくなりすぎないように決めるか、別途オフセットなどの情報を渡してクラス・ファイル単位で柔軟に調整できるようにしても良い。
<Constant pool data structure>
Next, the data structure of the constant pool in this embodiment will be described.
FIG. 5 is a diagram illustrating a part of an operation code (Opcode) of PHP.
As shown in FIG. 5, in the present embodiment, as many consecutive numbers (IDs) as possible are assigned to each operation code of the virtual bytecode, and this number is assumed to be shared among users. The start of the number may be determined so as not to become too large, or information such as an offset may be passed separately so that the number can be adjusted flexibly for each class file.

図6は、図5のオペコードIDに対応して構成された本実施形態によるコンスタント・プールの例を示す図である。
図6に示すように、本実施形態では、各仮想インストラクションに対応するメソッドを指定するメソッド情報(Method_info)が、コンスタント・プール中で、対応するIDをインデックスとする位置に置かれる。このように、仮想インストラクションの内容に応じてコンスタント・プールにおける配置を決めておくことにより、invokestaticから続く3バイトに含まれるコンスタント・プール・エントリのインデックスを読むだけで(メソッド情報自体を読まなくても)、その一連のバイトコードが表す仮想インストラクションの内容が分かるようになる。
FIG. 6 is a diagram showing an example of a constant pool according to the present embodiment configured corresponding to the opcode ID of FIG.
As shown in FIG. 6, in this embodiment, method information (Method_info) for designating a method corresponding to each virtual instruction is placed at a position where the corresponding ID is an index in the constant pool. In this way, by determining the placement in the constant pool according to the contents of the virtual instruction, it is only necessary to read the constant pool entry index included in the 3 bytes following the invocative (without reading the method information itself). ), The contents of the virtual instruction represented by the series of bytecodes can be understood.

なお、このようなコンスタント・プールとなるように調整する方法としては、種々の方法が考えられる。単純な方法は、仮想インストラクションを指定するコンスタントは全て固定にしておき、他の用途に用いないことである。また、多少効率的にコンスタント・プールを利用するために、利用されていない仮想インストラクションに対応するコンスタント・プールのエントリを他の用途に開放するようにしても良い。   Various methods are conceivable as a method for adjusting such a constant pool. The simple way is to keep all constants that specify virtual instructions fixed and not used for other purposes. Further, in order to use the constant pool somewhat efficiently, the entry of the constant pool corresponding to the unused virtual instruction may be opened for other uses.

<変換部の機能>
次に、変換部100の前処理部110およびコード化処理部120の機能を説明する。
図7は、変換部100による処理の流れを示すフローチャートである。
図7に示す動作例では、コンスタント・プール、メソッド定義、フィールド定義などを仮に記憶しておくコンポーネント(To−Doリスト)を用意している。このコンポーネントは、例えば図2に示したメイン・メモリ10cやCPU10aのキャッシュメモリにより実現される。
図7を参照すると、まず、変換部100の前処理部110が、変換対象のプログラム全体を見て、各仮想インストラクションに関して、コンスタント・プールにおける配置場所を予約する(ステップ701)。
<Function of conversion unit>
Next, functions of the preprocessing unit 110 and the encoding processing unit 120 of the conversion unit 100 will be described.
FIG. 7 is a flowchart showing the flow of processing by the conversion unit 100.
In the operation example shown in FIG. 7, a component (To-Do list) for temporarily storing a constant pool, a method definition, a field definition, and the like is prepared. This component is realized by, for example, the main memory 10c and the cache memory of the CPU 10a shown in FIG.
Referring to FIG. 7, first, the preprocessing unit 110 of the conversion unit 100 looks at the entire program to be converted and reserves an arrangement location in the constant pool for each virtual instruction (step 701).

次に、前処理部110は、各仮想インストラクションに関して、バイトコード生成処理を行い、生成されたバイトコードをコンスタント・プールの未だ予約されていない場所に置く(ステップ702)。このとき、仮想インストラクションが仮想コンスタント値を取るような場合に、その仮想インストラクションをエンコードしておくフィールド(名)を割り当て、仮想コンスタント値とともにTo−Doリストに入れる。   Next, the pre-processing unit 110 performs byte code generation processing for each virtual instruction, and places the generated byte code in a location that is not yet reserved in the constant pool (step 702). At this time, when the virtual instruction takes a virtual constant value, a field (name) for encoding the virtual instruction is assigned, and the virtual instruction value is put in the To-Do list together with the virtual constant value.

以上の操作の後、前処理部110は、ステップ702で割り当てられた各フィールドとそれらの初期化のためのコードを生成し、To−Doリストに入れる(ステップ703)。そして、コード化処理部120が、To−Doリストに保持されている全ての内容をJavaのバイトコードとして書き出す(ステップ704)。書き出されたJavaバイトコードにおいて、コンスタント・プールにおけるcp_infoの配列に、CONSTANT_Integer_info型の整数コンスタント値として、実行に必要なデータおよびメソッドの位置を示す情報(この情報をオフセット値と呼ぶ)が記録される。オフセット値により示される情報は、仮想インストラクション列がエンコードされているメソッドの本体部分(Code属性情報)の開始位置、読み込みが必要なコンスタント・プールの記録内容の開始位置、読み込みを行うべきコンスタント・プール・エントリのインデックスの3つである。   After the above operation, the preprocessing unit 110 generates the fields assigned in step 702 and codes for initializing them, and puts them in the To-Do list (step 703). Then, the encoding processing unit 120 writes out all the contents held in the To-Do list as Java bytecodes (step 704). In the written Java bytecode, information indicating the position of the data required for execution and the method (called this offset value) is recorded as a constant constant value of constant_integer_info type in the cp_info array in the constant pool. The The information indicated by the offset value includes the start position of the body part (Code attribute information) of the method in which the virtual instruction sequence is encoded, the start position of the recorded content of the constant pool that needs to be read, and the constant pool to be read -Three of the index of the entry.

図8は、図7のバイトコード生成処理の内容を示すフローチャートである。
図8を参照すると、前処理部110は、まず仮想インストラクションが仮想コンスタント値を取るか否かを判断する(ステップ801)。仮想コンスタント値を取らない場合(ステップ801でNo)、前処理部110は、ランタイム・コンテキストに関するバイトコード「aload 1」を生成する(ステップ804)。
FIG. 8 is a flowchart showing the contents of the bytecode generation process of FIG.
Referring to FIG. 8, the preprocessing unit 110 first determines whether or not the virtual instruction takes a virtual constant value (step 801). When the virtual constant value is not taken (No in Step 801), the preprocessing unit 110 generates byte code “alload 1” related to the runtime context (Step 804).

一方、仮想インストラクションが仮想コンスタント値を取る場合(ステップ801でYes)、前処理部110は、{フィールド,値}の情報をTo−Doリストに追加する(ステップ802)。そして、追加されたフィールドに関するバイトコード「getstatic」を生成した後(ステップ803)、バイトコード「aload 1」を生成する(ステップ804)。   On the other hand, when the virtual instruction takes a virtual constant value (Yes in step 801), the preprocessing unit 110 adds information of {field, value} to the To-Do list (step 802). Then, after the byte code “getstatic” relating to the added field is generated (step 803), the byte code “alload 1” is generated (step 804).

次に、前処理部110は、生成したバイトコードをコンスタント・プールのインデックスにおける予約されている場所に割り当てる(ステップ805)。そして、バイトコード「invokestatic」を生成する(ステップ806)。バイトコード「invokestatic」に付加されるMethodrefコンスタント・プール・エントリのインデックスは、エンコードされた仮想インストラクションの種類に応じて特定されている。そのため、このステップ806で生成されたバイトコードを見れば、実際にMethodrefコンスタント・プール・エントリを読み込んで内容を解読しなくても、仮想インストラクションの内容がわかる。   Next, the preprocessing unit 110 assigns the generated bytecode to a reserved place in the constant pool index (step 805). Then, a bytecode “invokestatic” is generated (step 806). The index of the Methodref constant pool entry added to the bytecode “invokestatic” is specified according to the type of the encoded virtual instruction. Therefore, by looking at the bytecode generated in step 806, the contents of the virtual instruction can be understood without actually reading the Methodref constant pool entry and decoding the contents.

具体的な仮想インストラクションの例を挙げて、図8のバイトコード生成処理をさらに説明する。
PHPのソースコード

echo“Hello World¥n”;

に対し、仮想インストラクションは次のようになる。

PUSH“Hello World^n”
ECHO

この仮想インストラクションを図8に示す手順で処理すると、次のようになる。
The byte code generation processing of FIG. 8 will be further described with a specific example of virtual instructions.
PHP source code

echo “Hello World ¥ n”;

On the other hand, the virtual instruction is as follows.

PUSH “Hello World ^ n”
ECHO

When this virtual instruction is processed according to the procedure shown in FIG.

まず、「PUSH“Hello World^n”」について処理を行うと、ステップ801ではYesとなるので、ステップ802に移行し、

{フィールド,値}={“constVal0”,“Hello World¥n”}

がTo−Doリストに追加される。そして、ステップ803で、バイトコード

getstatic“constVal0”

が生成され、ステップ804で、バイトコード

aload 1

が生成される。
First, if “PUSH“ Hello World ^ n ”” is processed, the result in Step 801 is Yes.

{Field, value} = {“constVal0”, “Hello World \ n”}

Is added to the To-Do list. In step 803, the byte code

getstatic “constVal0”

Is generated, and in step 804, a bytecode is generated.

aload 1

Is generated.

この後、ステップ805で、PUSHのオペコードに対するMethodrefコンスタント・プール・エントリ(VirtualOpcodes.push(PHPValue,Runtime)という情報)のインデックスが得られる。ここでは、仮に「20」とする。そして、ステップ806で、バイトコード

invokestatic 20

が生成される。
Thereafter, in step 805, an index of Methodref constant pool entry (information called VirtualOpcodes.push (PHPValue, Runtime)) for the push opcode is obtained. Here, “20” is assumed. In step 806, the byte code

Invokestatic 20

Is generated.

次に、「ECHO」について処理を行うと、ステップ801ではNoとなるので、直ちにステップ804に移行し、バイトコード

aload 1

が生成される。そして、ステップ805で、ECHOのオペコードに対するMethodrefコンスタント・プール・エントリ(VirtualOpcodes.echo(Runtime)という情報)のインデックスが得られる。ここでは、仮に「30」とする。そして、ステップ806で、バイトコード

invokestatic 30

が生成される。
Next, when processing is performed for “ECHO”, the result in Step 801 is No.

aload 1

Is generated. In step 805, an index of Methodref constant pool entry (information called VirtualOpcodes.echo (Runtime)) for the ECHO opcode is obtained. Here, “30” is assumed. In step 806, the byte code

Invokestatic 30

Is generated.

<実行部の機能>
次に、実行部200の機能を説明する。
本実施形態の実行部200は、バイトコードや仮想バイトコードについて、既に検証が済んでいる場合等、検証を行わなくても良い場合に、不要なコンスタント・プールの解読を省略する。そして、プログラムの実行に必要なコンスタント・プールのエントリとバイトコードを読み込むことで、高速な読み込みが実現される。
<Function of the execution unit>
Next, functions of the execution unit 200 will be described.
The execution unit 200 according to the present embodiment omits unnecessary constant pool decoding when it is not necessary to perform verification such as when bytecode or virtual bytecode has already been verified. By reading the constant pool entries and bytecodes necessary for program execution, high-speed reading is realized.

図9は、バイトコードの検証を行わなくて良い場合における実行部200の処理の流れを示すフローチャートである。
図9を参照すると、実行部200は、まずプログラムの先頭の8バイトをスキップする(ステップ901)。これにより、図3に示したJavaバイトコードのヘッダ301が飛ばされる。
FIG. 9 is a flowchart showing the flow of processing of the execution unit 200 when bytecode verification need not be performed.
Referring to FIG. 9, the execution unit 200 first skips the first 8 bytes of the program (step 901). As a result, the Java byte code header 301 shown in FIG. 3 is skipped.

次に、実行部200は、コンスタント・プール・エントリの個数を読み込み(ステップ902)、さらに、コンスタント・プールに記録されたオフセット値を読み込む(ステップ903)。次に、実行部200は、ステップ903で読み込んだオフセット値を用いて、仮想インストラクションのためのMethodref等の不要なコンスタント・プール・エントリをスキップする(ステップ904)。そして、残りのコンスタント・プール・エントリを読み込んで解読する(ステップ905)。この後、実行部200は、仮想インストラクション列(run())の先頭(実際には、その手前のメソッド情報)までスキップし(ステップ906)、後続する仮想インストラクション列を読み込む(ステップ907)。   Next, the execution unit 200 reads the number of constant pool entries (step 902), and further reads the offset value recorded in the constant pool (step 903). Next, the execution unit 200 skips unnecessary constant pool entries such as Methodref for virtual instructions using the offset value read in Step 903 (Step 904). The remaining constant pool entry is read and decoded (step 905). Thereafter, the execution unit 200 skips to the beginning of the virtual instruction sequence (run ()) (actually, previous method information) (step 906), and reads the subsequent virtual instruction sequence (step 907).

このように、本実施形態では、変換部100により生成されたクラス・ファイルについて、バイトコードの検証を行わなくて良い場合には、実行部200は、クラス・ファイルの全てを読み込んで解読するのではなく、オフセット値を用いて不要な部分を読み飛ばし、必要な部分のみを読み込んで解読する。このため、実行部200による処理の高速化を図ることができる。   As described above, in this embodiment, when it is not necessary to perform bytecode verification on the class file generated by the conversion unit 100, the execution unit 200 reads and decodes all the class files. Rather than skipping unnecessary parts using the offset value, only the necessary parts are read and decoded. Therefore, it is possible to increase the processing speed of the execution unit 200.

以上、本実施形態について説明したが、本発明の技術的範囲は上記実施形態に記載の範囲には限定されない。例えば、上記実施形態では、JavaバイトコードにPHPバイトコードをエンコードしてクラス・ファイルを生成する場合について説明したが、適用される言語はJavaおよびPHPに限定されないことは言うまでもない。第1のバイトコード上に第2のバイトコードがエンコードされる場合を想定すると、第1のバイトコードが、Javaのコンスタント・プールのような、メソッド呼び出しのバイトコードから参照される値を保持するデータ構造を持ち、このデータ構造がクラス・ファイル全体のできるだけ先に読まれる位置(先頭付近)に位置するような言語であれば、本実施形態を適用することができる。その他、上記実施形態に、種々の変更または改良を加えたものも、本発明の技術的範囲に含まれることは、特許請求の範囲の記載から明らかである。   As mentioned above, although this embodiment was described, the technical scope of this invention is not limited to the range as described in the said embodiment. For example, in the above-described embodiment, a case has been described in which a PHP byte code is encoded into a Java byte code to generate a class file. However, it goes without saying that the applied language is not limited to Java and PHP. Assuming that the second byte code is encoded on the first byte code, the first byte code holds a value referenced from the byte code of the method call, such as a Java constant pool. The present embodiment can be applied to any language that has a data structure and this data structure is located at a position (near the top) that is read as early as possible in the entire class file. In addition, it is clear from the description of the scope of the claims that various modifications or improvements added to the above embodiment are also included in the technical scope of the present invention.

本実施形態が適用されるシステムの全体構成を示す図である。It is a figure which shows the whole structure of the system to which this embodiment is applied. 本実施形態のプログラム処理装置を実現するコンピュータのハードウェア構成例を示す図である。It is a figure which shows the hardware structural example of the computer which implement | achieves the program processing apparatus of this embodiment. Javaバイトコードのデータ構造を示す図である。It is a figure which shows the data structure of a Java bytecode. 図3のバイトコードにおけるコンスタント・プールの構成例を示す図である。It is a figure which shows the structural example of the constant pool in the bytecode of FIG. PHPのオペコード(Opcode)の一部を例示する図である。It is a figure which illustrates a part of PHP opcode (Opcode). 図5のオペコードIDに対応して構成された本実施形態によるコンスタント・プールの例を示す図である。It is a figure which shows the example of the constant pool by this embodiment comprised corresponding to the opcode ID of FIG. 本実施形態の変換部による処理の流れを示すフローチャートである。It is a flowchart which shows the flow of the process by the conversion part of this embodiment. 図7のバイトコード生成処理の内容を示すフローチャートである。It is a flowchart which shows the content of the bytecode production | generation process of FIG. バイトコードの検証を行わなくて良い場合における、本実施形態の実行部の処理の流れを示すフローチャートである。It is a flowchart which shows the flow of a process of the execution part of this embodiment in the case where it is not necessary to verify a bytecode.

符号の説明Explanation of symbols

10a…CPU、10c…メイン・メモリ、100…変換部、110…前処理部、120…コード化処理部、200…実行部 10a ... CPU, 10c ... main memory, 100 ... conversion unit, 110 ... preprocessing unit, 120 ... coding processing unit, 200 ... execution unit

Claims (11)

第1の言語のバイトコード上に第2の言語のバイトコードをエンコードして当該第1の言語のバイトコードのクラス・ファイルを生成するシステムにおいて、
前記第2の言語のバイトコードに対する前処理を行う前処理部と、
前処理の結果を元に実際に前記第1の言語のバイトコードを生成して、メソッド呼び出しのバイトコードから参照される値を保持するデータ構造を持つクラス・ファイルを生成するコード化処理部とを備え、
前記前処理部は、
前記第1の言語のバイトコードの処理系が実行可能な形式に書き替えられた前記第2の言語のバイトコードである仮想バイトコードの命令により使用される領域を、一時記憶手段に保持された前記データ構造における当該第2の言語のバイトコードの命令ごとに予め定められた場所に確保し、
前記第2の言語のバイトコードにおける各命令を前記仮想バイトコードに変換して、当該仮想バイトコードを前記一時記憶手段に保持し、
前記コード化処理部は、
前記一時記憶手段に保持された前記データ構造および前記仮想バイトコードを含む前記第1の言語のバイトコードのクラス・ファイルを生成する、
システム。
In a system for encoding a byte code of a second language on a byte code of a first language to generate a class file of the byte code of the first language,
A preprocessing unit for performing preprocessing on the bytecode of the second language;
An encoding processing unit that actually generates a byte code of the first language based on a result of the preprocessing, and generates a class file having a data structure that holds a value referenced from the byte code of the method call; With
The pre-processing unit is
An area used by a virtual bytecode instruction that is a bytecode of the second language that has been rewritten into a format executable by the bytecode processing system of the first language is held in a temporary storage unit Secure in a predetermined place for each byte code instruction of the second language in the data structure;
Converting each instruction in the byte code of the second language into the virtual byte code, and holding the virtual byte code in the temporary storage means;
The encoding processing unit
Generating a bytecode class file of the first language including the data structure held in the temporary storage means and the virtual bytecode;
system.
前記コード化処理部は、前記仮想バイトコードを前記第1の言語のバイトコードのメソッドとしてエンコードする、請求項1に記載のシステム。   The system according to claim 1, wherein the encoding processing unit encodes the virtual bytecode as a method of a bytecode of the first language. 前記コード化処理部は、前記データ構造に、前記仮想バイトコードの実行に必要なデータおよびメソッドの位置を示す情報を記録する、請求項2に記載のシステム。   The system according to claim 2, wherein the encoding processing unit records information indicating a position of data and a method necessary for execution of the virtual bytecode in the data structure. 前記第1の言語のバイトコードはJava(登録商標)バイトコードであり、前記データ構造はJava仮想機械で用いられるコンスタント・プールである、請求項1に記載のシステム。   The system according to claim 1, wherein the byte code of the first language is a Java (registered trademark) byte code, and the data structure is a constant pool used in a Java virtual machine. 前記第2の言語のバイトコードはPHPバイトコードである、請求項4に記載のシステム。   5. The system of claim 4, wherein the second language bytecode is a PHP bytecode. 第1の言語のバイトコード上に第2の言語のバイトコードをエンコードして当該第1の言語のバイトコードのクラス・ファイルを生成し、実行するシステムにおいて、
前記第2の言語のバイトコードに対する前処理を行う前処理部と、
前処理の結果を元に実際に前記第1の言語のバイトコードを生成して、メソッド呼び出しのバイトコードから参照される値を保持するデータ構造を持つクラス・ファイルを生成するコード化処理部と、
前記コード化処理部により生成された前記クラス・ファイルを実行する実行部とを備え、
前記前処理部は、
前記第1の言語のバイトコードの処理系が実行可能な形式に書き替えられた前記第2の言語のバイトコードである仮想バイトコードの命令により使用される領域を、一時記憶手段に保持された前記データ構造における当該第2の言語のバイトコードの命令ごとに予め定められた場所に確保し、
前記第2の言語のバイトコードにおける各命令を前記仮想バイトコードに変換して、当該仮想バイトコードを前記一時記憶手段に保持し、
前記コード化処理部は、
前記一時記憶手段に保持された前記データ構造を含み、前記仮想バイトコードをメソッドとしてエンコードした前記第1の言語のバイトコードのクラス・ファイルを生成する、
システム。
In a system that encodes a byte code of a second language on a byte code of a first language, generates a class file of the byte code of the first language, and executes the class file,
A preprocessing unit for performing preprocessing on the bytecode of the second language;
An encoding processing unit that actually generates a byte code of the first language based on a result of the preprocessing, and generates a class file having a data structure that holds a value referenced from the byte code of the method call; ,
An execution unit that executes the class file generated by the encoding processing unit,
The pre-processing unit is
An area used by a virtual bytecode instruction that is a bytecode of the second language that has been rewritten into a format executable by the bytecode processing system of the first language is held in a temporary storage unit Secure in a predetermined place for each byte code instruction of the second language in the data structure;
Converting each instruction in the byte code of the second language into the virtual byte code, and holding the virtual byte code in the temporary storage means;
The encoding processing unit
Including the data structure held in the temporary storage means, and generating a bytecode class file of the first language in which the virtual bytecode is encoded as a method;
system.
前記実行部は、
前記第2の言語のバイトコードの命令と、予め定められた当該命令により使用される前記データ構造上の場所との対応関係を示す情報を記憶手段に保持し、
前記情報に基づいて、前記データ構造上の場所から前記仮想バイトコードの内容を認識する、請求項6に記載のシステム。
The execution unit is
Holding information indicating a correspondence relationship between the byte code instruction of the second language and a place on the data structure used by the predetermined instruction in a storage unit;
The system according to claim 6, wherein the content of the virtual bytecode is recognized from a location on the data structure based on the information.
前記コード化処理部は、前記データ構造に、前記仮想バイトコードの実行に必要なデータおよびメソッドの位置を示す情報を記録し、
前記実行部は、前記データ構造に記録された、前記データおよび前記メソッドの位置を示す情報に基づき、前記仮想バイトコードの実行に不要な内容の解読を省略して前記クラス・ファイルの解読および実行を行う、請求項7に記載のシステム。
The encoding processing unit records, in the data structure, information indicating the position of data and a method necessary for execution of the virtual bytecode,
The execution unit decodes and executes the class file based on information indicating the position of the data and the method recorded in the data structure, omitting decoding of contents unnecessary for execution of the virtual bytecode. The system according to claim 7, wherein:
Java(登録商標)バイトコードにPHPバイトコードをエンコードして当該Javaバイトコードのクラス・ファイルを生成し、実行するシステムにおいて、
前記PHPバイトコードに対する前処理を行う前処理部と、
前処理の結果を元に実際に前記Javaバイトコードを生成して、クラス・ファイルを生成するコード化処理部と、
前記コード化処理部により生成された前記クラス・ファイルを実行する実行部とを備え、
前記前処理部は、
前記PHPバイトコードを前記Javaバイトコードの処理系が実行可能な形式に書き替えたものである仮想バイトコードの命令により使用される領域を、一時記憶手段に保持されたコンスタント・プールにおける当該PHPバイトコードの命令ごとに予め定められた場所に確保し、
前記PHPバイトコードにおける各命令を前記仮想バイトコードに変換して、当該仮想バイトコードを前記一時記憶手段に保持し、
前記コード化処理部は、
前記一時記憶手段に保持された前記コンスタント・プールを含み、前記仮想バイトコードをメソッドとしてエンコードした前記Javaバイトコードのクラス・ファイルを生成し、
前記コンスタント・プールに、前記仮想バイトコードの実行に必要なデータおよびメソッドの位置を示す情報を記録し、
前記実行部は、
前記PHPバイトコードの命令と、予め定められた当該命令により使用される前記コンスタント・プール上の場所との対応関係を示す情報を記憶手段に保持し、
前記情報に基づいて、前記コンスタント・プール上の場所から前記仮想バイトコードの内容を認識し、
前記コンスタント・プールに記録された、前記データおよび前記メソッドの位置を示す情報に基づき、前記仮想バイトコードの実行に不要な内容の解読を省略して前記クラス・ファイルの解読および実行を行う、
システム。
In a system that encodes a PHP byte code into a Java (registered trademark) byte code, generates a class file of the Java byte code, and executes the class file,
A preprocessing unit for performing preprocessing on the PHP bytecode;
An encoding processing unit that actually generates the Java bytecode based on the result of the preprocessing and generates a class file;
An execution unit that executes the class file generated by the encoding processing unit,
The pre-processing unit is
An area used by a virtual bytecode instruction, which is a rewrite of the PHP bytecode into a format executable by the Java bytecode processor, in the constant pool held in the temporary storage means Secure in a predetermined place for each code instruction,
Converting each instruction in the PHP bytecode into the virtual bytecode, holding the virtual bytecode in the temporary storage means,
The encoding processing unit
Including the constant pool held in the temporary storage means, and generating a class file of the Java bytecode in which the virtual bytecode is encoded as a method;
In the constant pool, record data indicating the position of data and method necessary for execution of the virtual bytecode,
The execution unit is
Information indicating the correspondence between the instruction of the PHP bytecode and the location on the constant pool used by the instruction is determined in a storage unit;
Based on the information, the content of the virtual bytecode is recognized from a location on the constant pool,
Based on the data and the information indicating the position of the method recorded in the constant pool, the decryption and execution of the class file is performed by omitting the decryption of contents unnecessary for the execution of the virtual bytecode.
system.
第1の言語のバイトコード上に第2の言語のバイトコードをエンコードして当該第1の言語のバイトコードのクラス・ファイルを生成するプログラム変換方法において、
前記第1の言語のバイトコードのクラス・ファイルは、メソッド呼び出しのバイトコードから参照される値を保持するデータ構造を持ち、
前記第1の言語のバイトコードの処理系が実行可能な形式に書き替えられた前記第2の言語のバイトコードである仮想バイトコードの命令により使用される領域を、一時記憶手段に保持された前記データ構造における当該第2の言語のバイトコードの命令ごとに予め定められた場所に確保するステップと、
前記第2の言語のバイトコードにおける各命令を前記仮想バイトコードに変換して、当該仮想バイトコードを前記一時記憶手段に保持させるステップと、
前記一時記憶手段に保持された前記データ構造を含み、前記仮想バイトコードをメソッドとしてエンコードした前記第1の言語のバイトコードのクラス・ファイルを生成するステップと、
を含む、方法。
In a program conversion method for encoding a byte code of a second language on a byte code of a first language to generate a class file of the byte code of the first language,
The bytecode class file of the first language has a data structure that holds a value referenced from the bytecode of the method call,
An area used by a virtual bytecode instruction that is a bytecode of the second language that has been rewritten into a format executable by the bytecode processing system of the first language is held in a temporary storage unit Securing at a predetermined location for each byte code instruction of the second language in the data structure;
Converting each instruction in the byte code of the second language into the virtual byte code, and holding the virtual byte code in the temporary storage means;
Generating a bytecode class file of the first language including the data structure held in the temporary storage means and encoding the virtual bytecode as a method;
Including a method.
コンピュータに、
第1の言語のバイトコード上に第2の言語のバイトコードをエンコードし、メソッド呼び出しのバイトコードから参照される値を保持するデータ構造を持つ当該第1の言語のバイトコードのクラス・ファイルを生成するための下記の機能であって、
前記第1の言語のバイトコードの処理系が実行可能な形式に書き替えられた前記第2の言語のバイトコードである仮想バイトコードの命令により使用される領域を、一時記憶手段に保持された前記データ構造における当該第2の言語のバイトコードの命令ごとに予め定められた場所に確保する機能と、
前記第2の言語のバイトコードにおける各命令を前記仮想バイトコードに変換して、当該仮想バイトコードを前記一時記憶手段に保持する機能と、
前記一時記憶手段に保持された前記データ構造および前記仮想バイトコードを含む前記第1の言語のバイトコードのクラス・ファイルを生成する機能と、
を実現させるためのプログラム。
On the computer,
A bytecode class file of the first language having a data structure that encodes the bytecode of the second language on the bytecode of the first language and holds a value referenced from the bytecode of the method call The following functions for generating:
An area used by a virtual bytecode instruction that is a bytecode of the second language that has been rewritten into a format executable by the bytecode processing system of the first language is held in a temporary storage unit A function to secure a predetermined place for each byte code instruction of the second language in the data structure;
A function of converting each instruction in the byte code of the second language into the virtual byte code and holding the virtual byte code in the temporary storage means;
A function of generating a bytecode class file of the first language including the data structure held in the temporary storage means and the virtual bytecode;
A program to realize
JP2008186452A 2008-07-17 2008-07-17 Program conversion system Expired - Fee Related JP5090279B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008186452A JP5090279B2 (en) 2008-07-17 2008-07-17 Program conversion system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008186452A JP5090279B2 (en) 2008-07-17 2008-07-17 Program conversion system

Publications (2)

Publication Number Publication Date
JP2010026728A JP2010026728A (en) 2010-02-04
JP5090279B2 true JP5090279B2 (en) 2012-12-05

Family

ID=41732514

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008186452A Expired - Fee Related JP5090279B2 (en) 2008-07-17 2008-07-17 Program conversion system

Country Status (1)

Country Link
JP (1) JP5090279B2 (en)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110990019B (en) * 2019-11-20 2023-05-02 腾讯音乐娱乐科技(深圳)有限公司 Java class analysis method and device, storage medium and electronic equipment

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0293947A (en) * 1988-09-30 1990-04-04 Fuji Xerox Co Ltd Electronic computer

Also Published As

Publication number Publication date
JP2010026728A (en) 2010-02-04

Similar Documents

Publication Publication Date Title
KR101081090B1 (en) Register-based instruction optimization for facilitating efficient emulation of an instruction stream
US7203941B2 (en) Associating a native resource with an application
JP5415557B2 (en) User script code conversion for debugging
KR20180136976A (en) Apparatus and method for performing operations on qualification metadata
US10635823B2 (en) Compiling techniques for hardening software programs against branching programming exploits
US7406684B2 (en) Compiler, dynamic compiler, and replay compiler
JP4042280B2 (en) Execution program generation method and execution program generation apparatus, execution program execution method, and computer-readable program storage medium
EP1347379A2 (en) On demand, network accessible runtime compile server
US6463521B1 (en) Opcode numbering for meta-data encoding
JP2007522584A (en) Method and apparatus for optimizing application program interface in virtual machine environment
US8341615B2 (en) Single instruction multiple data (SIMD) code generation for parallel loops using versioning and scheduling
KR19990036883A (en) Mixed execution stack and implementation method and apparatus thereof
US20120159463A1 (en) Method and system for creating, applying, and removing a software fix
JP4806060B2 (en) Compiler program, compiling method, and computer system
WO2024045379A1 (en) Compiling method, compiler, and wasm virtual machine
US8230407B2 (en) Apparatus and method for accelerating Java translation
WO2012010419A1 (en) A string cache file for optimizing memory usage in a java virtual machine
JP6073392B2 (en) System and method for evaluating data values as instructions
JP2005529383A (en) Time-multiplexed speculative multithreading to support single-threaded applications
JP2004303114A (en) Interpreter and native code execution method
JP5536593B2 (en) Optimization device, optimization method, and compiler program
JP5090279B2 (en) Program conversion system
JP2004259007A (en) Compiler device, compiler program, and storage medium
JP5387089B2 (en) Program and program execution device
US9720660B2 (en) Binary interface instrumentation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110615

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120828

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20120828

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120912

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150921

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees