JP5818695B2 - コード変換方法、プログラム及びシステム - Google Patents

コード変換方法、プログラム及びシステム Download PDF

Info

Publication number
JP5818695B2
JP5818695B2 JP2012000030A JP2012000030A JP5818695B2 JP 5818695 B2 JP5818695 B2 JP 5818695B2 JP 2012000030 A JP2012000030 A JP 2012000030A JP 2012000030 A JP2012000030 A JP 2012000030A JP 5818695 B2 JP5818695 B2 JP 5818695B2
Authority
JP
Japan
Prior art keywords
programming language
type
code
java
source code
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
JP2012000030A
Other languages
English (en)
Other versions
JP2013140470A (ja
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 JP2012000030A priority Critical patent/JP5818695B2/ja
Priority to US13/718,325 priority patent/US8984497B2/en
Publication of JP2013140470A publication Critical patent/JP2013140470A/ja
Application granted granted Critical
Publication of JP5818695B2 publication Critical patent/JP5818695B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source

Description

この発明は、1つのプログラミング言語で書かれたコードを、別のプログラミング言語のコードに変換する技法に関し、より詳しくは、変換後のコードのディスパッチ、すなわち、オペレーティングシステムに実行させることの高速化と安定化に関するものである。
プログラミング言語において、総称型(generics)の実装には、型具体化(reification)を基本とするものと、型消去(erasure)を基本とするものがある。そこで、型具体化とは、総称型を型パラメータの値に特化した専用の型にコンパイルする手法である。これを採用する代表的な言語としてC++やX10がある。なお、X10の特徴や言語仕様等については、http://x10-lang.org/などを参照されたい。
型消去とは、総称型を型パラメータを取り除いた共通の型にコンパイルする手法である。これを採用する代表的な言語はJava(R)やScalaである。型消去では型パラメータは、コンパイル時にチェックされた後取り除かれるため、実行時に型パラメータの値を参照することができない。したがって型パラメータの実行時の値(実行時型情報)に依存するディスパッチ等の機能を実装することが出来ず、記述力は型具体化のサブセットである。したがって型具体化に基づく総称型を採用する言語を、型消去に基づくJava(R)の総称型に変換するには、何らかの形で実行時型情報を表現する必要がある。
ディスパッチに関しては、通常のメソッドについては、型情報をメソッド名にエンコードする名前修飾(name mangling)手法が用いられる。これはJava(R)のディスパッチが使えるため、高速なディスパッチが可能である。また変換対象メソッドの引数の型だけで変換結果が決まるため、他の変更の影響を受けない安定な変換が可能である。
一方、コンストラクタは、名前を自由に変えることができないため、型情報をコンストラクタの引数にエンコードする引数修飾(parameter mangling)手法が用いられる。
従来より、X10のソースコードをJava(R)のソースコードあるいはバイトコードに変換してコンパイルすることが行われている。このとき従来技術では、X10で、変換対象コンストラクタの、同じクラスのコンストラクタ間の実装順序(0番目,1番目,…)を、通常コンストラクタの引数に現れない型の多次元配列の次元数にエンコードし、その型のダミー引数を追加している。これはJava(R)のディスパッチが使えるため高速なディスパッチが可能である。しかしながらコンストラクタの実装順序という相対的な値に基づくため、同じクラスの他のコンストラクタの追加・削除により変換結果が変わる不安定性がある。これはコンパイル済ライブラリをバイナリ形式で提供したり、X10コンパイラが生成したJava(R)コードを呼び出す外部(非X10)Javaコードを記述したりする際に問題となる。
クラスのコンストラクタの処理に関して、下記のような従来技術が知られている。
特開平9−190349号公報は、プログラムの実行速度を向上させるために、C++で記述されたソースプログラムの最適化が可能なクラスを決定し、そのクラスのメンバ関数を中間表現に翻訳した後、C++で記述されたコード生成ルーチンを生成し、生成されたコード生成ルーチンをコンストラクタに埋め込み、全てのクラスの最適化が終了したか否かを判別し、終了したと判別した場合は処理を完了することを開示する。
2000−250755号公報は、アプリケーションソースファイルを解析して、適応クラスを識別するための所定のキーワードを検出し、適応クラスが適応ソフトウェアメソッドを含み、適応クラスの第1のインスタンスを生成するときに、適応ソフトウェアメソッドの多数のインプリメンテーションの1つを動的に選択するセレクタを生成させる第1の命令セットをアプリケーションソースファイルに挿入することによって、適応クラスのコンストラクタを拡張することを開示する。
しかし、これらの従来技術は、型具体化を基本とするプログラミング言語で書かれたコードを、型消去を採用するプログラミング言語のコードに変換した際のディスパッチの不安定さに対する解決を与えるものではない。
WebSphere(R) eXtreme Scale (ftp://public.dhe.ibm.com/software/webserver/appserv/library/v71/711_prog_pdf.pdf) では、コンストラクタの定義順(0から始まる連続の整数)と等しい数のダミー引数を追加する引数修飾の技法が採用されている。しかし、その技法においては、コンストラクタの定義順は相対値であり、他のコンストラクタの追加順序により変わりうるため、安定なディスパッチが出来ないという問題がある。また、複数のダミー引数を用いるのはスタックを無駄にし効率が悪い。
また、既存のX10では、コンストラクタの定義順(0から始まる連続の整数)と等しい次元の多次元配列型のダミー引数を追加する引数修飾技法が採用されている。この場合、コンストラクタの定義順は相対値であり、他のコンストラクタの追加・削除により変わりえるため、やはり安定なディスパッチが出来ないという問題がある。
さらに、X10における別の既存技法として、実行時型情報を引数として渡し、その値に基づきセルフ・ディスパッチする技法があるが、この場合、JVMのディスパッチが使えないので、ディスパッチが遅くなる。
特開平9−190349号公報 2000−250755号公報
http://x10-lang.org/ ftp://public.dhe.ibm.com/software/webserver/appserv/library/v71/711_prog_pdf.pdf
従って、この発明の目的は、型具体化を基本とするプログラミング言語で書かれたコードを、型消去を採用するプログラミング言語のコードに変換した結果のコードのディスパッチの高速性と安定性を達成する技法を提供することにある。
この発明は、上記課題を解決するためになされたものであり、型具体化を基本とする第1のプログラミング言語の通常メソッドの名前修飾(name mangling)のためのサフィックスを名前とする合成(synthetic)クラスを追加し、コンストラクタ定義に合成クラスの型のダミー引数を追加し、コンストラクタ呼び出しにダミー引数の型に適合する適当な値(通常はnull)を追加して、型消去を採用する第2のプログラミング言語のコードに変換する機能をもつプログラムによって実現される。
型具体化を基本とする第1のプログラミング言語とは好適にはX10であり、型消去を採用する第2のプログラミング言語とは好適にはJava(R)である。
この発明によれば、ダミー引数の型に実行時情報をエンコードすることにより、Java(R)のような型消去を採用する言語処理系の高速なディスパッチ機構を有利に利用することができる。
また、名前修飾のためのサフィックスを名前とする合成クラスは、個々のメソッドを他のメソッドとは無関係に修飾(mangling)することを可能ならしめ、もって安定なディスパッチを実現する。
本発明を実施するためのコンピュータ・システムのハードウェアの一例のブロック図を示す図である。 本発明を実施するための一実施例に係る機能構成のブロック図を示す図である。 本発明の処理のフローチャートを示す図である。
以下、図面に従って、本発明の実施例を説明する。これらの実施例は、本発明の好適な態様を説明するためのものであり、発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断わらない限り、同一符号は、同一の対象を指すものとする。
図1を参照すると、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータ・ハードウェアのブロック図が示されている。図1において、システム・バス102には、CPU104と、主記憶(RAM)106と、ハードディスク・ドライブ(HDD)108と、キーボード110と、マウス112と、ディスプレイ114が接続されている。CPU104は、好適には、32ビットまたは64ビットのアーキテクチャに基づくものであり、例えば、インテル社のPentium(商標)4、インテル社のCore(商標) 2 DUO、AMD社のAthlon(商標)などを使用することができる。主記憶106は、好適には、2GB以上の容量、より好ましくは、4GB以上の容量をもつものである。
ハードディスク・ドライブ108には、オペレーティング・システムが、格納されている。オペレーティング・システムは、Linux(商標)、マイクロソフト社のWindows(商標) 7、Windows XP(商標)、Windows(商標)2003サーバ、アップルコンピュータのMac OS(商標)などの、CPU104に適合する任意のものでよい。
ハードディスク・ドライブ108にはまた好適には、Apacheなどの、Webサーバとしてシステムを動作させるためのプログラムが保存され、システムの起動時に、主記憶106にロードされる。
ハードディスク・ドライブ108にはさらに、Java(R)仮想マシン(JVM)を実現するためのJava(R) Runtime Environmentプログラムが保存され、システムの起動時に、主記憶106にロードされる。
ハードディスク・ドライブ108にはさらに、図2に関連して後述するX10のソースコード202、X10のソースコードの構文解析ルーチン204、Java(R)コード生成ルーチン208、Java(R)コンパイラ212、Java(R)コンパイラ212によって利用される、Java(R)用X10ランタイム・モジュール214などが、保存されている。これらのルーチンは、好適にはJava(R)で書かれて、Java(R)バイトコードとして保存され、JVM218上で動作する。
キーボード110及びマウス112は、オペレーティング・システムが提供するグラフィック・ユーザ・インターフェースに従い、ディスプレイ114に表示されたアイコン、タスクバー、テキストボックスなどのグラフィック・オブジェクトを操作するために使用される。
ディスプレイ114は、これには限定されないが、好適には、1024×768以上の解像度をもち、32ビットtrue colorのLCDモニタである。LCDモニタは、図示しないが、コンパイルすべきX10ソースコードのファイルを選択したり、キーボード110やマウス112を使ってコンパイル操作をするためのメニューなどを表示するために使用される。
通信インターフェース116は、好適には、イーサネット(R)プロトコルにより、ネットワークと接続されている。通信インターフェース116は、クライアント・コンピュータ(図示しない)からApacheが提供する機能により、TCP/IPなどの通信プロトコルに従い、処理リクエストを受け取り、あるいは処理結果を、クライアント・コンピュータ(図示しない)に返す。
図2は、本発明を実施するための一実施例に係る機能構成のブロック図を示す図である。構文解析ルーチン204は、X10のソースコード202を読んで、X10抽象構文木206に変換する。X10の言語仕様については、http://x10-lang.org/などを参照されたい。また、ソースコードから抽象構文木を作成する技法については、Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman, "Compilers: Principles, Techniques, and Tools",Addision Wesley Publishing Company, 1986、あるいは、Andrew W. Appel, "Modern Compiler Implementation", Cambridge University Press, 1998などに記載されており、発明の要旨ではないので、ここでは説明を省略する。ここで抽象構文木のノードに含まれる内容で注目されるのは、X10のソースコードにおけるコンストラクタ定義、及びコンストラクタ呼び出しである。
生成されたX10抽象構文木206は、好適には、ハードディスク・ドライブ108に保存される。Java(R)コード生成ルーチン208は、本発明の機能を実装するものであり、X10抽象構文木206のデータを読み取り、Java(R)ソースコード210を生成する。Java(R)コード生成ルーチン208の、本発明に関連する機能については、図3のフローチャートを参照して、後で詳細に説明する。
Java(R)コード生成ルーチン208によって生成されたJava(R)ソースコード210は、好適には、ハードディスク・ドライブ108に保存され、Java(R)コンパイラ212が、Java(R)用X10ランタイム・ルーチン214を参照しつつ、Java(R)バイトコード216を生成する。Java(R)バイトコード216は、好適には主記憶106にロードされるが、ハードディスク・ドライブ108に保存されてもよい。生成されたJava(R)バイトコード216は、JVM218上で実行される。
次に、Java(R)コード生成ルーチン208の、本発明に関連する機能について、図3のフローチャートを参照して説明する。図3において、Java(R)コード生成ルーチン208は、ステップ302で、X10抽象構文木の最初のノードを訪問する。
ステップ304で、Java(R)コード生成ルーチン208は、訪問したノードが、コンストラクタ定義かどうか判断する。
下記は、X10ソースコードの例の一部を示す。
class C[T, U] {
def this(a:U) {} // ctor id = 0
def this() {} // ctor id = -1
def this(a:Any) {} // ctor id = -1
def this(a:T) {} // ctor id = 1
}
new C[String,Double](12.3);
new C[String,Double](“abc”);
ここでコンストラクタ定義のノードとは、def this ...に対応するノードである。Java(R)コード生成ルーチン208は、コンストラクタ定義であると判断すると、ステップ306で、修飾(mangling)を要するかどうか判断する。修飾を要するとは、注目するメソッドの引数が型パラメータを持つということである。修飾を要するなら、Java(R)コード生成ルーチン208は、ステップ308で名前修飾のためのサフィックスを得る。ここでサフィックスとは、例えば__0C$$Uのような値である。
Java(R)コード生成ルーチン208は、ステップ310で、サフィックスと同じ名前の合成クラスを生成する。これは例えば、下記のようなものである。
abstract static class __0C$$U {}
Java(R)コード生成ルーチン208は、ステップ312で、合成クラスの型のダミー引数をもつコンストラクタを生成する。これは例えば、下記のようなステートメントである。
C(Type T, Type U, U a, __0C$$U dummy) {}
ステップ306に戻って、Java(R)コード生成ルーチン208は、修飾を要さないと判断すると、ステップ314で単にコンストラクタを生成する。
ステップ304に戻って、コンストラクタ定義でないと判断すると、Java(R)コード生成ルーチン208は、ステップ316で、コンストラクタ呼び出しかどうか判断する。ここで、コンストラクタ呼び出しとは、上記のX10のソースコードでは、下記のようなステートメントである。
new C[String,Double](12.3);
コンストラクタ呼び出しであると判断すると、Java(R)コード生成ルーチン208は、ステップ318で、修飾を要するかどうか判断する。Java(R)コード生成ルーチン208は、修飾を要すると判断すると、ステップ320で、合成クラスの型のダミー引数をもつnewを含むステートメントを生成する。ここで、合成クラスの型のダミー引数をもつnewを含むステートメントとは、例えば以下のようなステートメントである。
new C<String,Double>(Types.STRING, Types.DOUBLE, 12.3, (C.__0C$$U) null);
一方、ステップ318で、修飾を要さらないと判断すると、Java(R)コード生成ルーチン208はステップ322で単にnewを含むステートメントを生成する。
ステップ316で、コンストラクタ呼び出しでないなら、単にステップ318、320あるいは322をスキップする。
こうして処理はステップ324に至り、そこで、Java(R)コード生成ルーチン208は、すべてのノードを訪問したかどうか判断する。なお、ステップ324に至るまでに、Java(R)コード生成ルーチン208は本発明に直接関係ない様々の処理を含むが、ここでは便宜上説明を省略する。
ステップ324で、Java(R)コード生成ルーチン208がすべてのノードを訪問したと判断すると、処理を終了する。
ステップ324で、すべてのノードをまだ訪問していないと判断すると、Java(R)コード生成ルーチン208はステップ326で次のノードを訪問して、ステップ304に戻る。
次に、具体的なX10ソースコードの変換例を示す。上記のX10ソースコードを再掲する。
class C[T, U] {
def this(a:U) {} // ctor id = 0
def this() {} // ctor id = -1
def this(a:Any) {} // ctor id = -1
def this(a:T) {} // ctor id = 1
}
new C[String,Double](12.3);
new C[String,Double](“abc”);
従来技術では、このソースコードが、次のようなJava(R)コードに変換される。
class C<T, U> {
C(Type T, Type U, U a, Class dummy) {}
C(Type T, Type U) {}
C(Type T, Type U, Object a) {}
C(Type T, Type U, T a, Class[] dummy) {}
}
new C<String,Double>(Types.STRING, Types.DOUBLE, 12.3, (Class) null);
new C<String,Double>(Types.STRING, Types.DOUBLE, “abc”, (Class[]) null);
この場合、コンストラクタの定義順は相対値であり、他のコンストラクタの追加・削除により変わりえるため、やはり安定なディスパッチが出来ないという問題が生じた。
一方、この発明によれば、次のようなJava(R)コードに変換される。
class C<T, U> {
abstract static class __0C$$U {}
abstract static class __0C$$T {}
C(Type T, Type U, U a, __0C$$U dummy) {}
C(Type T, Type U) {}
C(Type T, Type U, Object a) {}
C(Type T, Type U, T a, __0C$$T dummy) {}
}
new C<String,Double>(Types.STRING, Types.DOUBLE, 12.3, (C.__0C$$U) null);
new C<String,Double>(Types.STRING, Types.DOUBLE, “abc”, (C.__0C$$T) null);
このような技術によれば、個々のメソッドを他のメソッドとは無関係に修飾できるので、安定な修飾が可能となる。
以上、X10のソースコードを、Java(R)のソースコードに変換する処理の実施例を説明してきたが、本発明はこの特定の実施例に限定されず、様々な変形例を考えることができる。例えば、X10のソースコードを、一旦Java(R)のソースコードに変換することなく、直接Java(R)のバイトコードに変換してもよい。
また、ソース言語はX10に限らず、静的型付け言語のうち型具体化に基づく総称型をサポートする任意のプログラミング言語でよく、そのような条件を満たすプログラミング言語として、C++、C#がある。
さらに、ターゲットの言語は、Java(R)に限らず、Scalaなど、型消去に基づく総称型をサポートする任意のプログラミング言語を使用することができる。
104・・・CPU
106・・・主記憶
108・・・ハードディスク・ドライブ
204・・・構文解析ルーチン
206・・・Javaコード生成ルーチン

Claims (15)

  1. コンピュータの処理により、第1のプログラミング言語のソースコードを、第2のプログラミング言語のコードに変換する方法であって、
    前記第1のプログラミング言語のソースコードを用意するステップと、
    前記第1のプログラミング言語のソースコードを走査して、該ソースコードにおける通常メソッドの名前修飾のためのサフィックスを名前とする合成クラスを追加するステップと、
    コンストラクタ定義に前記合成クラスの型のダミー引数を追加するステップと、
    コンストラクタ呼び出しに前記ダミー引数の型に適合する適当な値を追加するステップと、
    前記追加した結果に基づき、前記第2のプログラミング言語のコードに変換して生成するステップを有する、
    方法。
  2. 前記第1のプログラミング言語が型具体化を基本とするプログラミング言語であり、前記第2のプログラミング言語が型消去を採用するプログラミング言語である、請求項1に記載の方法。
  3. 前記第1のプログラミング言語がX10であり、前記第2のプログラミング言語がJavaであり、前記第2のプログラミング言語のコードがJavaバイトコードである、請求項2に記載の方法。
  4. 前記第1のプログラミング言語がX10であり、前記第2のプログラミング言語がJavaであり、前記第2のプログラミング言語のコードがJavaソースコードである、請求項1に記載の方法。
  5. 前記ダミー引数の型に適合する適当な値がnullである、請求項1に記載の方法。
  6. コンピュータの処理により、第1のプログラミング言語のソースコードを、第2のプログラミング言語のコードに変換するプログラムであって、
    前記コンピュータに、
    前記第1のプログラミング言語のソースコードを用意するステップと、
    前記第1のプログラミング言語のソースコードを走査して、該ソースコードにおける通常メソッドの名前修飾のためのサフィックスを名前とする合成クラスを追加するステップと、
    コンストラクタ定義に前記合成クラスの型のダミー引数を追加するステップと、
    コンストラクタ呼び出しに前記ダミー引数の型に適合する適当な値を追加するステップと、
    前記追加した結果に基づき、前記第2のプログラミング言語のコードに変換して生成するステップを実行させる、
    プログラム。
  7. 前記第1のプログラミング言語が型具体化を基本とするプログラミング言語であり、前記第2のプログラミング言語が型消去を採用するプログラミング言語である、請求項6に記載のプログラム。
  8. 前記第1のプログラミング言語がX10であり、前記第2のプログラミング言語がJavaであり、前記第2のプログラミング言語のコードがJavaバイトコードである、請求項7に記載のプログラム。
  9. 前記第1のプログラミング言語がX10であり、前記第2のプログラミング言語がJavaであり、前記第2のプログラミング言語のコードがJavaソースコードである、請求項6に記載のプログラム。
  10. 前記ダミー引数の型に適合する適当な値がnullである、請求項6に記載のプログラム。
  11. コンピュータの処理により、第1のプログラミング言語のソースコードを、第2のプログラミング言語のコードに変換するシステムであって、
    前記第1のプログラミング言語のソースコードを用意する手段と、
    前記第1のプログラミング言語のソースコードを走査して、該ソースコードにおける通常メソッドの名前修飾のためのサフィックスを名前とする合成クラスを追加する手段と、
    コンストラクタ定義に前記合成クラスの型のダミー引数を追加する手段と、
    コンストラクタ呼び出しに前記ダミー引数の型に適合する適当な値を追加する手段と、
    前記追加した結果に基づき、前記第2のプログラミング言語のコードに変換して生成する手段を有する、
    システム。
  12. 前記第1のプログラミング言語が型具体化を基本とするプログラミング言語であり、前記第2のプログラミング言語が型消去を採用するプログラミング言語である、請求項11に記載のシステム。
  13. 前記第1のプログラミング言語がX10であり、前記第2のプログラミング言語がJavaであり、前記第2のプログラミング言語のコードがJavaバイトコードである、請求項12に記載のシステム。
  14. 前記第1のプログラミング言語がX10であり、前記第2のプログラミング言語がJavaであり、前記第2のプログラミング言語のコードがJavaソースコードである、請求項11に記載のシステム。
  15. 前記ダミー引数の型に適合する適当な値がnullである、請求項11に記載のシステム。
JP2012000030A 2012-01-04 2012-01-04 コード変換方法、プログラム及びシステム Expired - Fee Related JP5818695B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012000030A JP5818695B2 (ja) 2012-01-04 2012-01-04 コード変換方法、プログラム及びシステム
US13/718,325 US8984497B2 (en) 2012-01-04 2012-12-18 Source code converting, method program, and systems for first programming language to a code in a second programming language

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012000030A JP5818695B2 (ja) 2012-01-04 2012-01-04 コード変換方法、プログラム及びシステム

Publications (2)

Publication Number Publication Date
JP2013140470A JP2013140470A (ja) 2013-07-18
JP5818695B2 true JP5818695B2 (ja) 2015-11-18

Family

ID=48696028

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012000030A Expired - Fee Related JP5818695B2 (ja) 2012-01-04 2012-01-04 コード変換方法、プログラム及びシステム

Country Status (2)

Country Link
US (1) US8984497B2 (ja)
JP (1) JP5818695B2 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9710243B2 (en) * 2013-11-07 2017-07-18 Eagle Legacy Modernization, LLC Parser that uses a reflection technique to build a program semantic tree
JP6409638B2 (ja) 2015-03-20 2018-10-24 富士通株式会社 コンパイラ、コンパイル装置、および、コンパイル方法
US9459848B1 (en) * 2015-05-29 2016-10-04 International Business Machines Corporation Obtaining correct compile results by absorbing mismatches between data types representations
US10275226B2 (en) * 2015-10-23 2019-04-30 Oracle International Corporation Structural representation of generic type variable in a nominally typed virtual machine
US10255170B2 (en) 2016-12-19 2019-04-09 International Business Machines Corporation On-demand codeset converter generation
US10459829B2 (en) * 2017-06-07 2019-10-29 M/S. Cigniti Technologies Limited Overall test tool migration pipeline
US10481881B2 (en) 2017-06-22 2019-11-19 Archeo Futurus, Inc. Mapping a computer code to wires and gates
WO2018236384A1 (en) * 2017-06-22 2018-12-27 Archeo Futurus, Inc. COMPILATION AND OPTIMIZATION OF A COMPUTER CODE BY MINIMIZING A NUMBER OF STATES IN A FINAL MACHINE CORRESPONDING TO THE COMPUTER CODE
US9996328B1 (en) 2017-06-22 2018-06-12 Archeo Futurus, Inc. Compiling and optimizing a computer code by minimizing a number of states in a finite machine corresponding to the computer code
US10846059B2 (en) 2019-02-05 2020-11-24 Simply Inspired Software, Inc. Automated generation of software bindings
CN110134707A (zh) * 2019-04-12 2019-08-16 平安普惠企业管理有限公司 一种数据查询方法、装置、电子设备及存储介质
US11288062B2 (en) * 2019-12-11 2022-03-29 Sap Se Automatic source code refactoring

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4374408A (en) * 1971-06-16 1983-02-15 Burroughs Corporation Multi-pass system and method for source to source code translation
US6721941B1 (en) * 1996-08-27 2004-04-13 Compuware Corporation Collection of timing and coverage data through a debugging interface
MY126363A (en) * 1996-10-25 2006-09-29 Gemalto Sa Using a high level programming language with a microcontroller
US5920720A (en) * 1997-02-25 1999-07-06 Microsoft Corporation Efficient computer based virtual machine object structure
US6195792B1 (en) * 1998-02-19 2001-02-27 Nortel Networks Limited Software upgrades by conversion automation
US6654950B1 (en) * 1999-08-24 2003-11-25 Bae Systems Mission Solutions Inc. Software rehosting system and method
EP1174791B1 (en) * 2000-07-10 2017-09-27 Microsoft Technology Licensing, LLC Unified data type system and method
US6662359B1 (en) * 2000-07-20 2003-12-09 International Business Machines Corporation System and method for injecting hooks into Java classes to handle exception and finalization processing
GB0029115D0 (en) * 2000-11-29 2001-01-10 Sgs Thomson Microelectronics Assembling an object code module
US7406682B2 (en) * 2001-03-26 2008-07-29 Emc Corporation Translator-compiler for converting legacy management software
US7992140B2 (en) * 2005-07-29 2011-08-02 Microsoft Corporation Compiler supporting programs as data objects
US7481361B2 (en) * 2005-09-29 2009-01-27 International Business Machines Corporation Method and system for identifying unsafe synthetic transactions and modifying parameters for automated playback
WO2008068519A1 (en) * 2006-10-02 2008-06-12 Transitive Limited Computer system and method of adapting a computer system to support a register window architecture
US8527946B2 (en) * 2007-03-06 2013-09-03 International Business Machines Corporation Declarative object identity using relation types
US8601453B2 (en) * 2010-09-19 2013-12-03 Micro Focus (Us), Inc. COBOL to bytecode translation

Also Published As

Publication number Publication date
US20130174131A1 (en) 2013-07-04
US8984497B2 (en) 2015-03-17
JP2013140470A (ja) 2013-07-18

Similar Documents

Publication Publication Date Title
JP5818695B2 (ja) コード変換方法、プログラム及びシステム
JP5466601B2 (ja) コード生成方法、システム及びプログラム
JP4183399B2 (ja) 複数言語のコンパイル方法及びシステム
EP0718760B1 (en) Method and apparatus for generating platform-standard object files containing machine-independent code
US8245210B2 (en) Compile-time context for dynamically bound operations
US9043768B2 (en) System and method for efficient compilation and invocation of function type calls
US7478366B2 (en) Debugger and method for debugging computer programs across multiple programming languages
CN110149800B (zh) 一种用于处理与源程序的源代码相关联的抽象语法树的装置
US9043765B2 (en) Simultaneously targeting multiple homogeneous and heterogeneous runtime environments
JP4562918B2 (ja) インタプリティブ・ランタイム環境のためのコンパイル・プログラムの生成
US10209968B2 (en) Application compiling
JP4806060B2 (ja) コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム
US20100293534A1 (en) Use of vectorization instruction sets
US20090328016A1 (en) Generalized expression trees
US9134973B2 (en) Dynamic compiling and loading at runtime
KR102156371B1 (ko) 네이티브 빌드 기반의 임베디드 소프트웨어 개발 환경을 지원하기 위한 임베디드 소프트웨어 개발 도구 제공 방법 및 장치
EP2945057B1 (en) Process execution method and information processing apparatus
JP5496792B2 (ja) コード変換プログラム、方法及びシステム
CN111913741B (zh) 对象拦截方法、装置、介质及电子设备
US11429358B2 (en) Representing asynchronous state machine in intermediate code
CN113568678A (zh) 一种动态加载资源的方法、装置及电子设备
JP5950288B2 (ja) プログラミング言語の処理系を実現する装置及び方法
US20110321009A1 (en) Implementing encryption via aspect oriented programming
US9720660B2 (en) Binary interface instrumentation
Mohan Comparative Analysis Of JavaScript And WebAssembly In The Browser Environment

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140807

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150825

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: 20150908

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150929

R150 Certificate of patent or registration of utility model

Ref document number: 5818695

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees