(57)【要約】【課題】プログラムの生産性を下げることなく、実行効率の高いプログラムを生産するための仕組みが求められている。【解決手段】本発明は、文字列の処理を含むプログラムを実行するコンピュータ・システムにおいて、文字列に対応付けられた上記文字列の特性を表す特性情報を用いて、該プログラム実行時における文字列の処理を最適化する方法を提供する。該方法は、第１の文字列についての特性と該第１の文字列に関する演算処理とから、上記第１の文字列及び上記演算処理の結果である第２の文字列のうちの少なくとも１についての文字列の特性情報を判定するステップと、上記判定された特性情報を、上記少なくとも１の文字列に対応付けるステップとを含む。本発明はまた、文字列の処理を含むプログラムを実行し、上記特性情報を用いて、該プログラム実行時における文字列の処理を最適化するコンピュータ・システム及びコンピュータ・プログラムを提供する。【選択図】図１
2010277440.tif 000002
【特許請求の範囲】
【請求項１】
文字列の処理を含むプログラムを実行するコンピュータ・システムにおいて、文字列に対応付けられた前記文字列の特性を表す特性情報を用いて、前記プログラム実行時における前記文字列の処理を最適化する方法であって、
第１の文字列についての特性と該第１の文字列に関する演算処理とから、前記第１の文字列及び前記演算処理の結果である第２の文字列のうちの少なくとも１についての文字列の特性情報を判定するステップと、
前記判定された特性情報を、前記少なくとも１の文字列に対応付けるステップと
を含む、前記方法。
【請求項２】
前記特性情報が対応付けられた文字列に関する処理を実行する場合に、前記対応付けられた特性情報に応じて、最適化された処理を選択して前記処理を実行するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記演算処理が、少なくとも１の第１の文字列を代入する少なくとも１の第２の文字列を生成し、該生成時に前記少なくとも１の第１の文字列を１文字ずつ逐次処理することを含み、
前記判定するステップが、前記逐次処理を実行するステップと該逐次処理とともに前記逐次処理される文字を検査するステップとをさらに含み、それによって前記少なくとも１の第２の文字列の特性情報が判定される、請求項１に記載の方法。
【請求項４】
前記演算処理が、特性情報が不明である又は対応付けられていない少なくとも１の前記第１の文字列を１文字ずつ逐次処理することを含み、
前記判定するステップが、前記逐次処理を実行するステップと該逐次処理とともに前記逐次処理する文字を検査するステップとをさらに含み、それによって前記少なくとも１の特性情報が判定される、請求項１に記載の方法。
【請求項５】
前記演算処理が、少なくとも１の第１の文字列についての演算処理であり、
前記判定するステップが、前記少なくとも１の第１の文字列それぞれについての特性情報と前記演算処理とから、少なくとも１の第２の文字列の特性情報を判定するステップを含む、請求項１に記載の方法。
【請求項６】
前記文字列の特性を表す特性情報が、前記文字列が文字集合に属する文字を含むこと、含まないこと又は含むかどうか不明であることを表す少なくとも１の第１の情報と、前記文字列が前記文字集合に属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す第２の情報とを含む、請求項１に記載の方法。
【請求項７】
前記文字集合が少なくとも２の第１の文字集合をまとめて表す第２の文字集合であり、該少なくとも２の第１の文字集合それぞれに含まれる文字が重複せず、前記第１の情報それぞれが、前記文字列が前記第１の文字集合それぞれに属する文字を含むこと、含まないこと又は含むかどうか不明であることを表し、前記第２の情報が、前記文字列が前記第１の文字集合全てに属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す、請求項６に記載の方法。
【請求項８】
前記文字集合が少なくとも２の第１の文字集合をまとめて表す第２の文字集合であり、該少なくとも２の第１の文字集合それぞれに含まれる文字が重複せず、前記第１の情報が、前記文字列が前記第２の文字集合に属する文字を含むこと、含まないこと又は含むことが不明であることを表し、前記第２の情報が、前記文字列が前記第２の文字集合に属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す、請求項６に記載の方法。
【請求項９】
前記第１の情報及び前記第２の情報がビット列で表され、ビットそれぞれが１つの文字集合又は文字集合のいずれにも属さない文字の集合に対応する、請求項６に記載の方法。
【請求項１０】
前記演算処理が、第１の特性情報が対応付けられた第１の文字列と、第２の特性情報が対応付けられた第１の文字列とを結合する演算処理であり、
前記判定するステップが、前記第１の特性情報と前記第２の特性情報との論理和によって求められる特性情報を第２の文字列の特性情報と判定するステップを含む、請求項９に記載の方法。
【請求項１１】
前記演算処理が、第１の特性情報が対応付けられた第１の文字列から第２の特性情報が対応付けられた第１の文字列を削除する演算処理であり、
前記判定するステップが、前記第１の特性情報を第２の文字列の特性情報と判定するステップを含む、請求項９に記載の方法。
【請求項１２】
前記演算処理が、第１の特性情報が対応付けられた第１の文字列から第２の特性情報が対応付けられた第１の文字列を削除する演算処理であり、該演算処理によって前記第２の特性情報が表す文字集合に属する文字が前記第１の特性情報が対応付けられた第１の文字列に含まれなくなる場合、
前記判定するステップが、前記第１の特性情報と前記第２の特性情報との論理積によって求められる特性情報を第１の文字列の特性情報と判定するステップを含む、請求項９に記載の方法。
【請求項１３】
前記第１の文字列及び前記演算処理の結果である第２の文字列のうちの少なくとも１についての文字列の特性情報を判定するステップが、請求項１０に記載の判定するステップ、請求項１１に記載の判定するステップ及び請求項１２に記載の判定するステップの少なくとも２を組み合わせて上記特性情報を判定するステップを含む、請求項９に記載の方法。
【請求項１４】
前記文字集合が、大文字の集まり、小文字の集まり、数字の集まり、２バイト文字の集まり、ローマ字の集まり、同一の文字コード文字の集まり、正規表現の特殊文字の集まり、８ビットで表現できる文字の集まり及びＵＲＬエンコードにおける特殊文字の集まりからなる群から選択される少なくとも１を表す、請求項６に記載の方法。
【請求項１５】
前記演算処理が、少なくとも１の第１の文字列を代入する少なくとも１の第２の文字列を生成することを含み、
前記判定するステップが、前記少なくとも１の第１の文字列についての特性情報から前記第２の文字列の特性情報を判定するステップを含む、請求項１に記載の方法。
【請求項１６】
前記演算処理が、文字列を生成し、該生成時に少なくとも１の第１の文字列を少なくとも１の第２の文字列に１文字ずつ代入する処理を含み、
前記判定するステップが、前記代入する処理を実行するステップと該代入とともに前記代入する文字を検査するステップとをさらに含み、それによって前記少なくとも１の第２の文字列の特性情報が判定される、請求項１に記載の方法。
【請求項１７】
前記文字列がオブジェクトとして扱われるプログラム言語において、前記文字列に関する演算処理が前記オブジェクトに関する演算処理であり、前記特性情報が前記オブジェクトに含まれる、請求項１に記載の方法。
【請求項１８】
文字列の処理を含むプログラムを実行し、文字列に対応付けられた上記文字列の特性を表す特性情報を用いて、上記プログラム実行時における上記文字列の処理を最適化するコンピュータ・システムであって、
第１の文字列についての特性と該第１の文字列に関する演算処理とから、前記第１の文字列及び前記演算処理の結果である第２の文字列のうちの少なくとも１についての文字列の特性情報を判定する判定部と、
前記判定された特性情報を、前記少なくとも１の文字列に対応付ける対応付け部と
を含む、前記コンピュータ・システム。
【請求項１９】
文字列オブジェクトに含まれる文字列の処理を含むプログラムを実行するコンピュータ・システムにおいて、文字列に対応付けられた前記文字列の特性を表す特性情報を用いて、前記プログラム実行時における前記文字列の処理を最適化する方法であって、
第１の文字列についての特性と該第１の文字列に関する演算処理とから、前記第１の文字列及び前記演算処理の結果である第２の文字列のうちの少なくとも１についての文字列の特性情報を判定するステップと、
前記判定された特性情報を、前記少なくとも１の文字列に対応付けるステップと、
前記特性情報が対応付けられた文字列に関する処理を実行する場合に、前記対応付けられた特性情報に応じて、最適化された処理を選択して前記処理を実行するステップと
を含み、下記（１）〜（３）の少なくとも１つの演算処理を用いて、前記特性情報の判定が行われる、前記方法：
（１）前記演算処理が、少なくとも１の第１の文字列を代入する少なくとも１の第２の文字列を含む文字列オブジェクトを生成し、該生成時に前記少なくとも１の第１の文字列を１文字ずつ逐次処理することを含み、
前記判定するステップが、前記逐次処理を実行するステップと該逐次処理とともに前記逐次処理される文字を検査するステップとをさらに含み、それによって前記少なくとも１の第２の文字列の特性情報が判定され、
（２）前記演算処理が、特性情報が不明である又は対応付けられていない少なくとも１の前記第１の文字列を１文字ずつ逐次処理することを含み、
前記判定するステップが、前記逐次処理を実行するステップと該逐次処理とともに前記逐次処理する文字を検査するステップとをさらに含み、それによって前記少なくとも１の特性情報が判定され、
（３）前記演算処理が、少なくとも１の第１の文字列についての演算処理であり、
前記判定するステップが、前記少なくとも１の第１の文字列それぞれについての特性情報と前記演算処理とから、少なくとも１の第２の文字列の特性情報を判定するステップを含む。
【請求項２０】
文字列の処理を含むプログラムを実行するコンピュータ・プログラムであって、コンピュータ・システムに、請求項１〜１７及び１９のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラムに関する。
【背景技術】
【０００２】
多くのプログラム言語のクラス・ライブラリには、文字列を保持するためのクラス（以下、文字列クラス）が標準のクラスとして用意されている。プログラマーがシステムに用意された豊富なクラス・ライブラリを利用することによって、プログラミング作業の生産性が向上される。しかし、クラス・ライブラリに用意されているクラスは汎用的に作られている。よって、必ずしも実行効率がよいプログラムが上記クラスを使用して生産されるわけではない。
【０００３】
例えばＪａｖａ（商標）言語には、文字列クラスの１つとしてjava.lang.Stringクラス（以下、Stringクラス）が用意されている。そして、Stringクラスには、指定された正規表現に合致する文字列中の部分を別の文字列に変換するreplaceFirst()メソッドが用意されている。replaceFirst()メソッドにおいて指定される正規表現は、正規表現のメタ文字を必ずしも含んでいるとは限らない。例えば「set」というメタ文字を含まない正規表現が指定されうる。該指定により、「set」という文字列が、例えば「get」という文字列に変換される。
【０００４】
上記変換は、例えばString.indexOf()メソッドとString.substring()メソッドとを組み合わせることによっても実装ができる。上記組み合わせによる変換が実装された場合、プログラムの実行速度はreplaceFirst()メソッドによる実装よりも速くなる。一方で、プログラムの生産性及び汎用性はreplaceFirst()メソッドが実装された場合よりも低くなる。
【０００５】
プログラムの実行速度を優先する場合、例えば正規表現がメタ文字を含むかどうかに応じてreplaceFirst()メソッドと上記組み合わせとをプログラマーが使い分けてコードを作成する方法が考えられうる。しかし、正規表現がメタ文字を含むかどうかがプログラム実行時まで決定されない場合、プログラマーが、replaceFirst()メソッドによる実装と上記組み合わせによる実装との両方の実装を用意すること及び該両方の実装をメンテナンスすることは現実的ではない。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
プログラマーは、システムに用意された文字列クラスを利用することで、プログラミング作業の生産性を向上させる。しかし、文字列クラスは汎用的に作られているため、必ずしも実行効率がよいプログラムが生産されるわけではない。そこで、プログラムの生産性を下げることなく、実行効率の高いプログラムを生産するための仕組みが求められている。
【課題を解決するための手段】
【０００７】
本発明は、文字列の処理を含むプログラムを実行するコンピュータ・システムにおいて、文字列に対応付けられた上記文字列の特性を表す特性情報を用いて、上記プログラム実行時における上記文字列の処理を最適化する方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
第１の文字列についての特性と該第１の文字列に関する演算処理とから、上記第１の文字列及び上記演算処理の結果である第２の文字列のうちの少なくとも１についての文字列の特性情報を判定するステップと、
上記判定された特性情報を、上記少なくとも１の文字列に対応付けるステップと
を含む。
【０００８】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記特性情報が対応付けられた文字列に関する処理を実行する場合に、上記対応付けられた特性情報に応じて、最適化された処理を選択して上記処理を実行するステップを含む。
【０００９】
本発明の１つの実施態様では、上記演算処理が、少なくとも１の第１の文字列を代入する少なくとも１の第２の文字列を生成し、該生成時に上記少なくとも１の第１の文字列を１文字ずつ逐次処理することを含み、
上記判定するステップが、上記逐次処理を実行するステップと該逐次処理とともに上記逐次処理する文字を検査するステップとをさらに含み、それによって上記少なくとも１の第２の文字列の特性情報が判定される。
【００１０】
本発明の１つの実施態様では、上記演算処理が、特性情報が不明である又は対応付けられていない少なくとも１の上記第１の文字列を１文字ずつ逐次処理することを含み、
上記判定するステップが、上記逐次処理を実行するステップと該逐次処理とともに上記逐次処理する文字を検査するステップとをさらに含み、それによって上記少なくとも１の特性情報が判定される。
【００１１】
本発明の１つの実施態様では、上記演算処理が、少なくとも１の第１の文字列についての演算処理であり、
上記判定するステップが、上記少なくとも１の第１の文字列それぞれについての特性情報と上記演算処理とから、少なくとも１の第２の文字列の特性情報を判定するステップを含む。
【００１２】
本発明の１つの実施態様では、上記文字列の特性を表す特性情報が、上記文字列が文字集合に属する文字を含むこと、含まないこと又は含むかどうか不明であることを表す少なくとも１の第１の情報と、上記文字列が上記文字集合に属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す第２の情報とを含む。
【００１３】
本発明の１つの実施態様では、上記文字集合が少なくとも２の第１の文字集合をまとめて表す第２の文字集合であり、該少なくとも２の第１の文字集合それぞれに含まれる文字が重複せず、上記第１の情報それぞれが、上記文字列が上記第１の文字集合それぞれに属する文字を含むこと、含まないこと又は含むかどうか不明であることを表し、上記第２の情報が、上記文字列が上記第１の文字集合全てに属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す。
【００１４】
本発明の１つの実施態様では、上記文字集合が少なくとも２の第１の文字集合をまとめて表す第２の文字集合であり、該少なくとも２の第１の文字集合それぞれに含まれる文字が重複せず、上記第１の情報が、上記文字列が上記第２の文字集合に属する文字を含むこと、含まないこと又は含むことが不明であることを表し、上記第２の情報が、上記文字列が上記第２の文字集合に属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す。
【００１５】
本発明の１つの実施態様では、上記第１の情報及び上記第２の情報がビット列で表され、ビットそれぞれが１つの文字集合又は文字集合のいずれにも属さない文字の集合に対応する。
【００１６】
本発明の１つの実施態様では、上記演算処理が、第１の特性情報が対応付けられた第１の文字列と、第２の特性情報が対応付けられた第１の文字列とを結合する演算処理であり、
上記判定するステップが、上記第１の特性情報と上記第２の特性情報との論理和によって求められる特性情報を第２の文字列の特性情報と判定するステップを含む。
【００１７】
本発明の１つの実施態様では、上記演算処理が、第１の特性情報が対応付けられた第１の文字列から第２の特性情報が対応付けられた第１の文字列を削除する演算処理であり、
上記判定するステップが、上記第１の特性情報を第２の文字列の特性情報と判定するステップを含む。
【００１８】
本発明の１つの実施態様では、上記演算処理が、第１の特性情報が対応付けられた第１の文字列から第２の特性情報が対応付けられた第１の文字列を削除する演算処理であり、該演算処理によって上記第２の特性情報が表す文字集合に属する文字が上記第１の特性情報が対応付けられた第１の文字列に含まれなくなる場合、
上記判定するステップが、上記第１の特性情報と上記第２の特性情報との論理積によって求められる特性情報を第１の文字列の特性情報と判定するステップを含む。
【００１９】
本発明の１つの実施態様では、上記第１の文字列及び上記演算処理の結果である第２の文字列のうちの少なくとも１についての文字列の特性情報を判定するステップが、
上記第１の特性情報と上記第２の特性情報との論理和によって求められる特性情報を第２の文字列の特性情報と判定するステップ、上記第１の特性情報を第２の文字列の特性情報と判定するステップ及び上記第１の特性情報と上記第２の特性情報との論理積によって求められる特性情報を第１の文字列の特性情報と判定するステップの少なくとも２を組み合わせて上記特性情報を判定するステップを含む。
【００２０】
本発明の１つの実施態様では、上記文字集合が、大文字の集まり、小文字の集まり、数字の集まり、２バイト文字の集まり、ローマ字の集まり、同一の文字コード文字の集まり、正規表現の特殊文字の集まり、８ビットで表現できる文字の集まり及びＵＲＬエンコードにおける特殊文字の集まりからなる群から選択される少なくとも１を表す。
【００２１】
本発明の１つの実施態様では、上記演算処理が、少なくとも１の第１の文字列を代入する少なくとも１の第２の文字列を生成することを含み、
上記判定するステップが、上記少なくとも１の第１の文字列についての特性情報から上記第２の文字列の特性情報を判定するステップを含む。
【００２２】
本発明の１つの実施態様では、上記演算処理が、文字列を生成し、該生成時に少なくとも１の第１の文字列を少なくとも１の第２の文字列に１文字ずつ代入する処理を含み、
上記判定するステップが、上記代入する処理を実行するステップと該代入とともに上記代入する文字を検査するステップとをさらに含み、それによって上記少なくとも１の第２の文字列の特性情報が判定される。
【００２３】
本発明の１つの実施態様では、上記文字列がオブジェクトとして扱われるプログラム言語において、上記文字列に関する演算処理が上記オブジェクトに関する演算処理であり、上記特性情報が上記オブジェクトに含まれる。
【００２４】
本発明はまた、文字列の処理を含むプログラムを実行するコンピュータ・プログラムを提供する。該コンピュータ・プログラムは、コンピュータ・システムに上記に記載の方法の各ステップを実行させる。
【００２５】
本発明はまた、文字列の処理を含むプログラムを実行し、文字列に対応付けられた上記文字列の特性を表す特性情報を用いて、上記プログラム実行時における上記文字列の処理を最適化するコンピュータ・システムを提供する。該コンピュータ・システムは、
第１の文字列についての特性と該第１の文字列に関する演算処理とから、上記第１の文字列及び上記演算処理の結果である第２の文字列のうちの少なくとも１についての文字列の特性情報を判定する判定部と、
上記判定された特性情報を、上記少なくとも１の文字列に対応付ける対応付け部と
を含む。
【００２６】
本発明の１つの実施態様では、上記特性情報が対応付けられた文字列に関する処理を実行する場合に、上記対応付けられた特性情報に応じて、最適化された処理を選択して上記処理を実行する実行部をさらに含む。
【００２７】
本発明の１つの実施態様では、上記演算処理が、少なくとも１の第１の文字列を代入する少なくとも１の第２の文字列を生成し、該生成時に上記少なくとも１の第１の文字列を１文字ずつ逐次処理することを含み、
上記判定部が、上記逐次処理を実行し、及び該逐次処理とともに上記逐次処理する文字を検査する。それによって上記少なくとも１の第２の文字列の特性情報が判定される。
【００２８】
本発明の１つの実施態様では、上記演算処理が、特性情報が不明である又は対応付けられていない少なくとも１の上記第１の文字列を１文字ずつ逐次処理することを含み、
上記判定部が、上記逐次処理を実行し、及び該逐次処理とともに上記逐次処理する文字を検査する。それによって上記少なくとも１の特性情報が判定される。
【００２９】
本発明の１つの実施態様では、上記演算処理が、少なくとも１の第１の文字列についての演算処理であり、
上記判定部が、上記少なくとも１の第１の文字列それぞれについての特性情報と上記演算処理とから、少なくとも１の第２の文字列の特性情報を判定する。
【００３０】
本発明の１つの実施態様では、上記演算処理が、第１の特性情報が対応付けられた第１の文字列と、第２の特性情報が対応付けられた第１の文字列とを結合する演算処理であり、
上記判定部が、上記第１の特性情報と上記第２の特性情報との論理和によって求められる特性情報を第２の文字列の特性情報と判定する。
【００３１】
本発明の１つの実施態様では、上記演算処理が、第１の特性情報が対応付けられた第１の文字列から第２の特性情報が対応付けられた第１の文字列を削除する演算処理であり、
上記判定部が、上記第１の特性情報を第２の文字列の特性情報と判定する。
【００３２】
本発明の１つの実施態様では、上記演算処理が、第１の特性情報が対応付けられた第１の文字列から第２の特性情報が対応付けられた第１の文字列を削除する演算処理であり、該演算処理によって上記第２の特性情報が表す文字集合に属する文字が上記第１の特性情報が対応付けられた第１の文字列に含まれなくなる場合、
上記判定部が、上記第１の特性情報と上記第２の特性情報との論理積によって求められる特性情報を第１の文字列の特性情報と判定する。
【００３３】
本発明の１つの実施態様では、上記判定部が、演算処理が、上記第１の特性情報と上記第２の特性情報との論理和によって求められる特性情報を第２の文字列の特性情報と判定するステップ、上記第１の特性情報を第２の文字列の特性情報と判定するステップ及び上記第１の特性情報と上記第２の特性情報との論理積によって求められる特性情報を第１の文字列の特性情報と判定するステップの少なくとも２を組み合わせて上記特性情報を判定する。
【００３４】
本発明の１つの実施態様では、上記演算処理が、少なくとも１の第１の文字列を代入する少なくとも１の第２の文字列を生成することを含み、
上記判定部が、上記少なくとも１の第１の文字列についての特性情報から上記第２の文字列の特性情報を判定する。
【００３５】
本発明の１つの実施態様では、上記演算処理が、文字列を生成し、該生成時に少なくとも１の第１の文字列を少なくとも１の第２の文字列に１文字ずつ代入する処理を含み、
上記判定部が、上記代入する処理を実行するステップと該代入とともに上記代入する文字を検査する。それによって上記少なくとも１の第２の文字列の特性情報が判定される。
【発明の効果】
【００３６】
本発明の実施態様によれば、文字列の内容又は文字列の値に応じて高速に実行される最適化された処理が、プログラム実行時に動的に切り替えられて実行される。上記最適化された処理は、クラス・ライブラリに用意されるため、プログラマーの生産性を低下させることなく、プログラムの実装速度が向上する。
【図面の簡単な説明】
【００３７】
【図１】本発明の実施態様における、Ｊａｖａ（商標）で実装した場合の文字列オブジェクトの構造を示す。
【図２Ａ】本発明の実施態様における、図１に示す特性情報の判定を説明するための図である。
【図２Ｂ】本発明の実施態様における、図１に示す文字列オブジェクトに含まれる特性情報を、他の文字列オブジェクトに伝搬するための実装例を示す。
【図３Ａ】本発明の実施態様における、図１に示す文字列オブジェクトを生成する処理のフローチャートを示す。
【図３Ｂ】本発明の実施態様における、図１に示す文字列オブジェクトに含まれる文字列を１文字ずつ逐次処理することを含む演算処理のフローチャートの例を示す。
【図３Ｃ】本発明の実施態様における、図１に示す文字列オブジェクトに含まれる文字列をまとめて処理することを含む演算処理のフローチャートの例を示す。
【図４Ａ】本発明の実施態様における、例１の実施例を説明するためのプログラム・コードを示す。
【図４Ｂ】本発明の実施態様における、例２の実施例を説明するためのプログラム・コードを示す。
【図４Ｃ】本発明の実施態様における、下記図４Ｄの説明におけるプログラムに関する状態遷移図を示す。
【図４Ｄ】本発明の実施態様における、例３の実施例を説明するためのプログラム・コードを示す。
【図４Ｅ】本発明の実施態様における、例４の実施例を説明するためのプログラム・コードを示す。
【図４Ｆ】本発明の実施態様における、図３Ａに示すフローチャートの処理を実装するプログラム・コードの例を示す。
【図５】本発明の実施態様における、プログラム実行時の文字列の処理を最適化するコンピュータ・システムが有する機能を図示する機能ブロック図の例を示す。
【図６】本発明の実施態様における、図５に示すシステムのハードウェアのブロック図を示す。
【発明を実施するための形態】
【００３８】
本発明の実施態様において、「文字列」とは、１つ以上の文字の連なりをいう。文字は、プログラムにおいて文字表現として使用される文字コードの文字データである。文字コードは、例えばＥＵＣ−ＪＰ、Ｓｈｉｆｔ＿ＪＩＳ、ＵＴＦ−８であるがこれらに限定されない。文字はまた、意味を持つ文字、例えばタブ文字、改行文字、エスケープ文字又は正規表現の特殊文字であってよい。正規表現の特殊文字とは、あるパターンの文字列をまとめて表現するための文字である。正規表現の特殊文字は、例えば、正規表現“[a-z]+[0-9]”における、１回以上の繰り返しを表す“+”、文字範囲指定の開始と終了を表す“[”及び“]”であるが、これらに限定されない。
【００３９】
本発明の実施態様において、「文字列の処理を含むプログラム」とは、プログラムの実行時において、文字列に対して何らかの処理を実行するプログラムである。上記処理はまた、該文字列が格納される例えば変数、構造体又はオブジェクトに対する処理を含む。上記処理は、例えば、文字列を生成する処理、文字列を複製する処理、文字列に含まれる任意の文字を検索する処理、文字列に含まれる文字を他の文字に変換する処理、文字列から任意の文字を抽出する処理、文字列同士を結合する処理、文字列同士を比較する処理、又は文字列に関する情報を取得する処理であるが、これらに限定されない。
【００４０】
本発明の実施態様において、「文字列の特性」とは、文字列に含まれる少なくとも１つの文字が持つ特徴をいう。上記特徴は、上記文字が、例えば大文字であること、小文字であること、数字であること、２バイト文字、例えば日本語、中国語であること、アルファベットであること、同一の文字コード文字であること、正規表現の特殊文字であること、８ビットで表現できる文字であること、ＵＲＬエンコードにおける特殊文字であること又は上記例の文字でないことであるが、これらに限定されない。
本発明の実施態様において、「文字集合」は、共通の上記特徴をもつ文字の集まりである。文字集合は、例えば大文字の集合、小文字の集合、数字の集合、２バイト文字の集合、アルファベットの集合、同一の文字コード文字の集合、正規表現の特殊文字の集合、８ビットで表現できる文字の集合、ＵＲＬエンコードにおける特殊文字の集合又はある集合に属さない文字の集合であるが、これらに限らない。文字集合に含まれる文字が重複していない複数の文字集合をまとめて、１つの文字集合として表してもよい。
【００４１】
本発明の実施態様において、「特性情報」とは、文字列の特性を表す情報である。特性情報は、文字列ごとに用意される。特性情報は、文字列が文字集合に属する文字を含むこと、含まないこと又は含むかどうか不明であることを表す少なくとも１の第１の情報と、上記文字列が文字集合に属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す第２の情報とを含む。
【００４２】
本発明の実施態様において、「文字列の処理を最適化する」とは、文字列の処理が複数の処理を含む場合に、文字列の処理の実行時においてコンピュータ・システムが、上記複数の処理のうち文字列の特性情報に応じた実行効率のよい処理を選択して実行することをいう。文字列の特性情報に応じた実行効率のよい処理とは、例えば第１の処理がどのような文字列にも適用可能な処理であり、第２の処理がある特性情報が対応付けられた文字列に対してのみ適用可能な処理である場合において、第１の処理に比べて高速に実行され且つ第１の処理と同一の結果が得られる第２の処理であるがこれに限らない。最適化された処理は、文字列の特性情報に応じた実行効率のよい処理を含む。
【００４３】
本発明の実施態様において、「文字列に関する演算処理」とは、プログラムにおいて実行される文字列又は該文字列が格納される領域に対する何らかの演算処理である。上記プログラムにおいて実行される文字列に対する演算処理は、例えば、文字列の生成、文字列の複製、文字列に含まれる任意の文字の検索、文字列に含まれる文字の他の文字への変換、文字列から任意の文字の抽出、文字列同士の結合、文字列同士の比較、又は文字列に関する情報の取得であるが、これらに限定されない。プログラムにおいて実行される文字列が格納される領域に対する処理は、例えば文字列を割り付けるメモリ領域の確保であるが、これに限定されない。
【００４４】
本発明の実施態様において、「文字列を１文字ずつ逐次処理する」とは、コンピュータ・システムが、文字列に含まれる文字それぞれに対して、個別に処理を実行することをいう。例えば文字列からある文字を検索する処理において、コンピュータ・システムが文字列に含まれる文字を全てチェックし、ヒットした全ての文字を検索結果とする場合、該検索は、文字列を１文字ずつ逐次処理することに該当する。一方、コンピュータ・システムが検索対象の文字がヒットした時点で残りの文字をチェックせずにヒットした文字を検索結果とする場合、該検索は、文字列を１文字ずつ逐次処理することに該当しない。
【００４５】
本発明の実施態様において、「逐次処理される文字を検査する」とは、文字の特性を求めることをいう。文字の特性は、上記逐次処理される文字が、例えば大文字であること、小文字であること、数字であること、２バイト文字であること、アルファベットであること、同一の文字コード文字であること、正規表現の特殊文字であること、８ビットで表現できる文字であること、ＵＲＬエンコードにおける特殊文字であること又は上記例の文字でないことであるが、これらに限定されない。
【００４６】
以下、図面に従って、本発明の実施態様を説明する。本実施態様は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断らない限り、同一の符号は、同一の対象を指す。
なお、以下では、本発明の実施態様をＪａｖａ（商標）で実装した場合を例として説明する。Ｊａｖａ（商標）では、文字列の操作は、文字列オブジェクトを介して実行される。よって、請求項における文字列は、Ｊａｖａ（商標）の場合、上記文字列オブジェクト自身又は該文字列オブジェクトに含まれる文字列を指す。
【００４７】
図１は、本発明の実施態様における、Ｊａｖａ（商標）で実装した場合の文字列オブジェクトの構造を示す。
文字列オブジェクト（１０１）は、文字列（１０２）及び特性情報（１０３）を含む。なお、特性情報（１０３）は、上記文字列オブジェクト（１０１）と関連付けられたメモリ上の文字列オブジェクト（１０１）とは異なる領域に含まれてもよい。文字列オブジェクト（１０１）は、メモリ上に格納される。文字列オブジェクト（１０１）は、クラス・ライブラリに用意されている文字列クラスから生成される。クラス・ライブラリとは、例えばＪａｖａ（商標）におけるＪａｖａ（商標）クラス・ライブラリであるが、これに限定されない。文字列クラスとは、例えばＪａｖａ（商標）におけるjava.lang.Stringクラス（Stringクラス）であるが、これに限定されない。
【００４８】
文字列（１０２）は、少なくとも１の文字が含まれる不変な又は可変な文字列のデータである。不変とは、文字列オブジェクト（１０１）が開放されるまで文字列が変化しないことをいう。可変とは、文字列オブジェクト（１０１）が開放されるまで文字列が変化しうることをいう。
【００４９】
特性情報（１０３）は、文字列（１０２）に含まれる文字がどのような特性を持っているかを表す情報である。特性とは、文字が例えば大文字であること、小文字であること若しくは数字であること、又はそれらの組み合わせであるが、これらに限定されない。特性情報（１０３）は、第１の情報（１０３ａ）及び第２の情報（１０３ｂ）を含む。第１の情報（１０３ａ）は、文字列（１０２）が、文字集合（１０４）に属する文字を含むこと、該文字を含まないこと又は該文字を含むことが不明であることを表す。第２の情報（１０３ｂ）は、文字列（１０２）が、文字集合（１０４）に属さない文字を含むこと、該文字を含まないこと又は該文字を含むかどうか不明であることを表す。文字集合（１０４）は、同じ特性を持つ文字の集まりである。文字集合（１０４）は、例えば大文字の集まり、小文字の集まり若しくは数字の集まり、又はそれらの組み合わせであるがこれらに限定されない。例えば、文字集合に含まれる文字が重複しない複数の文字集合同士が、１つの文字集合であってもよい。
特性情報（１０３）は、文字列オブジェクト（１０１）と関係付けられたメモリ上の他の位置に格納されてもよい。
【００５０】
特性情報（１０３）は、文字列オブジェクト（１０１）を処理するメソッドにおいて、高速な処理が実行されるための判断に使用される。
特性情報（１０３）は、第１の情報（１０３ａ）及び第２の情報（１０３ｂ）の組み合わせにより、例えば、下記１〜４のいずれかのケースを示す。
ケース１．文字列（１０２）に含まれる全ての文字が、文字集合（１０４）に属する。ケース１では、第１の情報（１０３ａ）は文字集合（１０４）に属する文字を含むことを表しており、第２の情報（１０３ｂ）は文字集合（１０４）に属さない文字を含まないことを表している。
ケース２．文字列（１０２）に含まれる全ての文字が、文字集合（１０４）に属さない。ケース２では、第１の情報（１０３ａ）は文字集合（１０４）に属する文字を含まないことを表しており、第２の情報（１０３ｂ）は文字集合（１０４）に属さない文字を含むことを表している。
ケース３．文字列（１０２）が、文字集合（１０４）に属する文字と属さない文字との両方を含む。ケース３では、第１の情報（１０３ａ）は文字集合（１０４）に属する文字を含むことを表しており、第２の情報（１０３ｂ）が文字集合（１０４）に属さない文字を含むことを表している。
ケース４．文字列（１０２）に含まれる文字について未検査である。ケース４では、第１の情報（１０３ａ）は文字集合（１０４）に属する文字を含むことが不明であることを表しており、第２の情報（１０３ｂ）が文字集合（１０４）に属さない文字を含むことが不明であることを表している。
【００５１】
特性情報（１０３）は、ビット列で表されてもよい。
ビットそれぞれは、第１の情報（１０３ａ）又は第２の情報（１０３ｂ）に対応する。第１の情報（１０３ａ）は、例えば文字列（１０２）が文字集合（１０４）に属する文字を含むことを「１」、文字集合（１０４）に属する文字を含まないこと又は含むことが不明であることを「０」とするビットで表されうる。第２の情報（１０３ｂ）は、例えば文字列（１０２）が文字集合（１０４）に属さない文字を含むことを「１」、文字集合（１０４）に属さない文字を含まないこと又は含むことが不明であることを「０」とするビットで表されうる。
第１の情報（１０３ａ）及び第２の情報（１０３ｂ）がビットで表された場合、上記ケース１は「１０」、上記ケース２は「０１」、上記ケース３は「１１」及び上記ケース４は「００」というビット列で表わされる。
【００５２】
上記ビット列で表す例において、複数の文字集合それぞれに含まれる文字が排他である場合、複数の文字集合がまとめて扱われうる。上記まとめて扱われる場合、文字集合それぞれに第１の情報（１０３ａ）としてそれぞれ１ビットが割り当てられ、文字集合の何れにも属さない文字の集合に、第２の情報（１０３ｂ）として１ビットが割り当てられる。
例えば大文字の集まり（以下、大文字集合）、小文字の集まり（以下、小文字集合）及び数字の集まり（以下、数字集合）は、互いに排他な文字の集合である。よって、大文字集合に第１の情報として１ビット、小文字集合に第１の情報として１ビット、数字集合に第１の情報として１ビットが割り当てられうる。また、大文字、小文字及び数字のいずれでもない文字の集合（以下、その他集合）に第２の情報として１ビットが割り当てられうる。上記割り当ての結果、特性情報（１０３）は、第１の情報に対応する３ビットと第２の情報に対応する１ビットとの計４ビットで表される。以下の例では、上記４ビットを大文字情報に対応するビット列、小文字情報に対応するビット列、数字集合に対応するビット列及びその他集合に対応するビット列の順で右から順に表す。
・特性情報「０００１」は、文字列が「大文字を含む」ということを表す。
・特性情報「００１０」は、文字列が「小文字を含む」ということを表す。
・特性情報「０１００」は、文字列が「数字を含む」ということを表す。
・特性情報「１０００」は、文字列が「大文字、小文字、数字以外の文字（以下、その他文字）を含む」ということを表す。
なお、上記「１」が立つビットは１つとは限らない。例えば、特性情報「１１１０」は、文字列が「小文字、数字及びその他文字を含む」ということを表す。
【００５３】
コンピュータ・システムは、複数の文字集合をまとめて扱うことにより、まとめて扱わない場合に比べて、特性情報を表すためのビット数を減らすことができる。
複数の文字集合をまとめて扱う場合、上述の例では、４ビットが必要である。一方、複数の文字集合をまとめて扱わない場合、上記ケース１〜４の例で示されるように、１つの文字集合を表す特性情報として２ビットが必要である。よって、複数の文字集合をまとめて扱わない場合、大文字集合、小文字集合及び数字集合の３つの文字集合に対して必要なビット数は、２ビット＊３＝６ビットである。
【００５４】
図２Ａは、本発明の実施態様における、図１に示す特性情報の判定を説明するための図である。
コンピュータ・システムは、第１の文字列の特性（２０２）と第１の文字列（２０３）に関する演算処理（２０５）とから、第１の文字列（２０３）及び演算処理（２０５）の結果である第２の文字列（２０６）のうち少なくとも１についての文字列の特性情報（２０４又は２０７）を判定する。
第１の文字列の特性（２０２）は、既に判定され第１の特性情報（２０４）として保存されている場合と、コンピュータ・システムによって、例えば第１の文字列（２０３）の文字を検査することで求められる場合とがある。コンピュータ・システムによって第１の文字列の特性（２０２）が求められる場合、コンピュータ・システムは、該求めた特性を第１の特性情報（２０４）と判定する。
第１の文字列（２０３）は、演算処理（２０５）の対象となる文字列である。第１の文字列（２０３）は、１つの文字列であってもよく、又は複数の文字列であってもよい。具体例１（２０１ａ）で示されるように、演算処理（２０５）が例えば文字列“ＡＢＣ”（２０３ａ）と文字列“ＤＥＦ”（２０３ｂ）とを結合する処理の場合、文字列“ＡＢＣ”（２０３ａ）と文字列“ＤＥＦ”（２０３ｂ）とが第１の文字列（２０３）に該当する。
第１の特性情報（２０４）は、第１の文字列（２０３）に対応付けらえた情報である。第１の特性情報（２０４）は、第１の文字列（２０３）に既に対応付けられていてもよく、又はコンピュータ・システムによる第１の文字列（２０３）の文字の検査によって求められ、第１の特性情報（２０４）と判定された特性でもよい。
演算処理（２０５）は、例えば文字列の生成、文字列の複製、文字列に含まれる任意の文字の検索、文字列に含まれる文字の他の文字への変換、文字列から任意の文字の抽出、文字列同士の結合、文字列同士の比較、又は文字列に関する情報の取得であるが、これらに限定されない。
第２の文字列（２０６）は、上記演算の結果が格納される文字列である。具体例１（２０１ａ）で示されるように、演算処理（２０５）が例えば文字列“ＡＢＣ”（２０３ａ）と文字列“ＤＥＦ”（２０３ｂ）とを結合する処理の場合、該加えられた結果の文字列“ＡＢＣＤＥＦ”（２０６ａ）が第２の文字列（２０６）に該当する。第２の文字列（２０６）は、１つの文字列であっても複数の文字列であってもよい。具体例２（２０１ｂ）で示されるように、演算処理（２０５）が例えば文字列“ａｂｃｄｅｆ”（２０３ｃ）から２文字ずつ文字列を抽出する処理の場合、抽出された結果の文字列“ａｂ”（２０６ｂ）、文字列“ｃｄ”（２０６ｃ）及び文字列“ｅｆ”（２０６ｄ）それぞれが、第２の文字列に該当する。
第２の特性情報（２０７）は、第２の文字列（２０６）に対応付けられた情報である。第２の特性情報（２０７）は、第１の文字列の特性（２０２）と演算処理（２０５）とから判定されうる。
具体例１（２０１ａ）では、第１の特性情報（２０４ａ及び２０４ｂ）が「全て大文字」である。よって、特性（２０２ａ及び２０２ｂ）もまた「全て大文字」である。「全て大文字」の文字列同士を結合する演算（２０５ａ）では、演算の結果の文字列もまた「全て大文字」となる。従って、第２の特性情報（２０７ａ）は「全て大文字」と判定されうる。
具体例２（２０１ｂ）では、第１の特性情報（２０４ｃ）が「全て小文字」である。よって、特性（２０２ｃ）もまた「全て小文字」である。「全て小文字」の文字列から文字列を抽出する演算（２０５ｂ）では、演算の結果の文字列もまた「全て小文字」となる。従って、第２の特性情報（２０７ｂ〜２０７ｄ）は「全て小文字文字」と判定されうる。
【００５５】
上記判定は、プログラム実行時の下記第１の態様〜第３の態様に示すタイミングにおいて実行される。上記判定により、判定された特性情報は、文字列オブジェクト（図１、１０１）に付加される。該付加により、文字列と特性情報とが対応付けられる。
Ａ．第１の態様
特性情報（図１、１０３）は、文字列オブジェクト（１０１）が文字列クラスから生成されることに応じて、文字列オブジェクト（１０１）に付加されうる。コンピュータ・システムは、生成される文字列オブジェクト（１０１）に含まれる文字列（図１、１０２）の特性情報が生成元の文字列オブジェクト（１０１）から判定できる場合又は生成元の文字列に対する逐次処理と同時に検査できる場合、該判定又は該検査によって求められる特性情報（１０３）を生成した文字列オブジェクト（１０１）に付加する。
特性情報の付加は、可変な文字列を保持する文字列オブジェクト及び不変な文字列を保持する文字列オブジェクトの両方の文字列オブジェクトに対して可能である。特に、不変な文字列を保持する文字列オブジェクト、例えばＪａｖａ（商標）におけるStringオブジェクトでは、文字列オブジェクト（１０１）が一度生成されると、文字列オブジェクト（１０１）に含まれる文字列は変化しない。よって、文字列オブジェクト（１０１）に含まれる文字列の特性情報（１０３）も変化しない。従って、コンピュータ・システムは、不変な文字列を保持する文字列オブジェクトにおいて、オブジェクト生成に応じて特性情報（１０３）が付加された文字列オブジェクト（１０１）を、文字列オブジェクト（１０１）がガーベジコレクションされるまで利用することができる。
【００５６】
Ｂ．第２の態様
特性情報（１０３）は、特性情報（１０３）が付加されていない文字列オブジェクト（１０１）に含まれる文字列（１０２）に対する逐次処理と同時に特性が検査されることに応じて、文字列オブジェクト（１０１）に付加されうる。
文字列オブジェクト（１０１）が特性情報（１０３）を含むことの効果は、特性情報（１０３）によって最適化された処理が実行されることである。よって、ある文字列オブジェクトについて、最適化された処理が一度も実行されない場合、上記検査するコストが無駄になってしまう。上記コストを抑えるために、コンピュータ・システムは、文字列を処理するメソッドに文字列の内容を１文字ずつ逐次処理する処理が含まれる場合、該処理と同時に特性の検査を行う。
【００５７】
Ｃ．第３の態様
特性情報（１０３）は、特性情報（１０３）が付加された少なくとも１の文字列オブジェクト（以下、演算元オブジェクト）の演算処理が実行されることに応じて、演算処理の結果が格納される少なくとも１の文字列オブジェクト（以下、結果オブジェクト）に付加されうる。コンピュータ・システムは、演算元オブジェクトと演算処理の内容とから結果オブジェクトに付加される特性情報が判定されることに応じて、該判定された特性情報（１０３）を結果オブジェクトに付加する。上記演算処理とは、例えば文字列同士を結合する処理、文字列からある文字を取り出す処理、又は文字列を別の文字列に変換する処理であるが、これらに限定されない。
【００５８】
以下、第３の態様について例を挙げて説明する。例えば、第１の文字列オブジェクトが全て大文字の第１の文字列を含み、第２の文字列オブジェクトが全て大文字の第２の文字列を含むとする。
第１の文字列と第２の文字列とを結合する場合、コンピュータ・システムは、結合した結果の文字列も全て大文字で構成されると判定しうる。よって、コンピュータ・システムは、結果オブジェクトに付加される特性情報を、例えば「全て大文字」を表す情報としうる。
第１の文字列からある文字を取り出す場合、コンピュータ・システムは、一部の文字列が取り出された第１の文字列（以下、第１の結果の文字列）及び取り出した一部の文字列（以下、第２の結果の文字列）はともに全て大文字で構成されると判定しうる。第１の文字列からある文字を取り出す場合とは、例えば第１の文字列オブジェクトに対して文字列の一部を取り出すＪａｖａ（商標）言語のString.substring()メソッドを適用した場合である。よって、コンピュータ・システムは、第１の結果の文字列を含む結果オブジェクト及び／又は第２の結果の文字列を含む結果オブジェクトに付加される特性情報を、例えば「全て大文字」を表す情報としうる。なお、第１の結果の文字列を含む結果オブジェクトは、第１の文字列オブジェクトでありうる。
第１の文字列を別の文字列、例えば小文字の文字列に変換する場合、コンピュータ・システムは、変換された文字列が全て小文字で構成されると判定しうる。よって、コンピュータ・システムは、結果オブジェクトに付加される特性情報を、例えば「全て小文字」を表す情報としうる。
【００５９】
図２Ｂは、本発明の実施態様における、図１に示す文字列オブジェクトに含まれる特性情報を、他の文字列オブジェクトに伝搬するための実装例を示す。
なお、第３の態様による結果オブジェクトへの特性情報の付加を「演算元オブジェクトから結果オブジェクトへの特性情報の伝搬」という。上記伝搬させるための処理は、文字列を操作するメソッドの処理内容と、該処理の対象となる少なくとも１の文字列オブジェクト（以下、s1、s2、・・・、sn）に含まれる特性情報（以下、attr1、attr2、・・・、attrn）によって決まる。なお、特性情報は、ビット列で表されているとする。該ビット列は、複数の文字集合をまとめて扱うように割り当てられたビット列であってもよいし、又は文字集合ごとに２ビットが割り当てられたビット列であってもよい。上記伝搬させるための処理は、多くの場合、以下に示す第１のコード（２１１）〜第３のコード（２１３）で示される処理の１つ又は少なくとも２の組み合わせである。
第１のコード（２１１）で示される処理は、特性情報attr1が付加された文字列オブジェクトと特性情報attr2が付加された文字列オブジェクトとを結合する場合の、結果オブジェクトに付加される特性情報を算出する処理である。第１のコード（２１１）で示される処理では、特性情報attr1と特性情報attr2との論理和によって、結果オブジェクトに付加される特性情報が求められる。
第２のコード（２１２）で示される処理は、特性情報attr1が付加された文字列オブジェクトに含まれる文字列から、特性情報attr2が付加された文字列オブジェクトに含まれる文字列を削除する場合の、結果オブジェクトに付加される特性情報を算出する処理である。ここで、削除される文字列は、例えば正規表現で表される動的な文字列であってもよい。第２のコード（２１２）で示される処理では、特性情報attr2に対応する文字集合の文字が特性情報attr1が付加された文字列オブジェクトに残っている場合もありうる。よって、特性情報attr1が、結果オブジェクトに付加される特性情報とされる。
第３のコード（２１３）で示される処理は、特性情報attr1が付加された文字列オブジェクトに含まれる文字列から、特性情報attr2が付加された文字列オブジェクトに含まれる文字列を全て削除する場合の、結果オブジェクトに付加される特性情報を算出する処理である。第３のコード（２１３）で示される処理では、特性情報attr1と特性情報attr2との論理積によって、結果オブジェクトに付加される特性情報が求められる。
【００６０】
クラス・ライブラリ作成者は、文字列を操作するメソッドの本来の処理内容から第１のコード〜第３のコード（２１１〜２１３）の組み合わせを決定し、上記伝搬させるための処理をプログラムに追加することができる。該追加により、プログラム実行時において、例えば結果オブジェクトに含まれる文字列が逐次検査されることなく、特性情報が結果オブジェクトに伝搬され付加される。
【００６１】
以下では、Ｊａｖａ（商標）におけるStringクラスの３つのメソッドを例に、上記追加されるコードの例を示す。
String.concat()メソッドは、文字列に文字列を加えるためのメソッドである。よって、追加されるコードは、第１のコード（２１１）である。
String.substring()メソッドは、文字列の一部を切り出すメソッドである。よって、追加されるコードは、第２のコード（２１２）である。
String.replaceFirst()メソッドは、文字列の一部を置き換えるメソッドである。よって、追加されるコードは、第１のコード（２１１）と第２のコード（２１２）との組み合わせのコードである。
String.toUpper()メソッドは、小文字を大文字に変換するメソッドである。よって、追加されるコードは、第１のコード（２１１）と第３のコード（２１３）との組み合わせのコードである。
【００６２】
文字列オブジェクトが特定の特性情報を持つ場合、コンピュータ・システムは、上記メソッドにおいて最適化版のコードを実行させる。文字列オブジェクトが特定の特性情報を持たない場合、コンピュータ・システムは、上記メソッドにおいて、最適化していない元の通常版のコードを実行させる。
プログラムを動作させるためには、最適化版のコードの有無にかかわらず通常版のコードは必要である。特性情報が付加されていない文字列オブジェクトに対する処理を通常版コードで常に実行することによって、コンピュータ・システムはプログラムを正しく動作させる。また、通常版のコードの実行と同時に特性情報の検査が行われている場合、文字列オブジェクトが２回目以降に上記メソッドで処理されるときに、特性情報に応じて最適化版のコードが実行されうる。
【００６３】
以下では、文字列オブジェクトに付加される特性情報のバリエーションの例を示す。なお、特性情報のバリエーションは、以下の例１〜例４の例に限定されない。
【００６４】
例１．「大文字が含まれない」及び「小文字が含まれない」
例２．「例えば＊及び[]という正規表現の特殊文字列が含まれない」
例３．「全ての文字が８ビットで表現できる」
例４．「ＵＲＬエンコードにおける特殊文字である「％」及び「＋」を含まない」
特性情報が上記例１を表す場合において、例えばString.toLowerCase()メソッド又はString.toUpperCase()メソッドの実行時に、文字列を小文字に変換する処理又は文字列を大文字に変換する処理が省略されうる。また、例えばString.compareIgnoreCase()メソッド又はString.equalsIgnoreCase()メソッドの実行時において、比較される２つの文字列がともに、「大文字を含まない」という特性情報を持っている場合又は、「小文字を含まない」という特性情報を持っている場合、上記比較が単純な１６ビット値の比較となりうる。ここで、上記比較される２つの文字列のうち一方の文字列が「数字を含む」という特性情報を有し、他方の文字列が「数字を含まない」という特性情報を有していても構わない。上記比較が単純になることで、処理の高速化が望める。ここで、同じフラグを持っている場合とは、例えば上記比較される２つの文字列どちらにも「大文字が含まれていない」場合のことである。
特性情報が上記例２を表す場合において、例えばString.replaceFirst()メソッド又はsplit()メソッドの実行時に、java.util.regex.Matcherオブジェクトの作成が不要になる。よって、生成されるオブジェクトの削減及びプログラムの実行速度の高速化が期待できる。
特性情報が上記例３を表す場合において、例えば正規表現としてコンパイルしてステートマシンを作成する場合、プログラマーは、例えば分岐の多いswitch文による実装の代わりに、８ビットで表現できる文字である０〜２５５に対応する文字コードでインデックスする表を使った実装が可能になる。よって、該実装により、プログラム実行時の処理が高速化されうる。なお、上記正規表現としてコンパイルしてステートマシンを作成するとは、正規表現に対応した状態遷移を行うプログラムを作成することをいう。
特性情報が上記例４を表す場合において、例えば該特性情報が付加された文字列オブジェクトを引数とするjava.net.URLDecoder.decode()メソッドにおいて、文字列を一文字ずつ調べる処理と作業用バッファであるStringBufferを使用する処理とが省略されうる。よって、該省略により、プログラム実行時の処理が高速化されうる。
【００６５】
図３Ａは、本発明の実施態様における、図１に示す文字列オブジェクトを生成する処理のフローチャートを示す。
図３Ａに示すフローチャートは、上記第１の態様に対応する。図３Ａ中のステップ３０４の処理が第１の態様で示される生成元の文字列オブジェクト（１０１）から判定できる場合に対応し、及び図３Ａ中のステップ３０９及びステップ３１０の処理が第１の態様で示される生成元の文字列に対する逐次処理と同時に検査できる場合に対応する。
【００６６】
ステップ３０１は、文字列オブジェクトを生成する処理の開始を表す。
ステップ３０２では、コンピュータ・システムは、生成される文字列オブジェクトに代入される文字列が特性情報を含んでいるかどうかを判定する。特性情報を含んでいる場合、該処理はステップ３０３に進む。特性情報を含んでいない場合、該処理はステップ３０６に進む。
ステップ３０３では、コンピュータ・システムは、上記文字列から文字列オブジェクトを生成する。該生成の終了に応じて、該処理はステップ３０４に進む。
ステップ３０４では、コンピュータ・システムは、上記生成した文字列オブジェクトに伝搬される特性情報を算出する。１つの実施態様として、コンピュータ・システムは、例えば文字列に含まれる特性情報そのままを、伝搬される特性情報として算出する。他の実施態様として、コンピュータ・システムは、文字列に含まれる特性情報と文字列オブジェクトに初期値として与えられた特性情報との論理積の結果を、伝搬される特性情報として算出する。上記算出に応じて、該処理はステップ３０５に進む。なお、伝搬される特性情報が「不明」と算出された場合も、該処理はステップ３０５に進む。
ステップ３０５では、コンピュータ・システムは、上記算出した特性情報を生成された文字列オブジェクト（結果オブジェクト）に付加する。該付加に応じて、該処理はステップ３１１に進み、文字列オブジェクトを生成する処理は終了する。
【００６７】
ステップ３０６では、コンピュータ・システムは、上記文字列をchar型に変換する必要があるかどうかを判定する。Ｊａｖａ（商標）言語では、例えば文字列リテラルはbyte型のデータ列としてメモリに格納される。よって、コンピュータ・システムは、上記文字列リテラルをchar型へ変換する必要がある文字列と判定する。char型に変換する必要があることに応じて、該処理はステップ３０９に進む。char型に変換する必要がないことに応じて、該処理はステップ３０７に進む。
ステップ３０７では、コンピュータ・システムは、上記文字列から文字列オブジェクトを生成する。該生成では、コンピュータ・システムは、上記文字列を文字単位ではなく文字列単位でまとめて文字列オブジェクトに代入する。上記生成の終了に応じて、該処理はステップ３０８に進む。
ステップ３０８では、コンピュータ・システムは、上記生成された文字列オブジェクト（結果オブジェクト）に「未検査」であることを示す特性情報を付加する。該付加の終了に応じて、該処理はステップ３１１に進み、文字列オブジェクトを生成する処理は終了する。
【００６８】
ステップ３０９では、コンピュータ・システムは、上記文字列から文字列オブジェクトを生成する。該生成では、コンピュータ・システムは、上記文字列を１文字ずつchar型に変換し、文字列オブジェクトに代入する。また、コンピュータ・システムは、該変換と並行して１文字ずつ特性を検査し、該検査の結果から、文字列オブジェクトの特性情報を求める。上記生成の終了に応じて、該処理はステップ３１０に進む。
ステップ３１０では、コンピュータ・システムは、上記求めた特性情報を生成された文字列オブジェクト（結果オブジェクト）に付加する。該付加の終了に応じて、該処理はステップ３１１に進み、文字列オブジェクトを生成する処理は終了する。
【００６９】
図３Ｂ及び図３Ｃは、本発明の実施態様における、図１に示す文字列オブジェクトに含まれる文字列について演算処理を実行する処理のフローチャートの例を示す。
【００７０】
図３Ｂは、本発明の実施態様における、図１に示す文字列オブジェクトに含まれる文字列を１文字ずつ逐次処理することを含む演算処理（以下、第１の文字列処理）のフローチャートの例を示す。
第１の文字列処理は、特性情報に応じて最適化された処理及び特性情報を付加する処理を、ライブラリに用意されている従来の処理に、クラス・ライブラリ作成者が追加した処理である。従来の処理とは、例えば、引数として受け取った少なくとも１の文字列オブジェクト（元オブジェクト）に含まれる文字列を１文字ずつ逐次処理し、該逐次処理された文字列を他の少なくとも１の文字列オブジェクト（結果オブジェクト）に含まれる文字列とする処理である。
図３Ｂ中のステップ３２６〜ステップ３２８の処理が上記第２の態様に対応し、ステップ３２４の処理が上記第３の態様に対応する。
【００７１】
ステップ３２１は、第１の文字列処理の開始を表す。
ステップ３２２では、コンピュータ・システムは、元オブジェクトに付加された特性情報に、最適化された処理を実行することが可能である値が設定されているかどうかを判定する。最適化された処理を実行することが可能である値が設定されている場合、該処理はステップ３２３に進む。最適化された処理を実行することが可能である値が設定されていない場合、該処理はステップ３２６に進む。
ステップ３２３では、コンピュータ・システムは、上記特性情報に応じて最適化された処理を実行する。該実行の終了に応じて、該処理はステップ３２４に進む。
ステップ３２４では、コンピュータ・システムは、結果オブジェクトに伝搬される特性情報を算出する。該算出は、第３の態様を用いて行われる。算出の方法は、上記最適化された処理の内容により異なる。コンピュータ・システムは、例えば上記最適化された処理に大文字を小文字に変換する処理が含まれる場合、コンピュータ・システムは、元オブジェクトに含まれる特性情報に「大文字を含まない」という情報を表す特性情報が付加された特性情報を算出する。上記算出に応じて、該処理はステップ３２５に進む。
ステップ３２５では、コンピュータ・システムは、上記算出した特性情報を結果オブジェクトに付加する。該付加に応じて、該処理はステップ３３０に進み、第１の文字列処理は終了する。
【００７２】
ステップ３２６では、コンピュータ・システムは、従来の処理である元オブジェクトに含まれる文字列を１文字ずつ処理する逐次処理を実行する。また、コンピュータ・システムは、該逐次処理と並行して、元オブジェクトに含まれる文字列の文字について、一文字ずつ特性を検査（以下、第１の検査）する。また、コンピュータ・システムは、結果オブジェクトの特性情報を検査（以下、第２の検査）する。上記逐次処理、第１の検査及び第２の検査の終了に応じて、該処理はステップ３２７に進む。
ステップ３２７では、コンピュータ・システムは、「未検査」を意味する特性情報が付加された元オブジェクト（以下、第１の元オブジェクト）があるかどうかを判定する。コンピュータ・システムは、さらに付加されている特性情報と異なる特性情報が第１の検査によって求められた元オブジェクト（第２の元オブジェクト）があるかどうかを判定する。上記第１の元オブジェクト又は上記第２の元オブジェクトがある場合、該処理はステップ３２８に進む。上記第１の元オブジェクト及び上記第２の元オブジェクトがない場合、該処理はステップ３２９に進む。
ステップ３２８では、コンピュータ・システムは、第１の検査の結果から元オブジェクトに付加する特性情報を決定する。そして、コンピュータ・システムは、該決定した特性情報を元オブジェクトに付加する。該付加の終了に応じて、該処理はステップ３２９に進む。
ステップ３２９では、コンピュータ・システムは、第１の検査及び第２の検査の結果から、結果オブジェクトの特性情報を求める。コンピュータ・システムは、上記求めた特性情報を結果オブジェクトに付加する。該付加の終了に応じて、該処理はステップ３３０に進み、第１の文字列処理は終了する。
ステップ３３０は、第１の文字列処理の終了を表す。
【００７３】
図３Ｃは、本発明の実施態様における、図１に示す文字列オブジェクトに含まれる文字列をまとめて処理することを含む演算処理（以下、第２の文字列処理）のフローチャートの例を示す。
第２の文字列処理は、特性情報に応じて最適化された処理及び特性情報を付加する処理を、ライブラリに用意されている従来の処理にクラス・ライブラリ作成者が追加した処理である。また、上記従来の処理は、例えば引数として受け取った少なくとも１の文字列オブジェクト（元オブジェクト）に含まれる文字列をまとめて処理し、該処理された文字列を他の少なくとも１の文字列オブジェクト（結果オブジェクト）に含まれる文字列とする処理とする。図３Ｃ中のステップ３４４の処理が、第３の態様に対応する。
【００７４】
ステップ３４１は、第２の文字列処理の開始を表す。
ステップ３４２では、コンピュータ・システムは、元オブジェクトに付加された特性情報に、最適化された処理を実行することが可能である値が設定されているかどうかを判定する。最適化された処理を実行することが可能である値が設定されている場合、該処理はステップ３４３に進む。最適化された処理を実行することが可能である値が設定されていない場合、該処理はステップ３４６に進む。
ステップ３４３では、コンピュータ・システムは、上記特性情報に応じて最適化された処理を実行する。該実行の終了に応じて、該処理はステップ３４４に進む。
ステップ３４４では、コンピュータ・システムは、結果オブジェクトに伝搬される特性情報を算出する。該算出は、第３の態様により行われる。算出の方法は、上記最適化された処理の内容により異なる。コンピュータ・システムは、例えば上記最適化された処理に先頭から５文字を抽出する処理が含まれ且つ、元オブジェクトに含まれる特性情報が「大文字しか含まない」ことを表す場合、コンピュータ・システムは、元オブジェクトに含まれる特性情報伝搬される特性情報を算出する。上記算出に応じて、該処理はステップ３４５に進む。
ステップ３２５では、コンピュータ・システムは、上記算出した特性情報を結果オブジェクトに付加する。該付加に応じて、該処理はステップ３４７に進み、第２の文字列処理は終了する。
【００７５】
ステップ３４６では、コンピュータ・システムは、従来の処理である元オブジェクトに含まれる文字列をまとめて処理する処理を実行する。該実行の終了に応じて、該処理はステップ３４７に進み、第２の文字列処理は終了する。
【００７６】
図４Ａ〜図４Ｆは、本発明の実施例を説明するためのプログラム・コード及び状態遷移図を示す。
【００７７】
図４Ａは、本発明の実施態様における、上記例１の実施例を説明するためのプログラム・コードを示す。
【００７８】
以下では、プログラム・コード（４０１）を例に、オブジェクトの生成に応じて特性情報が付加される流れ、及び該付加により最適化された処理が実行される例を説明する。
コンピュータ・システムが、プログラム・コード（４０１）を実行すると、最初に、new String("ABC")が実行される。ここで、new String("ABC")はオブジェクトを生成する処理に該当するため、図３Ａで示すフローチャートの各処理が実行される。
ステップ３０２では、文字列オブジェクトに代入される文字列"ABC"が特性情報を含んでいないため、該処理はステップ３０６に進む。
ステップ３０６では、文字列"ABC"はリテラルでありchar型に変換する必要があるため、該処理はステップ３０９に進む。
ステップ３０９では、コンピュータ・システムは、文字列"ABC"が代入される文字列オブジェクトsを生成する。該生成において、コンピュータ・システムは、文字列"ABC"を１文字ずつchar型に変換しながらヒープメモリ上に配置する。また、コンピュータ・システムは、上記変換と並行して１文字ずつ文字列"ABC"の特性を検査する。ここで、該検査する特性が、「小文字が含まれない」という特性だとする。上記検査の結果、"A"、"B"及び"C"は小文字ではないため、コンピュータ・システムは、文字列"ABC"は小文字が含まれない文字列であると判定する。そして、該判定により、文字列オブジェクトsの特性情報として「全ての文字が小文字を含まない」を表す値が求められる。上記生成の終了に応じて、該処理がステップ３１０に進む。
ステップ３１０では、上記「全ての文字が小文字を含まない」を表す値を、例えば「01」とする場合、コンピュータ・システムは、文字列オブジェクトsに特性情報「01」を付加する。該付加の終了に応じて、該処理はステップ３１１に進み、オブジェクトを生成する処理は終了する。
【００７９】
上記オブジェクトを生成する処理が終了すると、toUpperCase()メソッドが実行される。toUpperCase()メソッドは、文字列に含まれる文字を全て大文字に変換するメソッドである。
ここで、クラス・ライプラリ作成者が、例えば特性情報「01」が付加された文字列がtoUpperCase()メソッドに与えられた場合、与えられた文字列をそのまま返値として返す実装をtoUpperCase()メソッドの実装部分に追加していたとする。上記実装が追加されている場合、コンピュータ・システムは、上記実行において、文字列を大文字化する従来の処理を全く行う必要がない。コンピュータ・システムは、与えられた特性情報「01」が付加された文字列の文字列"ABC"をそのままtoUpperCase()メソッドの返値として返すことができる。よって、toUpperCase()メソッドの処理は、高速化される。
【００８０】
図４Ｂは、本発明の実施態様における、上記例２の実施例を説明するためのプログラム・コードを示す。
プログラム・コード（４１１）は、StringRepleaceFirst()メソッドの実装部分である。StringRepleaceFirst()メソッドの従来の処理（４１２）では、Pattern.compile()メソッドが実行され、大量のオブジェクトが生成されうる。
ここで、StringRepleaceFirst()メソッドの引数で渡される文字列に正規表現の特殊文字が含まれない場合、上記Pattern.compile()メソッドによって実行される処理は、他のメソッドを用いた処理に置き換えることが可能である。上記正規表現の特殊文字とは、例えば正規表現“[a-z]+[0-9]”における、１回以上の繰り返しを表す“+”、文字範囲指定の開始と終了を表す“[”又は“]”であるがこれらに限られない。他のメソッドを用いた処理は、例えばindexOf()メソッドとsubstring()とを組み合わせたコードによる。上記組み合わせたコードによって実行される処理は、大量のオブジェクトを生成せず、Pattern.compile()メソッドによって実行される処理よりも高速で実行されうる。
よって、クラス・ライブラリ作成者は、例えばStringRepleaceFirst()メソッドに、引数で渡された文字列の特性情報が「正規表現の特殊文字列が含まれないこと」を表す場合のコード（４１２）を追加する。該追加により、引数で渡された文字列が正規表現を含まない場合、StringRepleaceFirst()メソッドは、従来の処理が実行される場合に比べ高速に実行されうる。
【００８１】
図４Ｃは、本発明の実施態様における、下記図４Ｄの説明におけるプログラムに関する状態遷移図を示す。
状態遷移図（４２１）は、文字列に含まれる正規表現“[a-z]+[0-9]”についてパターンマッチを行うプログラム・コードの遷移を表す。プログラマーは、上記プログラム・コードを実装するステートマシンを作成することで、正規表現“[a-z]+[0-9]”に対する処理が従来のパターンマッチ・プログラムよりも高速化したパターンマッチ・プログラムを作成することができる。
【００８２】
図４Ｄは、本発明の実施態様における、上記例３の実施例を説明するためのプログラム・コードを示す。
プログラム・コード（４３１）は、引数で渡される文字列が８ビット値に限定されている場合のステートマシン（図４Ｃを参照）の実装の例である。プログラム・コード（４３２）は、引数で渡される文字列が８ビット値に限定されていない場合のステートマシンの実装の例である。引数で渡される文字列が８ビット値に限定されていない場合、プログラマーは、プログラム・コード（４３２）に示す、例えばcase文による実装で文字列に含まれる文字と正規表現とのマッチングを実現させる。引数で渡される文字列が８ビット値に限定されている場合、プログラマーは、上記case文による実装に代えて、プログラム・コード（４３１）に示す、例えばfor文による単純なループによって、上記マッチングを実現させうる。
【００８３】
図４Ｅは、本発明の実施態様における、上記例４の実施例を説明するためのプログラム・コードを示す。
【００８４】
プログラム・コード（４４１）は、java.net.URLDecoder.decode()メソッドに本発明の実施態様を適用したプログラム・コードの例である。従来コード（４４２）が、従来の処理に対応し、追加コード（４４３〜４４６）が本発明の実施態様を適用するために追加した処理に対応する。
java.net.URLDecoder.decode()メソッドは、文字列を１文字ずつ読み込み、該読み込んだ文字列内のＵＲＬエンコードの特殊文字を本来の文字に戻すメソッドである。java.net.URLDecoder.decode()メソッドは、第１の文字列処理に該当する。
java.net.URLDecoder.decode()メソッドが実行されると、図３Ｂで示すフローチャートの各処理が実行される。
追加コード（４４４）の処理が、ステップ３２２の処理に対応する。追加コード（４４４）では、引数で渡された文字列オブジェクトsに含まれる特性情報に、最適化された処理を実行することが可能である値が設定されているかどうかが判定される。
特性情報が、例えば「ＵＲＬエンコードにおける特殊文字を含まない」を表す値の場合、最適化された処理を実行することが可能であると判定される。文字列がＵＲＬエンコードにおける特殊文字を含まない場合、ステップ３２３及びステップ３２４に対応する処理は、java.net.URLDecoder.decode()メソッドにはないため、ステップ３２５に対応する「return s」が実行され、java.net.URLDecoder.decode()メソッドは終了する。
【００８５】
上記可能ではないと判定された場合、ステップ３２６に対応する従来の処理である従来コード（４４２）の処理が実行される。コード（４４２）の処理では、ＵＲＬエンコードにおける特殊文字である「＋」及び「％」が、文字列オブジェクトsに含まれる文字列に含まれているかが１文字ずつチェックされる。該チェックの結果は、変数needToChangeにセットされる。なお、java.net.URLDecoder.decode()メソッドにおいては、上記チェックは、第１の検査を兼ねることができる。よって、追加コード（４４５）において、文字列オブジェクトsに特性情報が付加されていない場合、変数needToChangeが利用され、文字列オブジェクトsに特性情報が設定される。追加コード（４４５）の処理は、ステップ３２７及びステップ３２８に対応する。
また、java.net.URLDecoder.decode()メソッドの結果は、ＵＲＬエンコードにおける特殊文字を含まないことが自明である。よって、追加コード（４４６）において、返値としてsb.toString()で生成された文字列に、「ＵＲＬエンコードにおける特殊文字を含まない」を表す特性情報が設定される。追加コード（４４６）の処理は、ステップ３２９に対応する。
【００８６】
また、ステップ３２８において、文字列オブジェクトsには、特性情報が付加される。よって、文字列オブジェクトsを引数として再度URLDecoder.decode()メソッドが実行されたときに、最適化された処理が実行される可能性がある。
【００８７】
図４Ｆは、本発明の実施態様における、図３Ａに示すフローチャートの処理を実装するプログラム・コードの例を示す。
以下では、プログラム・コード（４５１）を例に、オブジェクト生成時に特性情報が付加される流れ及び、特性情報が伝搬する流れを説明する。
コンピュータ・システムが、プログラム・コード（４５１）を実行すると、最初に、new String("ABC")が実行される。ここで、new String("ABC")は、オブジェクトを生成する処理に該当するので、図３Ａで示すフローチャートの各処理が実行される。
ステップ３０２では、文字列オブジェクトに代入される文字列"ABC"が特性情報を含んでいないため、該処理はステップ３０６に進む。
ステップ３０６では、文字列"ABC"はリテラルでありchar型に変換する必要があるため、該処理はステップ３０９に進む。
ステップ３０９では、コンピュータ・システムは、文字列"ABC"が代入される文字列オブジェクトs1を生成する。該生成において、コンピュータ・システムは、文字列"ABC"を１文字ずつchar型に変換しながらヒープメモリ上に配置する。また、コンピュータ・システムは、上記変換と並行して１文字ずつ文字列"ABC"の特性を検査する。ここで、該検査する特性が、「小文字が含まれない」という特性だとする。上記検査の結果、"A"、"B"及び"C"は小文字ではないため、コンピュータ・システムは、文字列"ABC"は小文字が含まれない文字列であると判定する。そして、該判定により、文字列オブジェクトs1の特性情報として「全ての文字が小文字を含まない」を表す値が求められる。上記生成の終了に応じて、該処理がステップ３１０に進む。
ステップ３１０では、上記「全ての文字が小文字を含まない」を表す値を、例えば「01」とする場合、コンピュータ・システムは、文字列オブジェクトs1に特性情報「01」を付加する。該付加の終了に応じて、該処理はステップ３１１に進み、オブジェクトs1を生成する処理は終了する。
【００８８】
次に、new String("XYZ")が実行される。ここで、new String("XYZ")は、オブジェクトを生成する処理に該当するため、図３Ａで示すフローチャートの各処理が実行される。
ステップ３０２では、文字列オブジェクトに代入される文字列"XYZ"が特性情報を含んでいないため、該処理はステップ３０６に進む。
ステップ３０６では、文字列"XYZ"はリテラルでありchar型に変換する必要があるため、該処理はステップ３０９に進む。
ステップ３０９では、コンピュータ・システムは、文字列"XYZ"が代入される文字列オブジェクトs2を生成する。該生成において、コンピュータ・システムは、文字列"XYZ"を１文字ずつchar型に変換しながらヒープメモリ上に配置する。また、コンピュータ・システムは、上記変換と並行して１文字ずつ文字列"XYZ"の特性を検査する。ここで、該検査する特性が、「小文字が含まれない」という特性だとする。上記検査の結果、"X"、"Y"及び"Z"は小文字ではないため、コンピュータ・システムは、文字列"XYZ"は小文字が含まれない文字列であると判定する。そして、該判定により、文字列オブジェクトs2の特性情報として「全ての文字が小文字を含まない」を表す値が求められる。上記生成の終了に応じて、該処理がステップ３１０に進む。
ステップ３１０では、上記「全ての文字が小文字を含まない」を表す値を、例えば「01」とする場合、コンピュータ・システムは、文字列オブジェクトs2に特性情報「01」を対応付ける。該対応付けの終了に応じて、該処理はステップ３１１に進み、オブジェクトs2を生成する処理は終了する。
【００８９】
最後に、concat()メソッドが実行される。concat()メソッドの実行により、文字列オブジェクトs1に含まれる文字列と文字列オブジェクトs2に含まれる文字列とを連結した、文字列"ABCXYZ"を含むStringオブジェクトが生成される。また、該生成時に、クラス・ライブラリ作成者が、あらかじめconcat()メソッドに用意しておいたmergeAttr(attr, attr)が呼び出される。文字列オブジェクトs1及び文字列オブジェクトs2に含まれる特性情報はともに「全ての文字が小文字を含まない」を表す「01」である。よって、「01」と「01」との論理和「01」が上記文字列"ABCXYZ"を含むStringオブジェクトに付加される、そして、該オブジェクトが、s1.concat(s2)の返値として返される。
【００９０】
図５は、本発明の実施態様における、プログラム実行時の文字列の処理を最適化するコンピュータ・システムが有する機能を図示する機能ブロック図の例を示す。
コンピュータ・システム（５０１）は、メモリ（５０２）、判定部（５０３）、対応付け部（５０４）及び実行部（５０５）を含む。
【００９１】
メモリ（５０２）は、アプリケーションが自由に利用できる記憶領域を有する主記憶装置である。上記記憶領域には、プログラム（５０９）、少なくとも１の文字列（５０８ａ〜５０８ｎ）及び少なくとも１の文字列（５０８ａ〜５０８ｎ）それぞれに対応する少なくとも１の特性情報（５０７ａ〜５０７ｎ）が格納されうる。
【００９２】
プログラム（５０９）は、少なくとも１つの文字列の処理（５１０）を含むプログラムである。プログラム（５０９）は、コンピュータ・システム（５０１）によって、メモリ（５０２）内に読み込まれ、そして中央演算処理装置（ＣＰＵ）で実行される。
文字列の処理（５１０）は、少なくとも１の最適化された処理（５１１）及び従来の処理（５１２）を含む処理である。
最適化された処理（５１１）及び従来の処理（５１２）は、少なくとも１の文字列（５０８ａ〜５０８ｎ）を使用して演算を行う処理である。
最適化された処理（５１１）は、ある特性情報と対応付けられた文字列について実行される場合に、従来の処理（５１２）よりも高速で実行されうる。
【００９３】
文字列（５０８ａ〜５０８ｎ）は、プログラム（５０９）実行時にメモリに割り付けられるデータである。文字列（５０８ａ〜５０８ｎ）は、文字列の処理（５１０）の実行時において、例えば、生成、参照、更新又は削除されうる。
特性情報（５０７ａ〜５０７ｎ）は、文字列（５０８ａ〜５０８ｎ）の特性を表す情報である。特性情報（５０７ａ〜５０７ｎ）それぞれは、文字列（５０８ａ〜５０８ｎ）それぞれと対応する。
【００９４】
判定部（５０３）は、第１の文字列（５０８ａ）に関する演算処理が実行されることに応じて、第１の文字列（５０８ａ）についての特性と上記演算処理とから、第１の文字列（５０８ａ）及び上記演算処理の結果のデータである第２の文字列（５０８ｂ）のうち少なくとも１の文字列に対応する特性情報を判定する。
判定部（５０３）は、検査部（５０６）を含む。検査部（５０６）は、上記演算処理において、文字列（５０８ａ〜５０８ｎ）に対する逐次処理が実行されることに応じて、該逐次処理される文字の特性を１文字ずつ求める。判定部（５０３）は、検査部（５０６）によって求められた文字の特性から、逐次処理が実行された文字列（５０８ａ〜５０８ｎ）に対応する特性情報（５０７ａ〜５０７ｎ）を判定する。
【００９５】
対応付け部（５０４）は、上記判定された特性情報を判定部（５０３）から受信し、第１の文字列（５０８ａ）又は第２の文字列（５０９ａ）に対応付ける。
【００９６】
実行部（５０５）は、最適化された処理（５１１）を含む文字列の処理（５１０）が実行されるときに、文字列の処理（５１０）によって処理される文字列（５０８ａ〜５０８ｎ）に対応する特性情報（５０７ａ〜５０７ｎ）を参照する。そして、実行部（５０５）は、参照した特性情報（５０７ａ〜５０７ｎ）が、最適化された処理（５１１）が実行される条件を満たす場合、最適化された処理（５１１）を実行させる。実行部（５０５）は、参照した特性情報（５０７ａ〜５０７ｎ）が、最適化された処理（５１１）が実行される条件を満たさない場合、例えば従来の処理（５１２）を実行させる。
【００９７】
図６は、本発明の実施態様における、図５に示すシステムのハードウェアのブロック図を示す。
コンピュータ・システム（６０１）は、ＣＰＵ（６０２）とメイン・メモリ（６０３）と含み、これらはバス（６０４）に接続されている。ＣＰＵ（６０２）は好ましくは、３２ビット又は６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のＸｅｏｎ（商標）シリーズ、Ｃｏｒｅ（商標）シリーズ、Ａｔｏｍ（商標）シリーズ、Ｐｅｎｔｉｕｍ（商標）シリーズ、Ｃｅｌｅｒｏｎ（商標）シリーズ、ＡＭＤ社のＰｈｅｎｏｍ（商標）シリーズ、Ａｔｈｌｏｎ（商標）シリーズ、Ｔｕｒｉｏｎ（商標）シリーズ又はＳｅｍｐｒｏｎ（商標）を使用することができる。バス（６０４）には、ディスプレイ・コントローラ（６０５）を介して、ＬＣＤモニタなどのディスプレイ（６０６）が接続される。ディスプレイ（６０６）は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インタフェースで表示するために使用される。バス（６０４）にはまた、ＩＤＥ又はＳＡＴＡコントローラ（６０７）を介して、ハードディスク又はシリコン・ディスク（６０８）と、ＣＤ−ＲＯＭ、ＤＶＤドライブ又はＢＤドライブ（６０９）が接続される。
【００９８】
ハードディスク（６０８）には、オペレーティング・システム、Ｊ２ＥＥなどのＪａｖａ（商標）処理環境を提供するプログラム、その他のプログラム及びデータが、メイン・メモリにロード可能に記憶されている。
【００９９】
ＣＤ−ＲＯＭ、ＤＶＤ又はＢＤドライブ（６０９）は、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又はＢＤからプログラムをハードディスクに追加導入するために使用される。バス（６０４）にはさらに、キーボード・マウスコントローラ（６１０）を介して、キーボード（６１１）及びマウス（６１２）が接続されている。
【０１００】
通信インタフェース（６１４）は、例えばイーサネット（商標）・プロトコルに従う。通信インタフェース（６１４）は、通信コントローラ（６１３）を介してバス（６０４）に接続され、コンピュータ・システム及び通信回線（６１５）を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は、有線ＬＡＮ環境、或いは例えばＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどの無線ＬＡＮ接続規格に基づく無線ＬＡＮ環境であってもよい。
【図１】
2010277440.tif 000003
【図２Ａ】
2010277440.tif 000004
【図２Ｂ】
2010277440.tif 000005
【図３Ａ】
2010277440.tif 000006
【図３Ｂ】
2010277440.tif 000007
【図３Ｃ】
2010277440.tif 000008
【図４Ａ】
2010277440.tif 000009
【図４Ｂ】
2010277440.tif 000010
【図４Ｃ】
2010277440.tif 000011
【図４Ｄ】
2010277440.tif 000012
【図４Ｅ】
2010277440.tif 000013
【図４Ｆ】
2010277440.tif 000014
【図５】
2010277440.tif 000015
【図６】
2010277440.tif 000016