(57)【要約】【課題】  プログラムコードを実行するに際し、メモリ使用量を適切に削減することができるようにする。【解決手段】  設計図面情報２０３に存在するメソッドにおいて、呼び出しが行なわれないメソッドと、１回しか呼び出されることがないメソッドに関する情報を収集し、呼び出しが行なわれないメソッドに関してはプログラムコードに関数定義を生成せず、１回しか呼び出されることがないメソッドに関しては、メソッドがアクセスする資源に対してメソッドの呼び出し元がアクセスできるように属性を変更し、且つ呼び出し元へメソッドをインライン展開するプログラムコードを生成する。【選択図】  図２
2006285584.tif 000002
【特許請求の範囲】
【請求項１】
設計図面を用いてプログラムコードを自動生成するプログラムコード生成装置であって、
前記設計図面に含まれるメソッドの呼び出し回数を解析する解析手段と、
前記解析手段によって解析された呼び出し回数が所定回数以下のメソッドに対してインライン展開処理を行い、前記呼び出し回数が所定回数以下ではないメソッドに対して関数として展開処理を行うことにより、プログラムコードを生成するプログラムコード生成手段とを有することを特徴とするプログラムコード生成装置。
【請求項２】
前記プログラムコード生成手段は、前記設計図面内のクラスの操作関数のうち、どこからも呼び出されていないメソッドをプログラムコードとして生成しないことを特徴とする請求項１に記載のプログラムコード生成装置。
【請求項３】
前記プログラムコード生成手段は、前記インライン展開処理するメソッドが操作する関数が非公開関数の場合、公開関数に変更することを特徴とする請求項１又は２に記載のプログラムコード生成装置。
【請求項４】
設計図面を用いてプログラムコードを自動生成するプログラムコード生成方法であって、
前記設計図面に含まれるメソッドの呼び出し回数を解析する解析ステップと、
前記解析ステップにおいて解析された呼び出し回数が所定回数以下のメソッドに対してインライン展開処理を行い、前記呼び出し回数が所定回数以下ではないメソッドに対して関数として展開処理を行うことにより、プログラムコードを生成するプログラムコード生成ステップとを有することを特徴とするプログラムコード生成方法。
【請求項５】
設計図面を用いてプログラムコードを自動生成することをコンピュータに実行させるためのコンピュータプログラムであって、
前記設計図面に含まれるメソッドの呼び出し回数を解析する解析ステップと、
前記解析ステップにおいて解析された呼び出し回数が所定回数以下のメソッドに対してインライン展開処理を行い、前記呼び出し回数が所定回数以下ではないメソッドに対して関数として展開処理を行うことにより、プログラムコードを生成するプログラムコード生成ステップとをコンピュータに実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムコード生成装置、プログラムコード生成方法、及びコンピュータプログラムに関し、特に、プログラムコードを生成するために用いて好適なものである。
【背景技術】
【０００２】
近年のソフトウェア設計技術として、モデル駆動型アーキテクチャー（Ｍｏｄｅｌ  Ｄｒｉｖｅｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ）技術（以降、ＭＤＡ技術と称す）が採用されるようになってきている。一般的にＭＤＡ技術とは、オペレータが入力したソフトウェアの設計図面情報から各プラットフォームのプログラムコードを自動的に生成し、且つ、入力したソフトウェアの設計図面情報をＭＤＡ専用ツール上で動作させることが可能な技術である。
これらソフトウェアの設計図面情報の代表的な例としては、オブジェクト指向技術のモデル表記言語であるＵＭＬ（Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）などが挙げられる。
【０００３】
従来のプログラムコード生成装置により自動生成されるプログラムコードは、ソフトウェアの設計図面情報とほぼ等価であることが前提とされていた。プログラムコード生成装置において以下の（１）〜（３）などの制約があるためである。
（１）全てのプログラムコードを生成するのに必要な設計図面情報を、プログラムコード生成装置に入力できなかった。
（２）設計図面情報から全てのプログラムコードを生成できず、プログラムコードのスケルトンのみを自動生成していた。
（３）自動生成されたプログラムコード上でしかデバッグ作業が出来なかった
【０００４】
したがって、オペレータは、設計図面情報とプログラムコードとを常に見比べ、プログラムコードを手動で追加する必要がある。このため、設計図面と、自動生成されるプログラムコードとは、視覚的な静的な側面で完全に等価であることが必修条件であった。
このような状況において、オペレータが入力する設計図面情報には、最適化という観点から注目すると冗長的な部分が多々あり、自動生成されるプログラムコードにおいても、その冗長的な部分が忠実にプログラムコードとして生成されることになる。その結果、プログラムコードがコンパイル・リンクされることで出来上がる実行可能形式のサイズは、冗長的な処理が含まれる分大きくなる。更に、実行可能形式の動作時に使用するメモリサイズも大きくなり、且つ実行スピードも遅くなるという問題が存在した。
【０００５】
この問題を解決する技術としては、プログラムコードのコード・コンパイル時に最適化を施すのが通例である。しかしながら、コード・コンパイル時の最適化は、プログラムコードの格納された１ファイルを対象とした最適化であり、プログラムコードの全てのファイルを対象とした最適化については現状では考慮されていない。
【０００６】
近年、ＭＤＡ技術が進歩したことにより、上述した従来のプログラムコード生成装置における制約を除くことができる。その結果、ソフトウェアの設計図面情報から全てのプログラムコードを自動生成することが可能になり、且つ、設計図面情報をＭＤＡ専用ツール上でデバッグ動作させることが可能になっている。これにより、オペレータはプログラムコードを参照することなしにソフトウェアの開発作業を進めることが可能になっている。つまり、従来のように設計図面情報とプログラムコードとが、視覚的な静的な側面においては必ずしも等価である必要性がなくなってきている。このような状況の中、最適化されていない設計図面情報の問題に対して、特開平１１−２３７９８０号公報に掲載の「オブジェクト指向最適化コード生成装置および方法」、特開２００４−１１８８６５号公報に掲載の「最適化ソフトウェア生成方法」においては、オブジェクト指向機能排除手段を用いて仮想関数の機能を排除、もしくはインスタンスの動的生成の機能を排除することで、必要なメモリ容量を増加させることなく組み込み制御システムに適用可能なコードの最適化を行なうことを可能にしている。
【０００７】
【特許文献１】特開平１１−２３７９８０号公報
【特許文献２】特開２００４−１１８８６５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述のような装置および方法では、オブジェクト指向機能の排除として、仮想関数機能の排除と、インスタンスの動的生成機能の排除だけしか提案されていない。したがって、設計図面を用いてプログラムコードを自動生成するに際してメモリ容量を適切に削減することが困難であるという問題点があった。
【０００９】
本発明は、このような問題点に鑑みてなされたもので、プログラムコードを実行するに際し、メモリ使用量を適切に削減することができるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
本発明のプログラムコード生成装置は、設計図面を用いてプログラムコードを自動生成するプログラムコード生成装置であって、前記設計図面に含まれるメソッドの呼び出し回数を解析する解析手段と、前記解析手段によって解析された呼び出し回数が所定回数以下のメソッドに対してインライン展開処理を行い、前記呼び出し回数が所定回数以下ではないメソッドに対して関数として展開処理を行うことにより、プログラムコードを生成するプログラムコード生成手段とを有することを特徴とする。
【００１１】
本発明のプログラムコード生成方法は、設計図面を用いてプログラムコードを自動生成するプログラムコード生成方法であって、前記設計図面に含まれるメソッドの呼び出し回数を解析する解析ステップと、前記解析ステップにおいて解析された呼び出し回数が所定回数以下のメソッドに対してインライン展開処理を行い、前記呼び出し回数が所定回数以下ではないメソッドに対して関数として展開処理を行うことにより、プログラムコードを生成するプログラムコード生成ステップとを有することを特徴とする。
【００１２】
本発明のコンピュータプログラムは、設計図面を用いてプログラムコードを自動生成することをコンピュータに実行させるためのコンピュータプログラムであって、前記設計図面に含まれるメソッドの呼び出し回数を解析する解析ステップと、前記解析ステップにおいて解析された呼び出し回数が所定回数以下のメソッドに対してインライン展開処理を行い、前記呼び出し回数が所定回数以下ではないメソッドに対して関数として展開処理を行うことにより、プログラムコードを生成するプログラムコード生成ステップとをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、プログラムコードを実行する際のメモリ使用量を削減することができる。
【発明を実施するための最良の形態】
【００１４】
（第１の実施形態）
次に、図面を参照しながら、本発明の第１の実施形態について説明する。
図１は、本実施形態のプログラムコード生成装置の構成の一例を示すブロック図である。
図１において、１はＣＰＵである。ＣＰＵ１は、プログラムコード生成装置を統括制御し、例えば、バス２に接続された装置３、５、７、９にアクセスして制御を行なう。
３は、バス２を介してＣＰＵ１からアクセス可能な読み出し専用メモリ（ＲＯＭ）である。本実施形態では、処理プログラム３ａ及び処理プログラム３ａにより使用されるパラメータ３ｂがＲＯＭ３に格納されている。
【００１５】
４は読み書き可能なメモリ（ＲＡＭ）である。ＲＡＭ４には、設計図面情報、プラットフォーム情報、最適化可能箇所情報、実行環境制約情報、最適化予定情報、プログラムコード、プロジェクトファイル、ライブラリ、及び実行可能形式をそれぞれ格納するためのデータ格納領域４ａ〜４ｉが確保されている。これらデータ格納領域４ａ〜４ｉに格納される情報は、それぞれ処理プログラム３ａにより作成及び変更される。
【００１６】
５は入力インターフェイスであり、キーボード、ボタン、マウス、ダイアル、タブレット等の入力装置６を介してなされる入力を受け取る。
７は出力インターフェイスであり、例えばＣＲＴ（又はＬＣＤ）８ａや、プリンタ（又はプロッタ）８ｂ等を備える出力装置８に対し、データの表示指示や出力指示を行なう。
９は外部記憶装置インターフェイスであり、ＨＤ、ＦＤ、ＣＤ−ＲＯＭ、ＭＤなどの外部記憶装置１０に対するデータの入出力を行なうものである。
【００１７】
本実施形態では、処理プログラム３ａやパラメータ３ｂがＲＯＭ３にあるものとし、また、処理対象となる各データ格納領域４ａ〜４ｉがＲＡＭ４にあるものとして説明を行なうが、これら全て又は一部を、外部記憶装置１０に配置することも可能であり、更に、必要に応じて、外部記憶装置１０からＲＡＭ４にロードして使用することも可能である。また、ＣＰＵ１のキャッシュメモリにこれらを配置することも可能である。
【００１８】
図２は、図１に示した処理プログラム３ａの構成要件と、その構成要件と図１に示したデータ格納領域４ａ〜４ｉに格納されるデータとの関係と、を示す図である。
【００１９】
図２において、２００は、入力インターフェイス５を介して入力されるデータを扱うＧＵＩ入力処理部である。オペレータはこのＧＵＩ入力処理部２００によりデータの入力や編集ができるようになっている。
【００２０】
２０１は、実行可能な設計図面を外部記憶装置１０内から読み出し、構文解析を行なう実行可能設計図面解析部である。この実行可能設計図面解析部２０１によって、処理プログラム３ａが実行可能設計図面を解釈することを可能にする。なお、設計図面は、プラットフォームに依存せず、オブジェクト指向であるのが好ましい。
２０２は、外部記憶装置１０内から実行ファイルの動作するＯＳや、プログラミング言語や、利用フレームワークといったプラットフォームデータを読み込み、構文解析を行なうプラットフォーム依存解析部である。このプラットフォーム依存解析部２０２によって、処理プログラム３ａがプラットフォーム情報を解釈することを可能にする。
【００２１】
２０３は、実行可能設計図面解析部２０１により生成された設計図面情報である。この設計図面情報２０３は、処理プログラム３ａが解釈することが可能な情報である。
２０４は、プラットフォーム依存解析部２０２により生成されたプラットフォーム情報である。このプラットフォーム情報は、処理プログラム３ａが解釈することが可能な情報である。
２０５は、全ての設計図面情報２０３を解析することで、利用されていないクラス、メソッド、イベントや、書き込みアクセスインスタンス、クラスの有無といった最適化が可能な箇所を特定する最適化可能箇所抽出部２０５である。この最適化可能箇所抽出部２０５は、実行可能な設計図面内における最適化が可能な箇所を絞り込む。
【００２２】
２０６は、プラットフォーム情報２０４から、３２ｂｉｔ演算の禁止や、使用メモリ量の制限といった、最適化の際に行なうべき制約を解析する実行環境制約解析部である。この実行環境制約解析部２０６は、速度やメモリ量といったトレードオフの選択が必要となる情報を抽出する。
２０７は、最適化可能箇所抽出部２０５より生成された最適化可能箇所である。この最適化可能箇所２０７は、最適化が可能な箇所を特定するための情報である。
２０８は、実行環境制約部２０６より抽出された実行環境制約である。この実行環境制約２０８は、実行環境における制約条件の情報である。
【００２３】
２０９は、最適化可能箇所２０７と実行環境制約２０８とを用いて、プログラムコードやプロジェクトファイルを自動生成する際にどのような最適化が効果的且つ適用可能かを示す情報（最適化予定リスト）を抽出する最適化予定リスト抽出部である。
２１０は、最適化予定リスト抽出部２０９より抽出された最適化予定リストである。上述したように、最適化予定リスト２１０は、プログラムコードやプロジェクトファイルを自動生成する際にどのような最適化が効果的且つ適用可能かを示す情報である。
２１１は、設計図面情報２０３と、プラットフォーム情報２０４と、最適化予定リスト２１０とを用いて、プログラムコードを自動生成するプログラムコード生成部である。このプログラムコード生成部２１１によって、設計図面の依存関係や実行対象となるプラットフォームに応じて最適化されたプログラムコードの自動生成が可能になる。
【００２４】
２１２は、設計図面情報２０３と、プラットフォーム依存情報２０４と、最適化予定リスト２１０とを用いて、プログラムコードやライブラリを管理するプロジェクトファイルを自動生成するプロジェクトファイル生成部である。
２１３は、プログラムコード生成部２１１により生成されたプログラムコードである。
２１４は、プロジェクトファイル生成部２１２により生成されたプロジェクトファイルである。
２１５は、プログラムコード２１３から参照されるライブラリである。
２１６は、プロジェクトファイル２１４が管理するプログラムコード２１３と、プロジェクトファイル２１４と、ライブラリ２１５とを用いて、実行可能形式２１７を生成するコード・コンパイラである。
【００２５】
次に、図３のフローチャートを参照しながら、本実施形態のプログラムコード生成装置の処理手順の概要の一例を説明する。本実施の形態におけるプログラムコード生成装置の処理は、ＲＯＭ３に記憶された処理プログラム３ａをＲＡＭ４に展開し、ＣＰＵ１が処理プログラム３ａに基づいて処理を実行することによって達成される。
まず、ステップＳ３０１にて起動したプログラムコード生成装置は、ステップＳ３０２において、外部記憶装置１０などに記憶されている実行可能な設計図面を読み込み、実行可能設計図面解析部２０１により設計図面情報２０３を生成する。
【００２６】
そして、ステップＳ３０３において、プラットフォーム情報がある場合にはステップＳ３０４へ、プラットフォーム情報がない場合にはステップＳ３０６へ分岐する。プラットフォーム情報がない場合には、ステップＳ３０６において、最適化可能個所抽出部２０５は、設計図面情報２０３から図面の依存関係を解析することで最適化可能箇所２０７を生成する。
【００２７】
一方、プラットフォーム情報がある場合には、ステップＳ３０４において、外部記憶装置１０などに記憶されているプラットフォーム情報を読み込み、プラットフォーム依存解析部２０２によりプラットフォーム情報２０４を生成する。そして、ステップ３０５において、実行環境制約解析部２０６は、プラットフォーム情報２０４から実行環境制約情報を解析することで実行環境制約２０８を生成する。その後、上述したように、ステップＳ３０６において最適化可能箇所２０７を生成する。
【００２８】
最適化可能箇所２０７が生成されると、ステップＳ３０７において、最適化予定リスト生成部２０９は、最適化可能箇所２０７と実行環境制約２０８とを用いて、プログラムコードを生成するときに最適化を施すために必要な情報のリストである最適化予定リスト２１０を生成する。このとき、実行環境制約２０８がない場合や、最適化予定リスト２１０の作成に影響がない場合には、最適化可能箇所２０７と最適化予定リスト２１０とは同じ情報であっても構わない。
【００２９】
次に、ステップＳ３０８において、設計図面情報２０３と、プラットフォーム情報２０４と、最適化予定リスト２１０とを用いて、プロジェクトファイル生成部２１２は、プロジェクトファイル２１４を生成する。
次に、ステップ３０９において、設計図面情報２０３と、プラットフォーム情報２０４と最適化予定リスト２１０とを用いて、プログラムコード生成部２１１は、プログラムコード２１３を生成する。プログラムコード２１３の生成に必要なプラットフォーム情報２０４は、プラットフォームに依存した制約情報である。具体的にプラットフォーム情報２０４は、例えば、タスクやスレッドをどこのドメインやクラスなどにマッピングさせるかを示す情報や、実行スピードとメモリ容量との何れを優先させるのかを示す情報などである。
【００３０】
最後に、ステップ３１０において、コード・コンパイラ２１６は、プロジェクトファイル２１４を基にして、プログラムコード２１３とライブラリ２１５に対して、コンパイルとリンクを実施し、実行可能形式２１７を生成する。
【００３１】
図４は、設計図面情報２０３の一例を示した図である。図４では、設計図面情報２０３のうち、一部分のみの情報の一例を示している。
図４において、７０１は、クラス「Ａ」であり、非公開属性としてｉｎｔ型の「ａ」、公開関数として戻り値がｖｏｉｄ型の「ｆｕｎｃ＿ａ」、非公開関数として戻り値がｉｎｔ型の「ｐｒｉ＿ｆｕｎｃ」という構成を示している。
７０２は、クラス「Ｂ」であり、公開関数として戻り値がｖｏｉｄ型の「ｆｕｎｃ＿ｂ」という構成を示している。
なお、図４では、クラス７０１とクラス７０２が関連を持つことを示している。
【００３２】
７０４は、クラス７０２のインスタンスがある状態のときの動作定義である。この動作定義７０４は、「ｅｖｅｎｔＢ１」というイベントによりメソッド「ｆｕｎｃ＿ｂ」を実行し、且つ、メソッド「ｆｕｎｃ＿ｂ」の内部動作の指示として「クラス「Ａ」のｆｕｎｃ＿ａメソッドを実行する」ということを示している。７０５は、クラス７０１のメソッドである「ｆｕｎｃ＿ａ」の内部動作の定義である。この内部動作の指示として、属性「ａ」を用いた計算が定義されている。７０６は、クラス７０１のメソッド「ｐｒｉ＿ｆｕｎｃ」の内部動作の定義である。
【００３３】
図５は、最適化可能個所２０７または最適化予定リスト２１０の一例を示した図である。
図５において、８０１は、プログラムコードを生成するときに削除する対象のメソッドの一覧（削除対象メソッド）である。８０２は、プログラムコードを生成するときにインライン展開（設計図面上での関数またはサブルーチン呼び出しに対するコードとして、呼び出される関数またはサブルーチンの中身を直接出力する処理）する対象のメソッドの一覧（インライン対象メソッド）である。８０３は、設計図面情報２０３では元々非公開で定義されている属性を、プログラムコードを生成するときに、公開に変更して定義する属性の一覧（公開対象属性）を示している。
【００３４】
８０４は、設計図面情報２０３では元々非公開で定義されているメソッドを、プログラムコードを生成するときに、公開に変更して定義するメソッドの一覧（公開対象メソッド）を示している。なお、ここでは、最適化可能個所抽出部２０５により抽出された最適可能化個所２０７と、最適化予定リスト作成部２０９により作成された最適化予定リスト２１０とは、同じ情報として扱う。つまり、実行環境制約２０８が無かった場合を例に挙げて説明する。
【００３５】
図６は、本実施形態における最適化を設計図面情報２０３に施さないで自動生成されたプログラムコードの一例を示す図である。
図６において、９０１、９０２は、クラス７０１と、内部動作の定義７０５、７０６の情報から生成されたプログラムコードの一例である。９０３は、クラス７０２と、動作定義７０４の情報から生成されたプログラムコードの一例である。なお、ここでは、説明を簡潔にするために、説明する上で必要な最低限の情報のみを示している。
【００３６】
例えば、図４において、属性やメソッド以外の設計図面情報２０３がクラス７０１、７０２に存在していても構わないがここでは表記していない。また、各クラスやメソッドがプログラムコードとして生成される場合に、そのプログラムコードがどこのファイルに展開されるか等の情報についての設計図面情報２０３も存在している。本実施形態では、これら全部の設計図面情報２０３を用いてプログラムコードは自動生成されるものとする。
【００３７】
図７は、本実施形態における最適化を設計図面情報２０３に施して自動生成されたプログラムコードの一例を示す図である。つまり、図７は、図５に示した最適化予定リスト２１０を加味して自動生成されたプログラムコードの一例を示している。
図７において、１００１は、クラス７０１と、削除対象メソッド８０１と、インライン対象メソッド８０２と、公開対象属性８０３の情報から生成されたプログラムコードの一例である。１００２は、クラス７０２と、動作定義７０４と、インライン対象メソッド８０２と、公開対象属性８０３の情報から生成されたプログラムコードの一例である。
【００３８】
ここで、図４に示した設計図面情報２０３と、図５に示した最適化予定リスト２１０と、図７に示したプログラムコードの詳細に関して、ＣＰＵ１が処理プログラム３ａに基づいて実行する図８〜図１０の動作処理フローチャートを参照しながら説明する。
【００３９】
図８のフローチャートによる処理は、図３に示したステップＳ３０７内での処理である。この図８のフローチャートによるが開始するのは、設計図面情報２０３における１つのメソッドについて注目し最適化が可能かどうかの判断を行なう場合である。つまり、設計図面情報２０３の全てのメソッドについて、この図８のフローチャートが繰り返し実施されることになる。
【００４０】
まず、ステップＳ１１０１では、ＣＰＵ１は、対象メソッドについて設計図面情報２０３内の全情報を解析して、その対象メソッドが何回呼び出されているかをカウントする。具体的に非公開メソッドの場合についてはそのメソッドが所属するクラス内における設計図面情報２０３を解析する対象範囲とし、公開メソッドの場合については全クラスの設計図面情報２０３を解析する対象範囲とし、対象範囲から対象メソッドが呼び出されている回数をカウントする。処理の詳細については、図９のフローチャートを用いて説明する。
【００４１】
次に、ステップＳ１１０２では、ＣＰＵ１は、ステップＳ１１０１にて解析した対象メソッドの呼び出し回数が０回であったか否かを判定する。この判定の結果、０回の呼び出し、つまり対象メソッドがどこからも使われていないメソッドであった場合には、ステップＳ１１０４へ進む。一方、１回以上の呼び出し、つまり対象メソッドがどこかで使われているメソッドであった場合には、ステップＳ１１０３へ進む。
【００４２】
そして、ステップＳ１１０４では、ＣＰＵ１は、対象メソッドが使われていないということを最適化予定リスト２１０へ記憶する。図５に示した削除対象メソッド８０１では、使われていないメソッド、つまりプログラムコードの生成から削除対象となるメソッドのリストに登録されることになる。この削除対象メソッド８０１のリストに登録されたメソッドは、設計図面情報２０３には存在するが、プログラムコード生成部２１１によって生成されるプログラムコード２１３には存在しないことになる。
【００４３】
図４に示した例では、クラス７０１では、「ｐｒｉ＿ｆｕｎｃ」メソッドがこの削除対象メソッドにあたる。よって、図６に示した最適化を施さない場合のプログラムコードでは、プログラムコード９０１に、「ｐｒｉ＿ｆｕｎｃ」メソッドのプログラムコードが生成されているが、図７に示した最適化を施す場合のプログラムコードでは、プログラムコード１００１に、「ｐｒｉ＿ｆｕｎｃ」メソッドは生成されていない。
【００４４】
ステップＳ１１０３では、ＣＰＵ１は、ステップＳ１１０１にて解析した対象メソッドの呼び出し回数が１回であったか否かを判定する。１回の呼び出し、つまり対象メソッドが１箇所だけからしか使われていないメソッドであった場合には、ステップＳ１１０６へ進む。一方、２回以上の呼び出し、つまり対象メソッドが複数箇所から使われているメソッドであった場合には、ステップＳ１１０５へ進む。なお、ステップＳ１１０３では、メソッドの呼び出し回数が１回以下か否かを判断基準としているが、ＲＡＭ４の残容量に余裕がある場合、２回,３回などを判断基準としてもよい。この場合、ＲＡＭ４の残容量を参照し、容量が多くなるに従って判断基準とすべき読出し回数を増やす処理が行われることになる。
【００４５】
そして、ステップＳ１１０６では、ＣＰＵ１は、対象メソッドが１箇所だけからしか使われていないということを最適化予定リスト２１０へ記憶し、且つ、その対象メソッドを使っている１箇所にその対象メソッドをインライン展開してコード生成する（ソース上での関数またはサブルーチン呼び出しに対するコードとして、呼び出される関数またはサブルーチンの中身を直接出力する）ための処理をする。処理の詳細については、図１３のフローチャートにて説明する。
【００４６】
また、ステップＳ１１０５では、対象メソッドについては最適化せずにメソッドを関数として展開する、すなわち、メソッドを関数の呼出しに用いられる命令のプログラムコードとして生成する処理を行うこと決定する。なお、本実施形態においては、最適化予定リスト２１０に対象メソッドを登録しないことでプログラムコードを生成すると決定しているが、最適化予定リスト２１０に「最適化しないメソッド」のリストとして対象メソッドを記憶することも可能である。
【００４７】
次に、図９のフローチャートを参照しながら、図８に示したステップＳ１１０１（メソッドの呼び出し回数カウント処理）の詳細の一例について説明する。
まず、ステップＳ１２０１では、対象メソッドが所属するクラスと関連のあるクラスを設計図面情報２０３から抽出する。例えば、図４に示したクラス７０１における「ｆｕｎｃ＿ａ」メソッドが対象メソッドの場合には、関連のあるクラスは所属するクラス７０１と、クラス７０２であることを抽出する。また、「ｐｒｉ＿ｆｕｎｃ」メソッドが対象メソッドの場合には、この「ｐｒｉ＿ｆｕｎｃ」メソッドが非公開メソッドであることから関連のあるクラスは所属するクラス７０１のみであることを抽出する。
【００４８】
次に、ステップＳ１２０２では、ステップＳ１２０１で抽出した全てのクラスについて、対象メソッドが使われているかどうかの走査が終わったかどうかを判定する。この判定の結果、走査が終わっていない場合にはステップＳ１２０３へ進む。一方、走査が終わった場合には、そのままこのフローチャートを抜けて、図８に示したステップＳ１１０２に進む。
【００４９】
一方、走査が終わっておらずステップＳ１２０３に進むと、ステップＳ１２０１で抽出したクラスに関する設計図面情報２０３を走査し、対象メソッドが使われているかどうかを判別し、使われている場合には使われている回数分カウントアップしていく。
【００５０】
図４に示したクラス７０１の対象メソッドが「ｆｕｎｃ＿ａ」の場合には、ステップＳ１２０１で、関連のあるクラスはクラス７０１とクラス７０２との判定されたことから、それらクラス７０１、７０２の設計図面情報２０３を走査することになる。その結果、クラス７０２の動作定義７０４において対象メソッドとして、クラス７０１の「ｆｕｎｃ＿ａ」が使用されていることが確認され、使われている回数が１だけカウントアップされる。
【００５１】
また、図４に示したクラス７０１の対象メソッドが「ｐｒｉ＿ｆｕｎｃ」の場合には、ステップＳ１２０１で、関連のあるクラスはクラス７０１と判定されたことから、そのクラス７０１の設計図面情報２０３を走査することになる。その結果、対象メソッドとして、クラス７０１の「ｐｒｉ＿ｆｕｎｃ」が使用されていないことが確認され、使われている回数が０にセットされる。
【００５２】
次に、図１０のフローチャートを参照しながら、図８に示したステップＳ１１０６（メソッドをインライン展開するための処理）の詳細の一例について説明する。図４に示したクラス７０１では、呼び出し回数が１個所であると確認された対象メソッド（「ｆｕｎｃ＿ａ」）のときに、このフローチャートが開始する。
【００５３】
まず、ステップＳ１３０１では、対象メソッドをインライン展開するための登録を最適化予定リスト２１０に対して行なう。図５に示した例では、インライン対象メソッド８０２のリストに「クラスＡのｆｕｎｃ＿ａ」がインライン展開の対象メソッドであると登録される。
【００５４】
次に、ステップＳ１３１０では、対象メソッドが、所属するクラス以外でも呼び出されているか否かを判定し、所属するクラス以外でも呼び出されている場合にはステップＳ１３０２へ進む。図５に示した例では、インライン対象メソッド８０２である「クラスＡのｆｕｎｃ＿ａ」は、図４に示した動作定義７０４より、クラス７０２（クラスＢ）から呼び出されていると判断され、ステップＳ１３０２へ進むことになる。もし所属するクラス以外から呼び出されていない場合には、インライン展開される箇所はクラス内であり、対象メソッドが非公開な属性やメソッドを操作していたとしても、その属性やメソッドを操作するスコープには影響しないので、そのまま図１０に示すフローチャートを抜けることになる。
【００５５】
ステップＳ１３０２では、設計図面情報２０３を参照して、対象メソッドが非公開属性を操作しているかどうかを確認する。この確認の結果、非公開属性を操作している場合にはステップＳ１３０３へ進み、非公開属性を操作していない場合にはステップＳ１３０４へ進む。図３に示した例では、クラス７０１に所属する対象メソッド「ｆｕｎｃ＿ａ」により、クラス７０１に所属する非公開属性のうち「ｉｎｔ型のａ」が操作されていると判断されステップＳ１３０３へ進むことになる。
【００５６】
ステップＳ１３０３では、対象メソッドが操作している非公開属性を、対象メソッドが所属するクラス以外のクラスにインライン展開するので、非公開属性を公開属性に変更するための登録を、最適化予定リスト２１０に対して行なう。図５に示した公開対象属性８０３では、非公開属性であった属性「ａ」を公開属性に変更することを登録している。
【００５７】
ステップＳ１３０４では、設計図面情報２０３を参照して、対象メソッドが非公開関数を操作しているかどうかを確認する。この確認の結果、非公開関数を操作している場合にはステップＳ１３０５へ進む。図４に示した例では、クラス７０１に所属する対象メソッドである「ｆｕｎｃ＿ａ」ではクラス７０１に所属する非公開関数は操作されていないと判断され、そのまま図１０のフローチャートを抜けることになる。
【００５８】
ステップＳ１３０５では、対象メソッドが操作している非公開関数を、対象メソッドが所属するクラス以外のクラスにインライン展開するために、非公開関数を公開関数に変更するための登録を最適化予定リスト２１０に対して行なう。図５に示した公開対象メソッド８０４では、本ステップで対象とするメソッドがないことにより、リストに登録されずに空の状態であることを示している。
【００５９】
図３、図８〜図１０のフローチャートの処理によって、設計図面情報２０３より最適化予定リスト２１０が生成され、図３のステップＳ３０９の処理により設計図面情報２０３や最適化予定リスト２１０の情報を基に、最適化されたプログラムコードが生成されることになる。
【００６０】
以上のように本実施形態では、設計図面情報２０３に存在するメソッドにおいて、呼び出しが行なわれないメソッドと、１回しか呼び出されることがないメソッドに関する情報を収集し、呼び出しが行なわれないメソッドに関してはプログラムコードに関数定義を生成しない。一方、１回しか呼び出されることがないメソッドに関しては、メソッドがアクセスする資源に対してメソッドの呼び出し元がアクセスできるように属性を変更し、且つ呼び出し元へメソッドをインライン展開するプログラムコードを生成する。このようにすることで、最終的にコンパイル・リンクされた実行可能形式のファイルが、設計図面情報２０３にある使用されない関数を含むこともないのでメモリ使用量を削減でき、設計図面情報２０３上にある関数コールによるオーバーヘッドも少なくなることにより処理を高速化することができる。
【００６１】
なお、前述した本実施形態で示したフローチャートによる処理手順は、一例であり、本発明はこれらの処理手順に限定されることはなく、本発明の結果を満たす限りいかなる手順の組み合わせも可能である。例えば、複数の処理をまとめることも、処理を細分化することも可能であり、また、各処理を個々に切り出してひとつの機能要素として単体として機能することも可能である。さらに、フローチャートに示した処理とフローチャートに示している処理以外の処理とを組み合わせて使用することも可能である。
【００６２】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。本実施形態では、設計図面情報２０３の読み出しが行なわれないメソッドや、１回しか呼び出されることがないメソッドに関する情報をオペレータに通知するようにしている点が第１の実施形態と異なる。したがって、本実施形態の説明において、第１の実施形態と同一の部分については、図１〜図１０に付した符号と同一の符号を付すなどして詳細な説明を省略する。
【００６３】
図１１は、最適化予定リスト作成部２０９により最適化予定リスト２１０を作成する前に、最適化可能箇所２０７をオペレータに通知する場合に、出力装置８にＧＵＩで表示される最適化設定ダイアログ１４０１の一例を示す図である。
【００６４】
図１４において、１４０２は、設計図面情報２０３でどこからも呼び出されていない削除対象の候補のメソッドをリスト形式で表示する削除対象メソッド表示部である。１４０３は、設計図面情報２０３で１個所だけから呼び出されているインライン展開対象の候補のメソッドをリスト形式で表示するインライン展開対象メソッド表示部である。
【００６５】
例えば、最適化可能箇所抽出部により、設計図面情報２０３から最適化可能箇所２０７を抽出した結果に基づいて、１回も使用されていないメソッドが削除対象メソッド表示部１４０２に削除対象の候補として表示され、１箇所からだけしか呼び出されていないメソッドがインライン展開対象メソッド表示部１４０３にインライン展開対象メソッドの候補として表示される。
【００６６】
オペレータは、削除対象メソッド表示部１４０２やインライン展開対象メソッド表示部１４０３の各メソッドに対応したチェックボックスを設定（オン）したり、設定を解除（オフ）したりすることができる。最終的にＯＫボタン１４０５を押した時点で設定されているメソッドについては、最適化可能箇所２０７の情報が、そのまま最適化予定リスト２１０にも登録され、設定が解除されたメソッドについては、最適化可能箇所２０７の情報から最適化予定リスト２１０への登録はなされない。
【００６７】
また、最適化可能箇所抽出部は、例えば、オペレータが削除対象メソッド表示部１４０２やインライン展開対象メソッド表示部１４０３の設定がオン・オフされる度に、「コードステップ量の削減量」や「予想ＲＯＭ使用削減量」や「予想実行速度アップ率」などの情報を、表示部１４０４にリアルタイムに表示することでオペレータに通知する。オペレータはこれらの情報を基に、削除対象メソッド表示部１４０２やインライン展開対象メソッド表示部１４０３に表示された候補の各メソッドに対してプログラムコードを生成する際の最適化を実際に行なうかどうかを判断する情報として参考にすることができる。表示部１４０４に表示するような情報の計算方法は、例えば、ツール独自の計算方法など、どのようなものであってもよく、最適化可能箇所抽出部はその算出された情報をオペレータへ通知するだけである。
【００６８】
以上のように本実施形態では、設計図面情報２０３の呼び出しが行なわれないメソッドや、呼び出しが１回しか呼び出されることがないメソッドに関する情報をオペレータに通知するようにしたので、前述した第１の実施形態の効果に加え、オペレータは、最適化を行なう候補として表示されたメソッドに関してプログラムコードの生成に関する最適化を行なうのか否かの選択をすることができ、使用メモリ容量や実行スピードのトレードオフに関する検討を行なうことができる。また、設計図面情報上の使用されていないメソッドや呼び出しが１回しか呼び出されることがないメソッドに関する情報をオペレータに通知することで、オペレータの消し忘れのメソッドやソフトウェアの設計自体を見直す機会をオペレータに与えることができる。
【００６９】
（本発明の他の実施形態）
上述した実施形態の機能を実現するべく各種のデバイスを動作させるように、該各種デバイスと接続された装置あるいはシステム内のコンピュータに対し、前記実施形態の機能を実現するためのソフトウェアのプログラムコードを供給し、そのシステムあるいは装置のコンピュータ（ＣＰＵあるいはＭＰＵ）に格納されたプログラムに従って前記各種デバイスを動作させることによって実施したものも、本発明の範疇に含まれる。
【００７０】
また、この場合、前記ソフトウェアのプログラムコード自体が上述した実施形態の機能を実現することになり、そのプログラムコード自体、及びそのプログラムコードをコンピュータに供給するための手段、例えば、かかるプログラムコードを格納した記録媒体は本発明を構成する。かかるプログラムコードを記憶する記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００７１】
また、コンピュータが供給されたプログラムコードを実行することにより、上述の実施形態の機能が実現されるだけでなく、そのプログラムコードがコンピュータにおいて稼働しているＯＳ（オペレーティングシステム）あるいは他のアプリケーションソフト等と共同して上述の実施形態の機能が実現される場合にもかかるプログラムコードは本発明の実施形態に含まれることは言うまでもない。
【００７２】
さらに、供給されたプログラムコードがコンピュータの機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに格納された後、そのプログラムコードの指示に基づいてその機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部または全部を行い、その処理によって上述した実施形態の機能が実現される場合にも本発明に含まれることは言うまでもない。
【図面の簡単な説明】
【００７３】
【図１】本発明の第１の実施形態を示し、プログラムコード生成装置の構成の一例を示すブロック図である。
【図２】本発明の第１の実施形態を示し、処理プログラムの構成要件と、その構成要件とデータ格納領域格納されるデータとの関係とを示す図である。
【図３】本発明の第１の実施形態を示し、プログラムコード生成装置の処理手順の概要の一例を説明するフローチャートである。
【図４】本発明の第１の実施形態を示し、設計図面情報の一例を示した図である。
【図５】本発明の第１の実施形態を示し、最適化予定リスト（最適化可能個所）の一例を示した図である。
【図６】本発明の第１の実施形態を示し、最適化を設計図面情報に施さないで自動生成されたプログラムコードの一例を示す図である。
【図７】本発明の第１の実施形態を示し、最適化を設計図面情報に施して自動生成されたプログラムコードの一例を示す図である。
【図８】本発明の第１の実施形態を示し、最適化情報を生成する際の処理の一例を説明するフローチャートである。
【図９】本発明の第１の実施形態を示し、メソッドの呼び出し回数をカウントする際の処理の一例を説明するフローチャートである。
【図１０】本発明の第１の実施形態を示し、メソッドをインライン展開する際の処理の一例を説明するフローチャートである。
【図１１】本発明の第２の実施形態を示し、最適化設定ダイアログの一例を示す図である。
【符号の説明】
【００７４】
２０１  実行可能設計図面解析部
２０２  プラットフォーム依存解析部
２０３  設計図面情報
２０４  プラットフォーム情報
２０５  最適化可能箇所抽出部
２０６  実行環境制約解析部
２０７  最適化可能箇所
２０８  実行環境制約
２０９  最適化予定リスト作成部
２１０  最適化予定リスト
２１１  プログラムコード生成部
２１２  プロジェクトファイル生成部
２１３  プログラムコード
２１４  プロジェクトファイル
２１５  ライブラリ
２１６  コード・コンパイラ
２１７  実行可能形式
７０１、７０２  クラス
７０４  動作定義
７０５、７０６  内部動作の定義
８０１  削除対象メソッド
８０２  インライン対象メソッド
８０３  公開対象属性
８０４  公開対象メソッド
【図１】
2006285584.tif 000003
【図２】
2006285584.tif 000004
【図３】
2006285584.tif 000005
【図４】
2006285584.tif 000006
【図５】
2006285584.tif 000007
【図６】
2006285584.tif 000008
【図７】
2006285584.tif 000009
【図８】
2006285584.tif 000010
【図９】
2006285584.tif 000011
【図１０】
2006285584.tif 000012
【図１１】
2006285584.tif 000013