JP7060801B2 - 情報処理装置、コンパイラプログラム及びコンパイル方法 - Google Patents

情報処理装置、コンパイラプログラム及びコンパイル方法 Download PDF

Info

Publication number
JP7060801B2
JP7060801B2 JP2018108560A JP2018108560A JP7060801B2 JP 7060801 B2 JP7060801 B2 JP 7060801B2 JP 2018108560 A JP2018108560 A JP 2018108560A JP 2018108560 A JP2018108560 A JP 2018108560A JP 7060801 B2 JP7060801 B2 JP 7060801B2
Authority
JP
Japan
Prior art keywords
function
source code
functions
determined
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.)
Active
Application number
JP2018108560A
Other languages
English (en)
Other versions
JP2019212100A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2018108560A priority Critical patent/JP7060801B2/ja
Publication of JP2019212100A publication Critical patent/JP2019212100A/ja
Application granted granted Critical
Publication of JP7060801B2 publication Critical patent/JP7060801B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、情報処理装置、コンパイラプログラム及びコンパイル方法に関する。
例えば、C++言語によって記述されたソースコードのコンパイルを行うコンパイラ(以下、コンパイラプログラムとも呼ぶ)は、指定されたソースコードを入力とすることによってオブジェクトコードの生成を行う。具体的に、コンパイラは、例えば、ソースコードに含まれる構文や意味の解析を行うことによって、指定されたソースコードから中間言語の生成を行う。そして、コンパイラは、例えば、生成された中間言語の最適化を行い、最適化された中間言語からオブジェクトコードの生成を行う。これにより、コンパイルは、オブジェクトコードの実行時間の短縮や実行時における使用リソースの削減等を図ることが可能になる(例えば、特許文献1及び2参照)。
特表2008-505423号公報 特開2000-112772号公報
上記のように生成される中間言語には、例えば、例外の送出を行う関数の呼び出しを行う関数が含まれている場合がある。そして、コンパイラは、この場合、例外の送出が行われた際に実行する必要がある後続処理を追加したオブジェクトコードの生成を行う。
しかしながら、ライブラリ等の他のオブジェクトコードに含まれる関数の呼び出しが行われる場合、コンパイラ等の外部プログラムは、呼び出し先の関数が例外の送出を行う関数であるか否かについての判定を行うことができない。そのため、コンパイラは、例えば、ライブラリ等の他のオブジェクトコードに含まれる関数の呼び出しを行う場合、これらの関数の全てが例外の送出を行うものであると仮定してオブジェクトコードの生成を行う。したがって、コンパイラは、効率的な実行が可能なオブジェクトコードの生成を行うことができない場合がある。
そこで、一つの側面では、本発明は、効率的な実行が可能なオブジェクトコードの生成を行うことを可能とする情報処理装置、コンパイラプログラム及びコンパイル方法を提供することを目的とする。
実施の形態の一態様では、情報処理装置は、第1ソースコードのコンパイルの実行に応じて、前記第1ソースコードに含まれる関数のそれぞれが例外の送出を行う第1関数であるか否かを示す関数情報を記憶する記憶部と、前記第1ソースコードと異なる第2ソースコードのコンパイルの実行に応じて、前記第2ソースコードに含まれる関数のそれぞれが前記第1ソースコードに含まれる関数を呼び出すか否かを判定する第1判定部と、前記第1ソースコードに含まれる関数を呼び出す関数が前記第2ソースコードに含まれると判定した場合、前記関数情報を記憶した記憶部を参照し、前記第2ソースコードに含まれる関数のうち、前記第1ソースコードに含まれる関数を呼び出すと判定された関数のそれぞれが、前記第1関数を呼び出す関数であるか否かを判定する第2判定部と、前記第2ソースコードに含まれる関数のうち、前記第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す前記第1関数から例外が送出された場合に実行される後続処理を、前記第2ソースコードのコンパイルを実行することによって生成されるオブジェクトコードに追加するコード生成部と、を有する。
一つの側面によれば、効率的な実行が可能なオブジェクトコードの生成を行う。
図1は、情報処理システム10の構成を示す図である。 図2は、情報処理システム10の構成を示す図である。 図3は、情報処理システム10の構成を示す図である。 図4は、情報処理装置1のハードウエア構成を説明する図である。 図5は、情報処理装置1の機能のブロック図である。 図6は、第1の実施の形態におけるコンパイル処理の概略を説明するフローチャート図である。 図7は、第1の実施の形態におけるコンパイル処理の概略を説明するフローチャート図である。 図8は、第1の実施の形態におけるコンパイル処理の概略を説明する図である。 図9は、第1の実施の形態におけるコンパイル処理の概略を説明する図である。 図10は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図11は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図12は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図13は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図14は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図15は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図16は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図17は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図18は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図19は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。 図20は、ソースコード131aの具体例について説明する図である。 図21は、関数情報136の具体例について説明する図である。 図22は、ソースコード131bの具体例について説明する図である。 図23は、ソースコード131aのヘッダの具体例について説明する図である。
[情報処理システムの構成]
図1から図3は、情報処理システム10の構成を示す図である。図1から図3に示す情報処理システム10は、情報処理装置1と、操作端末3とを有する。
情報処理装置1では、例えば、CPU(図示しない)と各種プログラムとが有機的に協働することにより、コンパイラ11と、LTO(Link Time Optimization)12と、リンカ13とを含む各種機能を実現する。
コンパイラ11は、例えば、情報格納領域130に記憶されたソースコード131からオブジェクトコード133を生成する。コンパイラ11は、例えば、ソースコード131に含まれる構文や字句の意味を解析することによってソースコード131から中間言語132を生成する解析部11aと、解析部11aが生成した中間言語132の最適化を行う最適化部11bと、最適化部11bが最適化を行った中間言語132からオブジェクトコード133を生成するコード生成部11cとを有する。
具体的に、解析部11aは、例えば、図1に示すように、ライブラリのソースコード131(以下、ソースコード131aとも呼ぶ)からライブラリの中間言語132(以下、中間言語132aとも呼ぶ)を生成する。そして、コード生成部11cは、最適化部11bが最適化を行った中間言語132aからライブラリのオブジェクトコード133(以下、オブジェクトコード133aとも呼ぶ)を生成して情報格納領域130に記憶する。
また、解析部11aは、例えば、図2に示すように、アプリケーションのソースコード131(以下、ソースコード131bとも呼ぶ)からアプリケーションの中間言語132(以下、中間言語132b)を生成する。そして、コード生成部11cは、最適化部11bが最適化を行った中間言語132bからアプリケーションのオブジェクトコード133(以下、オブジェクトコード133bとも呼ぶ)を生成して情報格納領域130に記憶する。なお、コード生成部11cは、後述するようにLTO12を動作させる場合、最適化部11bが最適化を行った中間言語132bをオブジェクトコード133bに埋め込む。
LTO12は、例えば、コンパイラ11が生成したオブジェクトコード133bが複数存在しており、複数のオブジェクトコード133b間において関数の呼び出しが行われる場合、図2に示すように、関数の呼び出しが行われる複数のオブジェクトコード133bをより最適化したオブジェクトコード134(以下、最適化後コード134とも呼ぶ)を生成する。
具体的に、LTO12は、この場合、各オブジェクトコード133bに埋め込まれた中間言語132bをそれぞれ取得し、取得した中間言語132bをマージする。そして、LTO12は、マージした中間言語132b(1つの中間言語132b)からオブジェクトコード133bを再度生成する旨の指示をコンパイラ11に行うことによって、最適化後コード134を生成する。
リンカ13は、例えば、図3に示すように、ソースコード131aから生成されたオブジェクトコード133aと、ソースコード131bから生成されたオブジェクトコード133b(最適化後コード134)とをリンクさせることにより、実行ファイル135を生成する。
ここで、ソースコード131bから生成される中間言語132bには、例えば、例外の送出を行う関数の呼び出しを行う関数が含まれている場合がある。そして、コンパイラ11は、この場合、例外の送出が行われた際に実行する必要がある後続処理を追加したオブジェクトコード133bの生成を行う。
しかしながら、他のオブジェクトコード133(例えば、オブジェクトコード133a)に含まれる関数の呼び出しが行われる場合、コンパイラ11やLTO12等の外部プログラムは、呼び出し先の関数が例外の送出を行う関数であるか否かについての判定を行うことができない。そのため、コンパイラ11は、例えば、他のオブジェクトコード133に含まれる関数の呼び出しを行う場合、これらの関数の全てが例外の送出を行うものであると仮定してオブジェクトコード133bの生成を行う。したがって、コンパイラ11は、効率的な実行が可能なオブジェクトコード133bの生成を行うことができない場合がある。
そこで、本実施の形態におけるコンパイラ11は、ソースコード131a(以下、第1ソースコード131aとも呼ぶ)のコンパイルの実行に応じて、ソースコード131aに含まれる関数のそれぞれが例外の送出を行う関数(以下、第1関数とも呼ぶ)であるか否かを示す関数情報を情報格納領域130に記憶する。
そして、LTO12は、ソースコード131aと異なるソースコード131b(以下、第2ソースコード131bとも呼ぶ)のコンパイルの実行に応じて、ソースコード131bに含まれる関数のそれぞれがソースコード131aに含まれる関数を呼び出すか否かを判定する。その結果、ソースコード131aに含まれる関数を呼び出す関数がソースコード131bに含まれると判定した場合、関数情報を記憶した情報格納領域130を参照し、ソースコード131bに含まれる関数のうち、ソースコード131aに含まれる関数を呼び出すと判定された関数のそれぞれが、第1関数を呼び出す関数であるか否かを判定する。
その後、コンパイラ11は、ソースコード131bに含まれる関数のうち、第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す第1関数から例外が送出された場合に実行される後続処理をオブジェクトコード133bに追加する。
すなわち、コンパイラ11は、ソースコード131aのコンパイル時においては、ソースコード131aに含まれる関数のそれぞれが例外を送出するか否か(第1関数であるか否か)を判定することが可能である。そのため、コンパイラ11は、ソースコード131aのコンパイル時において関数情報の生成を行う。
これにより、コンパイラ11は、ソースコード131bのコンパイル時に関数情報を参照することが可能になり、ソースコード131aに含まれる関数が例外を送出するか否かを判定することが可能になる。そのため、コンパイラ11は、ソースコード131bのコンパイル時における後続処理の追加頻度を抑制することが可能になる。したがって、コンパイラ11は、ソースコード131bのコンパイルに要する時間及びオブジェクトコード133の実行に要する時間の短縮や、オブジェクトコード133による使用リソースの削減等を図ることが可能になる。
[情報処理システムのハードウエア構成]
次に、情報処理システム10のハードウエア構成について説明する。図4は、情報処理装置1のハードウエア構成を説明する図である。
情報処理装置1は、プロセッサであるCPU101と、メモリ102と、外部インターフェース(I/Oユニット)103と、記憶媒体104とを有する。各部は、バス105を介して互いに接続される。
記憶媒体104は、例えば、ソースコード131のコンパイルを行う処理(以下、コンパイル処理とも呼ぶ)を行うためのプログラム110を記憶するプログラム格納領域(図示しない)を有する。また、記憶媒体104は、例えば、コンパイル処理を行う際に用いられる情報を記憶する情報格納領域130(以下、記憶部130とも呼ぶ)を有する。なお、記憶媒体104は、例えば、HDD(Hard Disk Drive)であってよい。
CPU101は、記憶媒体104からメモリ102にロードされたプログラム110を実行してコンパイル処理を行う。
また、外部インターフェース103は、例えば、操作端末3と通信を行う。
[情報処理システムの機能]
次に、情報処理システム10の機能について説明を行う。図5は、情報処理装置1の機能のブロック図である。
情報処理装置1は、図5に示すように、CPU101やメモリ102等のハードウエアとプログラム110とが有機的に協働することにより、コンパイラ11の最適化部11bの機能として情報生成部111を実現し、コンパイラ11のコード生成部11cの機能として情報追加部112を実現する。
また、情報処理装置1は、図5に示すように、CPU101やメモリ102等のハードウエアとプログラム110とが有機的に協働することにより、LTO12の機能として、第1判定部113と、第2判定部114と、処理追加部115と、コンパイル指示部116とを実現する。
さらに、情報処理装置1は、図5に示すように、ソースコード131と、中間言語132と、オブジェクトコード133と、最適化後コード134と、実行ファイル135と、関数情報136とを情報格納領域130に記憶する。なお、以下、ソースコード131には、図1等で説明したソースコード131a及びソースコード131bが含まれ、中間言語132には、図1等で説明した中間言語132a及び中間言語132bが含まれ、オブジェクトコード133には、図1等で説明したオブジェクトコード133a及びオブジェクトコード133bが含まれるものとして説明を行う。
最適化部11bの情報生成部111は、例えば、解析部11aが生成した中間言語132aの最適化が行われる際に、ソースコード131a(中間言語132a)に含まれる関数のそれぞれが例外の送出を行う第1関数であるか否かを示す関数情報136の生成を行う。そして、情報生成部111は、生成した関数情報136を情報格納領域130に記憶する。関数情報136の具体例については後述する。
コード生成部11cの情報追加部112は、例えば、最適化部11bによって最適化された中間言語132bからオブジェクトコード133bの生成を行う際に、情報格納領域130に記憶された関数情報136と、最適化部11bによって最適化された中間言語132bとを、オブジェクトコード133bに埋め込む。
LTO12の第1判定部113は、ソースコード131bのコンパイルの実行に応じて、ソースコード131bに含まれる関数のそれぞれが、ソースコード131aに含まれる関数を呼び出すか否かを判定する。
LTO12の第2判定部114は、ソースコード131aに含まれる関数を呼び出す関数がソースコード131bに含まれると第1判定部113が判定した場合、情報格納領域130に記憶された関数情報136を参照し、ソースコード131bに含まれる関数のうち、ソースコード131aに含まれる関数を呼び出すと判定された関数のそれぞれが、第1関数を呼び出す関数であるか否かを判定する。
なお、第2判定部114は、この場合、情報追加部112によってオブジェクトコード133aに埋め込まれた関数情報136を参照することによって、第1関数を呼び出す関数であるか否かの判定を行うものであってもよい。
LTO12の処理追加部115は、ソースコード131bに含まれる関数のうち、第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す第1関数から例外が送出された場合に実行される後続処理が追加されるように、中間言語132を更新する。具体的に、処理追加部115は、コード生成部11cが生成したオブジェクトコード133bに埋め込まれている中間言語132bを取得し、取得した中間言語132bについて更新を行う。
LTO12のコンパイル指示部116は、処理追加部115等によって中間言語132bの更新が行われた場合、更新された中間言語132bのコンパイルをコンパイラ11に指示する。
[第1の実施の形態の概略]
次に、第1の実施の形態の概略について説明する。図6及び図7は、第1の実施の形態におけるコンパイル処理の概略を説明するフローチャート図である。また、図8及び図9は、第1の実施の形態におけるコンパイル処理の概略を説明する図である。
コンパイラ11は、図6に示すように、ソースコード131aのコンパイルの開始タイミングになるまで待機する(S1のNO)。具体的に、コンパイラ11は、例えば、コンパイルを行う担当者(以下、単に担当者とも呼ぶ)が操作端末3を介してソースコード131aのコンパイルを行う旨の指示を入力するまで待機する。
そして、ソースコード131aのコンパイルの開始タイミングになった場合(S1のYES)、コンパイラ11は、図8に示すように、ソースコード131aに含まれる関数のそれぞれが例外の送出を行う第1関数であるか否かを示す関数情報136を生成する(S2)。さらに、コンパイラ11は、S2の処理で生成した関数情報136を情報格納領域130に記憶する(S3)。
その後、LTO12は、図7に示すように、コンパイラ11によってソースコード131bのコンパイルが完了するまで待機する(S11のNO)。
そして、ソースコード131bのコンパイルが完了した場合(S11のYES)、LTO12は、ソースコード131bに含まれる関数のそれぞれが、ソースコード131aに含まれる関数を呼び出すか否かを判定する(S12)。
その結果、ソースコード131aに含まれる関数を呼び出す関数がソースコード131bに含まれると判定した場合(S13のYES)、LTO12は、関数情報136を記憶した情報格納領域130を参照し、ソースコード131bに含まれる関数のうち、S12の処理でソースコード131aに含まれる関数を呼び出すと判定された関数のそれぞれが、第1関数を呼び出す関数であるか否かを判定する(S14)。
そして、LTO12は、図9に示すように、ソースコード131bに含まれる関数のうち、S14の処理で第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す第1関数から例外が送出された場合に実行される後続処理を、ソースコード131bのコンパイルを実行することによって生成されるオブジェクトコード133bに追加する(S15)。
具体的に、LTO12は、この場合、ソースコード131bに含まれる関数のうち、S14の処理で第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す第1関数から例外が送出された場合に実行される後続処理が追加されるように、ソースコード131bから生成された中間言語132bを更新する。そして、LTO12は、更新した中間言語132bからオブジェクトコード133bを生成する旨の指示をコンパイラ11に対して行う。
一方、ソースコード131aに含まれる関数を呼び出す関数がソースコード131bに含まれると判定した場合(S13のNO)、LTO12は、S14及びS15の処理を行わない。
すなわち、コンパイラ11は、ソースコード131aのコンパイル時においては、ソースコード131aに含まれる関数のそれぞれが例外を送出するか否か(第1関数であるか否か)を判定することが可能である。そのため、コンパイラ11は、ソースコード131aのコンパイル時において関数情報136の生成を行う。
これにより、コンパイラ11は、ソースコード131bのコンパイル時に関数情報136を参照することが可能になり、ソースコード131aに含まれる関数が例外を送出するか否かを判定することが可能になる。そのため、コンパイラ11は、ソースコード131bのコンパイル時における後続処理の追加頻度を抑制することが可能になる。したがって、コンパイラ11は、ソースコード131bのコンパイルに要する時間及びオブジェクトコード133の実行に要する時間の短縮や、オブジェクトコード133による使用リソースの削減等を図ることが可能になる。
[第1の実施の形態の詳細]
次に、第1の実施の形態の詳細について説明する。図10から図19は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャート図である。また、図20から図23は、第1の実施の形態におけるコンパイル処理の詳細を説明する図である。
[ライブラリのソースコードについてのコンパイル処理]
初めに、ライブラリのソースコード131(ソースコード131a)についてのコンパイル処理の具体例について説明を行う。
コンパイラ11の解析部11aは、図10に示すように、ソースコード131aのコンパイルを行う旨の指示を受け付けるまで待機する(S21のNO)。具体的に、解析部11aは、例えば、担当者が操作端末3を介してソースコード131aのコンパイルを行う旨の指示を入力するまで待機する。以下、ソースコード131aの具体例について説明を行う。
[ライブラリのソースコードの具体例]
図20は、ソースコード131aの具体例について説明する図である。
図20に示すソースコード131aには、関数名がlib_func1、lib_func2及びlib_func3である関数(以下、それぞれ単にlib_func1、lib_func2及びlib_func3とも呼ぶ)がそれぞれ含まれている。そして、図20に示す例において、lib_func3には、例外を送出する式である「throw 1;」が含まれている。
図11に戻り、ソースコード131aのコンパイルを行う旨の指示を受け付けた場合(S21のYES)、解析部11aは、S21の処理で指示を受け付けたソースコード131aの構文解析及び意味解析を行うことによって中間言語132aを生成する(S22)。
一方、コンパイラ11の最適化部11bは、図11に示すように、解析部11aによる中間言語132aの生成が完了するまで待機する(S31のNO)。
そして、中間言語132aの生成が完了した場合(S31のYES)、最適化部11bの情報生成部111は、S31の処理で生成が完了した中間言語132aに含まれる関数のうちの1つを特定する(S32)。
続いて、情報生成部111は、S32の処理で特定した関数の本体に、例外の送出を行う記述が含まれているか否かを判定する(S33)。具体的に、例外の送出を行う記述は、ソースコード131aがC++によって記述されている場合、例えば、throw式、dynamic_cast演算式、typeid演算式、または、new式である。
その結果、例外の送出を行う記述が含まれていないと判定した場合(S34のNO)、情報生成部111は、S32の処理で特定した関数が例外の送出を行わない関数であることを示す情報を、情報格納領域130に記憶された関数情報136に追加する(S35)。
一方、例外の送出を行う記述が含まれていると判定した場合(S34のYES)、情報生成部111は、S35の処理を行わない。
具体的に、図20で説明したソースコード131aに含まれるlib_func3には、例外の送出を行う記述である「throw 1;」が含まれている。そのため、S32の処理で特定した関数がlib_func3である場合、情報生成部111は、lib_func3を示す情報を関数情報136に追加しない。一方、図20で説明したソースコード131aに含まれるlib_func1及びlib_func2に例外の送出を行う記述が含まれていない場合において、S32の処理で特定した関数がlib_func1またはlib_func2である場合、情報生成部111は、lib_func1またはlib_func2を示す情報を関数情報136に追加する。以下、S32の処理においてソースコード131aに含まれる全ての関数が特定された後の関数情報136の具体例について説明を行う。
[関数情報の具体例]
図21は、関数情報136の具体例について説明する図である。
図21に示す関数情報136には、関数情報136に含まれる各情報を識別する「項番」と、各関数を識別する関数名が設定される「関数名」とを項目として有している。
具体的に、図21に示す関数情報136において、「項番」が「1」である情報の「関数名」には、「lib_func1」が設定されている。また、図21に示す関数情報136において、「項番」が「2」である情報の「関数名」には、「lib_func2」が設定されている。
図11に戻り、情報生成部111は、S32の処理において全ての関数を特定しているか否かを判定する(S36)。
その結果、全ての関数を特定していないと判定した場合(S36のNO)、情報生成部111は、S32以降の処理を行う。
一方、全ての関数を特定していると判定した場合(S36のYES)、最適化部11bは、S31の処理で生成が完了した中間言語132aについての最適化のうち、残りの処理を実行する(S37)。そして、最適化部11bは、S31の処理で生成が完了した中間言語132aについての最適化を終了する。
また、コンパイラ11のコード生成部11cは、図12に示すように、最適化部11bによる中間言語132aの最適化が完了するまで待機する(S41のNO)。
そして、中間言語132aの最適化が完了した場合(S41のYES)、コード生成部11cの情報追加部112は、情報格納領域130に記憶された関数情報136と、S41の処理で最適化が完了した中間言語132aとが埋め込まれるように、S41の処理で最適化が完了した中間言語132aからオブジェクトコード133aを生成する(S42)。
[アプリケーションのソースコードについてのコンパイル処理]
次に、アプリケーションのソースコード131(ソースコード131b)についてのコンパイル処理の具体例について説明を行う。
解析部11aは、図13に示すように、ソースコード131bのコンパイルを行う旨の指示を受け付けるまで待機する(S21のNO)。具体的に、解析部11aは、例えば、担当者が操作端末3を介してソースコード131bのコンパイルを行う旨の指示を入力するまで待機する。以下、ソースコード131bの具体例について説明を行う。
[アプリケーションのソースコードの具体例]
図22は、ソースコード131bの具体例について説明する図である。
図22に示すソースコード131bの本体には、ソースコード131aに含まれる関数であるlib_func1を呼び出す関数であるfunc1と、func1を呼び出す関数であるfunc2と、func2を呼び出す関数であるfunc3とが含まれている。
図13に戻り、ソースコード131aのコンパイルを行う旨の指示を受け付けた場合(S51のYES)、解析部11aは、S51の処理で指示を受け付けたソースコード131aの構文解析及び意味解析を行うことによって中間言語132bを生成する(S52)。
一方、最適化部11bは、図14に示すように、解析部11aによる中間言語132bの生成が完了するまで待機する(S61のNO)。
そして、中間言語132bの生成が完了した場合(S61のYES)、最適化部11bは、S61の処理で生成が完了した中間言語132bについての最適化を行う(S62)。
なお、最適化部11bは、中間言語132a以外の中間言語132(例えば、中間言語132b)を最適化する場合においても、図11で説明したように、関数情報136の生成を行うものであってもよい。
また、コード生成部11cは、図15に示すように、最適化部11bによる中間言語132bの最適化が完了するまで待機する(S71のNO)。
そして、中間言語132bの最適化が完了した場合(S71のYES)、情報追加部112は、情報格納領域130に記憶された関数情報136と、S71の処理で最適化が完了した中間言語132bとが埋め込まれるように、S71の処理で最適化が完了した中間言語132bからオブジェクトコード133bを生成する(S72)。
さらに、LTO12は、図16に示すように、コード生成部11cによってオブジェクトコード133bの生成が完了するまで待機する(S81のNO)。
そして、オブジェクトコード133bの生成が完了した場合(S81のYES)、LTO12の第1判定部113は、S81の処理で生成が完了したオブジェクトコード133bに埋め込まれている中間言語132bに含まれる関数のうちの1つを特定する(S82)。
具体的に、第1判定部113は、例えば、図22で説明したソースコード131bに含まれる関数であるfunc1に対応する中間言語を特定する。
続いて、第1判定部113は、S82の処理で特定した関数の関数定義に、S82の処理で特定した関数が例外を送出しないことを示す情報が含まれているか否かを判定する(S83)。
具体的に、図22で説明したソースコード131bにおけるfunc1の関数定義には、func1が例外を送出しないことを示す情報についての記述が含まれていない。そのため、第1判定部113は、S82の処理においてfunc1に対応する中間言語を特定している場合、func1の関数定義に、func1が例外を送出しないことを示す情報が含まれていないと判定する。なお、例外を送出しないことを示す情報についての記述は、ソースコード131bがC++によって記述されている場合、例えば、noexcept指定子である。
そして、S82の処理で特定した関数の関数定義に、S82の処理で特定した関数が例外を送出しないことを示す情報が含まれていないと判定した場合(S84のNO)、第1判定部113は、S82の処理で特定した関数の本体に、S82の処理で特定した関数が例外の送出を行う記述が含まれているか否かを判定する(S85)。
具体的に、図22で説明したソースコード131bにおけるfunc1の本体には、func1が例外の送出を行う記述(例えば、throw式)が含まれていない。そのため、第1判定部113は、S82の処理においてfunc1に対応する中間言語を特定している場合、func1の本体に、func1が例外の送出を行う記述が含まれていないと判定する。
さらに、S82の処理で特定した関数の本体に、S82の処理で特定した関数が例外の送出を行う記述が含まれていないと判定した場合(S86のNO)、第1判定部113は、図17に示すように、S82の処理で特定した関数が他の関数を呼び出す関数であるか否かを判定する(S91)。
具体的に、図22で説明したソースコード131bに含まれる関数であるfunc1は、ソースコード131aに含まれる関数であるlib_func1の呼び出しを行う。そのため、第1判定部113は、S82の処理においてfunc1に対応する中間言語を特定している場合、S82の処理で特定した関数が他の関数を呼び出すものであると判定する。
その結果、S82の処理で特定した関数が他の関数を呼び出すと判定した場合(S92のYES)、LTO12の第2判定部114は、S82の処理で特定した関数が呼び出す他の関数のヘッダに、S82の処理で特定した関数によって呼び出される他の関数が例外の送出を行わない関数であることを示す情報が含まれているか否かを判定する(S93)。以下、ソースコード131aのヘッダの具体例について説明を行う。
[ライブラリのソースコードのヘッダの具体例]
図23は、ソースコード131aのヘッダの具体例について説明する図である。
図23に示すソースコード131aのヘッダには、lib_func1、lib_func2及びlib_func3についての情報が含まれているが、lib_func1、lib_func2及びlib_func3のそれぞれが例外の送出を行わない関数であることを示す情報については含まれていない。
そのため、第2判定部114は、S82の処理においてfunc1に対応する中間言語を特定している場合、S82の処理で特定した関数が呼び出す他の関数のヘッダに、S82の処理で特定した関数によって呼び出される他の関数が例外の送出を行わない関数であることを示す情報が含まれていないと判定する。
そして、S82の処理で特定した関数によって呼び出される他の関数が例外の送出を行わない関数であることを示す情報が含まれていないと判定した場合(S94のNO)、第2判定部114は、S81の処理で生成が完了したオブジェクトコード133bに埋め込まれた関数情報136に、S82の処理で特定した関数によって呼び出される他の関数が例外の送出を行わないことを示す情報が含まれているか否かを判定する(S95)。
すなわち、S82の処理で特定した関数の関数定義または本体に、S82の処理で特定した関数が例外を送出しないことを示す情報が含まれていないと判定され、S82の処理で特定した関数が他の関数を呼び出すと判定され、さらに、S82の処理で特定した関数が呼び出す他の関数のヘッダに、S82の処理で特定した関数によって呼び出される他の関数が例外を送出する関数であることを示す情報が含まれていないと判定された場合、第2判定部114は、各ソースコード131(例えば、ソースコード131a及びソースコード131b)や中間言語132(例えば、中間言語132a及び中間言語132b)を確認することによって、S82の処理で特定した関数が例外の送出を行う関数であるか否かの判定を行うことができないと判定する。そのため、第2判定部114は、この場合、関数情報136を参照することにより、S82の処理で特定した関数が例外の送出を行う関数であるか否かの判定を行う。
その結果、図18に示すように、S82の処理で特定した関数によって呼び出される他の関数が例外の送出を行わないことを示す情報が関数情報136に含まれていると判定した場合(S101のYES)、LTO12の処理追加部115は、S82の処理で特定した関数の関数定義に、S82の処理で特定した関数が例外を送出しないことを示す情報が追加されるように、S82の処理で特定した関数の中間言語132bを更新する(S102)。
具体的に、図21で説明した関数情報136には、lib_func1が例外を送出しない関数であることを示す情報が含まれている。そのため、処理追加部115は、例えば、S82の処理で特定した関数がfunc1(lib_func1の呼び出しを行う関数)である場合、func1が例外を送出しない関数であることを示す情報を中間言語132bに追加する。
その後、LTO12は、S82の処理において全ての関数を特定しているか否かを判定する(S103)。
その結果、全ての関数を特定していると判定した場合(S103のYES)、LTO12は、必要に応じて、S82の処理で特定した関数の中間言語132b、または、S102の処理で更新した中間言語132bのさらなる更新を行う(S104)。すなわち、LTO12は、例えば、S82の処理で特定した関数が例外の送出を行う関数以外の関数の呼び出しを行っている場合、S82の処理で特定した関数の中間言語132b、または、S102の処理で更新した中間言語132bの最適化をさらに行う。
その後、LTO12のコンパイル指示部116は、S102の処理またはS104の処理において中間言語132bの更新が行われたか否かを判定する(S105)。
その結果、中間言語132bの更新が行われたと判定した場合(S105のYES)、コンパイル指示部116は、S102の処理またはS104の処理で更新した中間言語132bからの最適化後コード134の生成をコンパイラ11に指示する(S106)。
また、中間言語132bの更新が行われていないと判定した場合(S105のNO)、コンパイル指示部116は、S106の処理を行わない。すなわち、コンパイル指示部116は、この場合、中間言語132bの更新が行われなかったため、最適化後コード134の生成を行う必要がないものと判定する。
なお、S84の処理において、S82の処理で特定した関数の関数定義に、S82の処理で特定した関数が例外を送出しないことを示す情報が含まれていると判定した場合(S84のYES)、LTO12は、S103以降の処理を行う。また、S86の処理において、S82の処理で特定した関数の本体に、S82の処理で特定した関数が例外の送出を行う記述が含まれていると判定した場合についても同様に(S86のYES)、S103以降の処理を行う。また、S92の処理において、S82の処理で特定した関数が他の関数を呼び出さないと判定した場合についても同様に(S92のNO)、S103以降の処理を行う。また、S94の処理において、S82の処理で特定した関数によって呼び出される他の関数が例外の送出を行わない関数であることを示す情報が含まれていると判定した場合についても同様に(S94のYES)、S103以降の処理を行う。さらに、S101の処理において、S82の処理で特定した関数によって呼び出される他の関数が例外の送出を行わないことを示す情報が関数情報136に含まれていないと判定した場合についても同様に(S101のNO)、S103以降の処理を行う。
すなわち、これらの場合、コンパイラ11は、各ソースコード131や中間言語132の内容から、S82の処理で特定した関数によって呼び出される関数が例外の送出を行う関数であるか否かの判定が可能である。そのため、コンパイルは、これらの場合、S102の処理を行わない。
一方、コンパイラ11のコード生成部11cは、図19に示すように、LTO12からのコンパイル指示を受け付けるまで待機する(S111のNO)。すなわち、コード生成部11cは、S81の処理で生成が完了したオブジェクトコード133bに埋め込まれている中間言語132bが更新されるまで待機する。
そして、LTO12からコンパイル指示を受け付けた場合(S111のYES)、コード生成部11cは、呼び出し先の関数(例えば、オブジェクトコード133aに含まれる関数)から例外が送出された場合に実行される後続処理が追加されるように、S102の処理で更新した中間言語132bから最適化後コード134を生成する(S112)。
なお、S102の処理で更新された中間言語132bに、呼び出し先の関数から例外が送出された場合に後続処理を実行する旨が既に含まれている場合、コード生成部11cは、後続処理の追加を行わないものであってよい。
このように、本実施の形態におけるコンパイラ11は、ソースコード131aのコンパイルの実行に応じて、ソースコード131aに含まれる関数のそれぞれが例外の送出を行う第1関数であるか否かを示す関数情報136を情報格納領域130に記憶する。
そして、LTO12は、ソースコード131aと異なるソースコード131bのコンパイルの実行に応じて、ソースコード131bに含まれる関数のそれぞれがソースコード131aに含まれる関数を呼び出すか否かを判定する。その結果、ソースコード131aに含まれる関数を呼び出す関数がソースコード131bに含まれると判定した場合、関数情報136を記憶した情報格納領域130を参照し、ソースコード131bに含まれる関数のうち、ソースコード131aに含まれる関数を呼び出すと判定された関数のそれぞれが、第1関数を呼び出す関数であるか否かを判定する。
その後、コンパイラ11は、ソースコード131bに含まれる関数のうち、第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す第1関数から例外が送出された場合に実行される後続処理をオブジェクトコード133bに追加する。
すなわち、コンパイラ11は、ソースコード131aのコンパイル時においては、ソースコード131aに含まれる関数のそれぞれが例外を送出するか否か(第1関数であるか否か)を判定することが可能である。そのため、コンパイラ11は、ソースコード131aのコンパイル時において関数情報136の生成を行う。
これにより、コンパイラ11は、ソースコード131bのコンパイル時に関数情報136を参照することが可能になり、ソースコード131aに含まれる関数が例外を送出するか否かを判定することが可能になる。そのため、コンパイラ11は、ソースコード131bのコンパイル時における後続処理の追加頻度を抑制することが可能になる。したがって、コンパイラ11は、ソースコード131bのコンパイルに要する時間及びオブジェクトコード133の実行に要する時間の短縮や、オブジェクトコード133による使用リソースの削減等を図ることが可能になる。
以上の実施の形態をまとめると、以下の付記のとおりである。
(付記1)
第1ソースコードのコンパイルの実行に応じて、前記第1ソースコードに含まれる関数のそれぞれが例外の送出を行う第1関数であるか否かを示す関数情報を記憶する記憶部と、
前記第1ソースコードと異なる第2ソースコードのコンパイルの実行に応じて、前記第2ソースコードに含まれる関数のそれぞれが前記第1ソースコードに含まれる関数を呼び出すか否かを判定する第1判定部と、
前記第1ソースコードに含まれる関数を呼び出す関数が前記第2ソースコードに含まれると判定した場合、前記関数情報を記憶した記憶部を参照し、前記第2ソースコードに含まれる関数のうち、前記第1ソースコードに含まれる関数を呼び出すと判定された関数のそれぞれが、前記第1関数を呼び出す関数であるか否かを判定する第2判定部と、
前記第2ソースコードに含まれる関数のうち、前記第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す前記第1関数から例外が送出された場合に実行される後続処理を、前記第2ソースコードのコンパイルを実行することによって生成されるオブジェクトコードに追加するコード生成部と、を有する、
ことを特徴とする情報処理装置。
(付記2)
付記1において、
前記コード生成部は、前記第2ソースコードに含まれる関数のうち、前記第1関数を呼び出さないと判定された関数のそれぞれについては、前記後続処理の追加を行わない、
ことを特徴とする情報処理装置。
(付記3)
付記1において、
前記後続処理は、各関数が呼び出す前記第1関数から送出された例外を受け付ける処理である、
ことを特徴とする情報処理装置。
(付記4)
付記1において、
前記コード生成部は、前記第2ソースコードに含まれる関数であって前記第1関数を呼び出すと判定された関数のうち、前記後続処理を実行する旨の記述が前記第2ソースコードに含まれていない関数のそれぞれについて、前記後続処理の追加を行う、
ことを特徴とする情報処理装置。
(付記5)
付記1において、
前記第2判定部は、
前記第1ソースコードに含まれる関数を呼び出す関数が前記第2ソースコードに含まれると判定した場合、前記第2ソースコードに含まれると判定された関数によって呼び出される関数のそれぞれが前記第1関数であるか否かを示す情報が、前記第1ソースコードまたは前記第2ソースコードに含まれているか否かを判定し、
前記第2ソースコードに含まれる関数によって呼び出される関数のうち、前記第1関数であるか否かを示す情報が前記第1ソースコードまたは前記ソースコードに含まれていないと判定された関数のそれぞれが、前記第1関数を呼び出す関数であるか否かを判定する、
ことを特徴とする情報処理装置。
(付記6)
付記1において、
前記第1ソースコード及び前記第2ソースコードは、C++言語によって記述されたソースコードである、
ことを特徴とする情報処理装置。
(付記7)
第1ソースコードのコンパイルの実行に応じて、前記第1ソースコードに含まれる関数のそれぞれが例外の送出を行う第1関数であるか否かを示す関数情報を記憶部に記憶し、
前記第1ソースコードと異なる第2ソースコードのコンパイルの実行に応じて、前記第2ソースコードに含まれる関数のそれぞれが前記第1ソースコードに含まれる関数を呼び出すか否かを判定し、
前記第1ソースコードに含まれる関数を呼び出す関数が前記第2ソースコードに含まれると判定した場合、前記関数情報を記憶した記憶部を参照し、前記第2ソースコードに含まれる関数のうち、前記第1ソースコードに含まれる関数を呼び出すと判定された関数のそれぞれが、前記第1関数を呼び出す関数であるか否かを判定し、
前記第2ソースコードに含まれる関数のうち、前記第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す前記第1関数から例外が送出された場合に実行される後続処理を、前記第2ソースコードのコンパイルを実行することによって生成されるオブジェクトコードに追加する、
処理をコンピュータに実行させることを特徴とするコンパイラプログラム。
(付記8)
付記7において、
前記追加する処理では、前記第2ソースコードに含まれる関数のうち、前記第1関数を呼び出さないと判定された関数のそれぞれについては、前記後続処理の追加を行わない、
ことを特徴とするコンパイラプログラム。
(付記9)
第1ソースコードのコンパイルの実行に応じて、前記第1ソースコードに含まれる関数のそれぞれが例外の送出を行う第1関数であるか否かを示す関数情報を記憶部に記憶し、
前記第1ソースコードと異なる第2ソースコードのコンパイルの実行に応じて、前記第2ソースコードに含まれる関数のそれぞれが前記第1ソースコードに含まれる関数を呼び出すか否かを判定し、
前記第1ソースコードに含まれる関数を呼び出す関数が前記第2ソースコードに含まれると判定した場合、前記関数情報を記憶した記憶部を参照し、前記第2ソースコードに含まれる関数のうち、前記第1ソースコードに含まれる関数を呼び出すと判定された関数のそれぞれが、前記第1関数を呼び出す関数であるか否かを判定し、
前記第2ソースコードに含まれる関数のうち、前記第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す前記第1関数から例外が送出された場合に実行される後続処理を、前記第2ソースコードのコンパイルを実行することによって生成されるオブジェクトコードに追加する、
ことを特徴とするコンパイル方法。
(付記10)
付記9において、
前記追加する工程では、前記第2ソースコードに含まれる関数のうち、前記第1関数を呼び出さないと判定された関数のそれぞれについては、前記後続処理の追加を行わない、
ことを特徴とするコンパイル方法。
1:情報処理装置 3:操作端末
11:コンパイラ 11a:解析部
11b:最適化部 11c:コード生成部
12:LTO 13:リンカ
130:情報格納領域 131:ソースコード
132:中間言語 133:オブジェクトコード
134:最適化後コード 135:実行ファイル

Claims (7)

  1. 第1ソースコードのコンパイルの実行に応じて、前記第1ソースコードに含まれる関数のそれぞれが例外の送出を行う第1関数であるか否かを示す関数情報を記憶する記憶部と、
    前記第1ソースコードと異なる第2ソースコードのコンパイルの実行に応じて、前記第2ソースコードに含まれる関数のそれぞれが前記第1ソースコードに含まれる関数を呼び出すか否かを判定する第1判定部と、
    前記第1ソースコードに含まれる関数を呼び出す関数が前記第2ソースコードに含まれると判定した場合、前記関数情報を記憶した記憶部を参照し、前記第2ソースコードに含まれる関数のうち、前記第1ソースコードに含まれる関数を呼び出すと判定された関数のそれぞれが、前記第1関数を呼び出す関数であるか否かを判定する第2判定部と、
    前記第2ソースコードに含まれる関数のうち、前記第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す前記第1関数から例外が送出された場合に実行される後続処理を、前記第2ソースコードのコンパイルを実行することによって生成されるオブジェクトコードに追加するコード生成部と、を有する、
    ことを特徴とする情報処理装置。
  2. 請求項1において、
    前記コード生成部は、前記第2ソースコードに含まれる関数のうち、前記第1関数を呼び出さないと判定された関数のそれぞれについては、前記後続処理の追加を行わない、
    ことを特徴とする情報処理装置。
  3. 請求項1において、
    前記後続処理は、各関数が呼び出す前記第1関数から送出された例外を受け付ける処理である、
    ことを特徴とする情報処理装置。
  4. 請求項1において、
    前記コード生成部は、前記第2ソースコードに含まれる関数であって前記第1関数を呼び出すと判定された関数のうち、前記後続処理を実行する旨の記述が前記第2ソースコードに含まれていない関数のそれぞれについて、前記後続処理の追加を行う、
    ことを特徴とする情報処理装置。
  5. 請求項1において、
    前記第2判定部は、
    前記第1ソースコードに含まれる関数を呼び出す関数が前記第2ソースコードに含まれると判定した場合、前記第2ソースコードに含まれると判定された関数によって呼び出される関数のそれぞれが前記第1関数であるか否かを示す情報が、前記第1ソースコードまたは前記第2ソースコードに含まれているか否かを判定し、
    前記第2ソースコードに含まれる関数によって呼び出される関数のうち、前記第1関数であるか否かを示す情報が前記第1ソースコードまたは前記ソースコードに含まれていないと判定された関数のそれぞれが、前記第1関数を呼び出す関数であるか否かを判定する、
    ことを特徴とする情報処理装置。
  6. 第1ソースコードのコンパイルの実行に応じて、前記第1ソースコードに含まれる関数のそれぞれが例外の送出を行う第1関数であるか否かを示す関数情報を記憶部に記憶し、
    前記第1ソースコードと異なる第2ソースコードのコンパイルの実行に応じて、前記第2ソースコードに含まれる関数のそれぞれが前記第1ソースコードに含まれる関数を呼び出すか否かを判定し、
    前記第1ソースコードに含まれる関数を呼び出す関数が前記第2ソースコードに含まれると判定した場合、前記関数情報を記憶した記憶部を参照し、前記第2ソースコードに含まれる関数のうち、前記第1ソースコードに含まれる関数を呼び出すと判定された関数のそれぞれが、前記第1関数を呼び出す関数であるか否かを判定し、
    前記第2ソースコードに含まれる関数のうち、前記第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す前記第1関数から例外が送出された場合に実行される後続処理を、前記第2ソースコードのコンパイルを実行することによって生成されるオブジェクトコードに追加する、
    処理をコンピュータに実行させることを特徴とするコンパイラプログラム。
  7. 第1ソースコードのコンパイルの実行に応じて、前記第1ソースコードに含まれる関数のそれぞれが例外の送出を行う第1関数であるか否かを示す関数情報を記憶部に記憶し、
    前記第1ソースコードと異なる第2ソースコードのコンパイルの実行に応じて、前記第2ソースコードに含まれる関数のそれぞれが前記第1ソースコードに含まれる関数を呼び出すか否かを判定し、
    前記第1ソースコードに含まれる関数を呼び出す関数が前記第2ソースコードに含まれると判定した場合、前記関数情報を記憶した記憶部を参照し、前記第2ソースコードに含まれる関数のうち、前記第1ソースコードに含まれる関数を呼び出すと判定された関数のそれぞれが、前記第1関数を呼び出す関数であるか否かを判定し、
    前記第2ソースコードに含まれる関数のうち、前記第1関数を呼び出すと判定された関数のそれぞれについて、各関数が呼び出す前記第1関数から例外が送出された場合に実行される後続処理を、前記第2ソースコードのコンパイルを実行することによって生成されるオブジェクトコードに追加する、
    ことを特徴とするコンパイル方法。
JP2018108560A 2018-06-06 2018-06-06 情報処理装置、コンパイラプログラム及びコンパイル方法 Active JP7060801B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2018108560A JP7060801B2 (ja) 2018-06-06 2018-06-06 情報処理装置、コンパイラプログラム及びコンパイル方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018108560A JP7060801B2 (ja) 2018-06-06 2018-06-06 情報処理装置、コンパイラプログラム及びコンパイル方法

Publications (2)

Publication Number Publication Date
JP2019212100A JP2019212100A (ja) 2019-12-12
JP7060801B2 true JP7060801B2 (ja) 2022-04-27

Family

ID=68845321

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018108560A Active JP7060801B2 (ja) 2018-06-06 2018-06-06 情報処理装置、コンパイラプログラム及びコンパイル方法

Country Status (1)

Country Link
JP (1) JP7060801B2 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002229801A (ja) 2001-02-02 2002-08-16 Hitachi Ltd 関数のリンク方法
JP2003131886A (ja) 2001-10-25 2003-05-09 Hitachi Ltd 例外処理の翻訳方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002073347A (ja) * 2000-09-04 2002-03-12 Hitachi Ltd 例外処理方法及びコンパイラ

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002229801A (ja) 2001-02-02 2002-08-16 Hitachi Ltd 関数のリンク方法
JP2003131886A (ja) 2001-10-25 2003-05-09 Hitachi Ltd 例外処理の翻訳方法

Also Published As

Publication number Publication date
JP2019212100A (ja) 2019-12-12

Similar Documents

Publication Publication Date Title
KR102059705B1 (ko) 적응식 이식가능 라이브러리
US11216258B2 (en) Direct function call substitution using preprocessor
US7472375B2 (en) Creating managed code from native code
US10133560B2 (en) Link time program optimization in presence of a linker script
CN111124550B (zh) 一种程序动态加载方法、装置及存储介质
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
EP3244306B1 (en) A computer-implemented method for allowing modification of a region of original code
US8141035B2 (en) Method for accessing internal states of objects in object oriented programming
US10061571B2 (en) System and method for link time optimization
WO2005083565A2 (en) Method and system for performing link-time code optimization without additional code analysis
KR102414250B1 (ko) 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체
CN112882718B (zh) 编译处理方法、装置、设备及存储介质
KR20010086159A (ko) 자바 프로그램들 및 이를 위한 소프트웨어 프러덕트의플랫폼 특정 효율 강화를 위한 방법
CN113342323A (zh) 软件在线开发的方法及装置
CN110851168A (zh) 数据处理方法及其装置、计算机可读存储介质
JP6500626B2 (ja) 計算機、コンパイラプログラム、リンクプログラムおよびコンパイル方法
US20090187897A1 (en) Compiling method and compiling program
JP7060801B2 (ja) 情報処理装置、コンパイラプログラム及びコンパイル方法
EP3432138B1 (en) A computer-implemented method and system for comparing the results on a plurality of target machines of modification of a region of original code
CN110018831B (zh) 程序处理方法、装置及计算机可读存储介质
JP2007226589A (ja) プログラム変換システム
JP2015122018A (ja) アプリケーション開発支援プログラム及びアプリケーション開発支援システム
KR100478463B1 (ko) 응용 프로그램의 동적링크 방법
CN113721899A (zh) 面向gpdsp的轻量级高效汇编代码编程方法及系统
JP2005346407A (ja) 動的コンパイルにおけるインライン展開実施方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220224

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220328

R150 Certificate of patent or registration of utility model

Ref document number: 7060801

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150