JP2010277440A - プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム - Google Patents

プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム Download PDF

Info

Publication number
JP2010277440A
JP2010277440A JP2009131016A JP2009131016A JP2010277440A JP 2010277440 A JP2010277440 A JP 2010277440A JP 2009131016 A JP2009131016 A JP 2009131016A JP 2009131016 A JP2009131016 A JP 2009131016A JP 2010277440 A JP2010277440 A JP 2010277440A
Authority
JP
Japan
Prior art keywords
character string
character
characteristic information
processing
determining
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.)
Pending
Application number
JP2009131016A
Other languages
English (en)
Inventor
Kazunori Ogata
一則 緒方
Kiyokuni Kawachiya
清久仁 河内谷
Kazuaki Ishizaki
一明 石崎
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 JP2009131016A priority Critical patent/JP2010277440A/ja
Priority to US12/787,500 priority patent/US9696976B2/en
Publication of JP2010277440A publication Critical patent/JP2010277440A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Document Processing Apparatus (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】プログラムの生産性を下げることなく、実行効率の高いプログラムを生産するための仕組みが求められている。
【解決手段】本発明は、文字列の処理を含むプログラムを実行するコンピュータ・システムにおいて、文字列に対応付けられた上記文字列の特性を表す特性情報を用いて、該プログラム実行時における文字列の処理を最適化する方法を提供する。該方法は、第1の文字列についての特性と該第1の文字列に関する演算処理とから、上記第1の文字列及び上記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定するステップと、上記判定された特性情報を、上記少なくとも1の文字列に対応付けるステップとを含む。本発明はまた、文字列の処理を含むプログラムを実行し、上記特性情報を用いて、該プログラム実行時における文字列の処理を最適化するコンピュータ・システム及びコンピュータ・プログラムを提供する。
【選択図】図1

Description

本発明は、プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラムに関する。
多くのプログラム言語のクラス・ライブラリには、文字列を保持するためのクラス(以下、文字列クラス)が標準のクラスとして用意されている。プログラマーがシステムに用意された豊富なクラス・ライブラリを利用することによって、プログラミング作業の生産性が向上される。しかし、クラス・ライブラリに用意されているクラスは汎用的に作られている。よって、必ずしも実行効率がよいプログラムが上記クラスを使用して生産されるわけではない。
例えばJava(商標)言語には、文字列クラスの1つとしてjava.lang.Stringクラス(以下、Stringクラス)が用意されている。そして、Stringクラスには、指定された正規表現に合致する文字列中の部分を別の文字列に変換するreplaceFirst()メソッドが用意されている。replaceFirst()メソッドにおいて指定される正規表現は、正規表現のメタ文字を必ずしも含んでいるとは限らない。例えば「set」というメタ文字を含まない正規表現が指定されうる。該指定により、「set」という文字列が、例えば「get」という文字列に変換される。
上記変換は、例えばString.indexOf()メソッドとString.substring()メソッドとを組み合わせることによっても実装ができる。上記組み合わせによる変換が実装された場合、プログラムの実行速度はreplaceFirst()メソッドによる実装よりも速くなる。一方で、プログラムの生産性及び汎用性はreplaceFirst()メソッドが実装された場合よりも低くなる。
プログラムの実行速度を優先する場合、例えば正規表現がメタ文字を含むかどうかに応じてreplaceFirst()メソッドと上記組み合わせとをプログラマーが使い分けてコードを作成する方法が考えられうる。しかし、正規表現がメタ文字を含むかどうかがプログラム実行時まで決定されない場合、プログラマーが、replaceFirst()メソッドによる実装と上記組み合わせによる実装との両方の実装を用意すること及び該両方の実装をメンテナンスすることは現実的ではない。
プログラマーは、システムに用意された文字列クラスを利用することで、プログラミング作業の生産性を向上させる。しかし、文字列クラスは汎用的に作られているため、必ずしも実行効率がよいプログラムが生産されるわけではない。そこで、プログラムの生産性を下げることなく、実行効率の高いプログラムを生産するための仕組みが求められている。
本発明は、文字列の処理を含むプログラムを実行するコンピュータ・システムにおいて、文字列に対応付けられた上記文字列の特性を表す特性情報を用いて、上記プログラム実行時における上記文字列の処理を最適化する方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
第1の文字列についての特性と該第1の文字列に関する演算処理とから、上記第1の文字列及び上記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定するステップと、
上記判定された特性情報を、上記少なくとも1の文字列に対応付けるステップと
を含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記特性情報が対応付けられた文字列に関する処理を実行する場合に、上記対応付けられた特性情報に応じて、最適化された処理を選択して上記処理を実行するステップを含む。
本発明の1つの実施態様では、上記演算処理が、少なくとも1の第1の文字列を代入する少なくとも1の第2の文字列を生成し、該生成時に上記少なくとも1の第1の文字列を1文字ずつ逐次処理することを含み、
上記判定するステップが、上記逐次処理を実行するステップと該逐次処理とともに上記逐次処理する文字を検査するステップとをさらに含み、それによって上記少なくとも1の第2の文字列の特性情報が判定される。
本発明の1つの実施態様では、上記演算処理が、特性情報が不明である又は対応付けられていない少なくとも1の上記第1の文字列を1文字ずつ逐次処理することを含み、
上記判定するステップが、上記逐次処理を実行するステップと該逐次処理とともに上記逐次処理する文字を検査するステップとをさらに含み、それによって上記少なくとも1の特性情報が判定される。
本発明の1つの実施態様では、上記演算処理が、少なくとも1の第1の文字列についての演算処理であり、
上記判定するステップが、上記少なくとも1の第1の文字列それぞれについての特性情報と上記演算処理とから、少なくとも1の第2の文字列の特性情報を判定するステップを含む。
本発明の1つの実施態様では、上記文字列の特性を表す特性情報が、上記文字列が文字集合に属する文字を含むこと、含まないこと又は含むかどうか不明であることを表す少なくとも1の第1の情報と、上記文字列が上記文字集合に属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す第2の情報とを含む。
本発明の1つの実施態様では、上記文字集合が少なくとも2の第1の文字集合をまとめて表す第2の文字集合であり、該少なくとも2の第1の文字集合それぞれに含まれる文字が重複せず、上記第1の情報それぞれが、上記文字列が上記第1の文字集合それぞれに属する文字を含むこと、含まないこと又は含むかどうか不明であることを表し、上記第2の情報が、上記文字列が上記第1の文字集合全てに属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す。
本発明の1つの実施態様では、上記文字集合が少なくとも2の第1の文字集合をまとめて表す第2の文字集合であり、該少なくとも2の第1の文字集合それぞれに含まれる文字が重複せず、上記第1の情報が、上記文字列が上記第2の文字集合に属する文字を含むこと、含まないこと又は含むことが不明であることを表し、上記第2の情報が、上記文字列が上記第2の文字集合に属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す。
本発明の1つの実施態様では、上記第1の情報及び上記第2の情報がビット列で表され、ビットそれぞれが1つの文字集合又は文字集合のいずれにも属さない文字の集合に対応する。
本発明の1つの実施態様では、上記演算処理が、第1の特性情報が対応付けられた第1の文字列と、第2の特性情報が対応付けられた第1の文字列とを結合する演算処理であり、
上記判定するステップが、上記第1の特性情報と上記第2の特性情報との論理和によって求められる特性情報を第2の文字列の特性情報と判定するステップを含む。
本発明の1つの実施態様では、上記演算処理が、第1の特性情報が対応付けられた第1の文字列から第2の特性情報が対応付けられた第1の文字列を削除する演算処理であり、
上記判定するステップが、上記第1の特性情報を第2の文字列の特性情報と判定するステップを含む。
本発明の1つの実施態様では、上記演算処理が、第1の特性情報が対応付けられた第1の文字列から第2の特性情報が対応付けられた第1の文字列を削除する演算処理であり、該演算処理によって上記第2の特性情報が表す文字集合に属する文字が上記第1の特性情報が対応付けられた第1の文字列に含まれなくなる場合、
上記判定するステップが、上記第1の特性情報と上記第2の特性情報との論理積によって求められる特性情報を第1の文字列の特性情報と判定するステップを含む。
本発明の1つの実施態様では、上記第1の文字列及び上記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定するステップが、
上記第1の特性情報と上記第2の特性情報との論理和によって求められる特性情報を第2の文字列の特性情報と判定するステップ、上記第1の特性情報を第2の文字列の特性情報と判定するステップ及び上記第1の特性情報と上記第2の特性情報との論理積によって求められる特性情報を第1の文字列の特性情報と判定するステップの少なくとも2を組み合わせて上記特性情報を判定するステップを含む。
本発明の1つの実施態様では、上記文字集合が、大文字の集まり、小文字の集まり、数字の集まり、2バイト文字の集まり、ローマ字の集まり、同一の文字コード文字の集まり、正規表現の特殊文字の集まり、8ビットで表現できる文字の集まり及びURLエンコードにおける特殊文字の集まりからなる群から選択される少なくとも1を表す。
本発明の1つの実施態様では、上記演算処理が、少なくとも1の第1の文字列を代入する少なくとも1の第2の文字列を生成することを含み、
上記判定するステップが、上記少なくとも1の第1の文字列についての特性情報から上記第2の文字列の特性情報を判定するステップを含む。
本発明の1つの実施態様では、上記演算処理が、文字列を生成し、該生成時に少なくとも1の第1の文字列を少なくとも1の第2の文字列に1文字ずつ代入する処理を含み、
上記判定するステップが、上記代入する処理を実行するステップと該代入とともに上記代入する文字を検査するステップとをさらに含み、それによって上記少なくとも1の第2の文字列の特性情報が判定される。
本発明の1つの実施態様では、上記文字列がオブジェクトとして扱われるプログラム言語において、上記文字列に関する演算処理が上記オブジェクトに関する演算処理であり、上記特性情報が上記オブジェクトに含まれる。
本発明はまた、文字列の処理を含むプログラムを実行するコンピュータ・プログラムを提供する。該コンピュータ・プログラムは、コンピュータ・システムに上記に記載の方法の各ステップを実行させる。
本発明はまた、文字列の処理を含むプログラムを実行し、文字列に対応付けられた上記文字列の特性を表す特性情報を用いて、上記プログラム実行時における上記文字列の処理を最適化するコンピュータ・システムを提供する。該コンピュータ・システムは、
第1の文字列についての特性と該第1の文字列に関する演算処理とから、上記第1の文字列及び上記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定する判定部と、
上記判定された特性情報を、上記少なくとも1の文字列に対応付ける対応付け部と
を含む。
本発明の1つの実施態様では、上記特性情報が対応付けられた文字列に関する処理を実行する場合に、上記対応付けられた特性情報に応じて、最適化された処理を選択して上記処理を実行する実行部をさらに含む。
本発明の1つの実施態様では、上記演算処理が、少なくとも1の第1の文字列を代入する少なくとも1の第2の文字列を生成し、該生成時に上記少なくとも1の第1の文字列を1文字ずつ逐次処理することを含み、
上記判定部が、上記逐次処理を実行し、及び該逐次処理とともに上記逐次処理する文字を検査する。それによって上記少なくとも1の第2の文字列の特性情報が判定される。
本発明の1つの実施態様では、上記演算処理が、特性情報が不明である又は対応付けられていない少なくとも1の上記第1の文字列を1文字ずつ逐次処理することを含み、
上記判定部が、上記逐次処理を実行し、及び該逐次処理とともに上記逐次処理する文字を検査する。それによって上記少なくとも1の特性情報が判定される。
本発明の1つの実施態様では、上記演算処理が、少なくとも1の第1の文字列についての演算処理であり、
上記判定部が、上記少なくとも1の第1の文字列それぞれについての特性情報と上記演算処理とから、少なくとも1の第2の文字列の特性情報を判定する。
本発明の1つの実施態様では、上記演算処理が、第1の特性情報が対応付けられた第1の文字列と、第2の特性情報が対応付けられた第1の文字列とを結合する演算処理であり、
上記判定部が、上記第1の特性情報と上記第2の特性情報との論理和によって求められる特性情報を第2の文字列の特性情報と判定する。
本発明の1つの実施態様では、上記演算処理が、第1の特性情報が対応付けられた第1の文字列から第2の特性情報が対応付けられた第1の文字列を削除する演算処理であり、
上記判定部が、上記第1の特性情報を第2の文字列の特性情報と判定する。
本発明の1つの実施態様では、上記演算処理が、第1の特性情報が対応付けられた第1の文字列から第2の特性情報が対応付けられた第1の文字列を削除する演算処理であり、該演算処理によって上記第2の特性情報が表す文字集合に属する文字が上記第1の特性情報が対応付けられた第1の文字列に含まれなくなる場合、
上記判定部が、上記第1の特性情報と上記第2の特性情報との論理積によって求められる特性情報を第1の文字列の特性情報と判定する。
本発明の1つの実施態様では、上記判定部が、演算処理が、上記第1の特性情報と上記第2の特性情報との論理和によって求められる特性情報を第2の文字列の特性情報と判定するステップ、上記第1の特性情報を第2の文字列の特性情報と判定するステップ及び上記第1の特性情報と上記第2の特性情報との論理積によって求められる特性情報を第1の文字列の特性情報と判定するステップの少なくとも2を組み合わせて上記特性情報を判定する。
本発明の1つの実施態様では、上記演算処理が、少なくとも1の第1の文字列を代入する少なくとも1の第2の文字列を生成することを含み、
上記判定部が、上記少なくとも1の第1の文字列についての特性情報から上記第2の文字列の特性情報を判定する。
本発明の1つの実施態様では、上記演算処理が、文字列を生成し、該生成時に少なくとも1の第1の文字列を少なくとも1の第2の文字列に1文字ずつ代入する処理を含み、
上記判定部が、上記代入する処理を実行するステップと該代入とともに上記代入する文字を検査する。それによって上記少なくとも1の第2の文字列の特性情報が判定される。
本発明の実施態様によれば、文字列の内容又は文字列の値に応じて高速に実行される最適化された処理が、プログラム実行時に動的に切り替えられて実行される。上記最適化された処理は、クラス・ライブラリに用意されるため、プログラマーの生産性を低下させることなく、プログラムの実装速度が向上する。
本発明の実施態様における、Java(商標)で実装した場合の文字列オブジェクトの構造を示す。 本発明の実施態様における、図1に示す特性情報の判定を説明するための図である。 本発明の実施態様における、図1に示す文字列オブジェクトに含まれる特性情報を、他の文字列オブジェクトに伝搬するための実装例を示す。 本発明の実施態様における、図1に示す文字列オブジェクトを生成する処理のフローチャートを示す。 本発明の実施態様における、図1に示す文字列オブジェクトに含まれる文字列を1文字ずつ逐次処理することを含む演算処理のフローチャートの例を示す。 本発明の実施態様における、図1に示す文字列オブジェクトに含まれる文字列をまとめて処理することを含む演算処理のフローチャートの例を示す。 本発明の実施態様における、例1の実施例を説明するためのプログラム・コードを示す。 本発明の実施態様における、例2の実施例を説明するためのプログラム・コードを示す。 本発明の実施態様における、下記図4Dの説明におけるプログラムに関する状態遷移図を示す。 本発明の実施態様における、例3の実施例を説明するためのプログラム・コードを示す。 本発明の実施態様における、例4の実施例を説明するためのプログラム・コードを示す。 本発明の実施態様における、図3Aに示すフローチャートの処理を実装するプログラム・コードの例を示す。 本発明の実施態様における、プログラム実行時の文字列の処理を最適化するコンピュータ・システムが有する機能を図示する機能ブロック図の例を示す。 本発明の実施態様における、図5に示すシステムのハードウェアのブロック図を示す。
本発明の実施態様において、「文字列」とは、1つ以上の文字の連なりをいう。文字は、プログラムにおいて文字表現として使用される文字コードの文字データである。文字コードは、例えばEUC−JP、Shift_JIS、UTF−8であるがこれらに限定されない。文字はまた、意味を持つ文字、例えばタブ文字、改行文字、エスケープ文字又は正規表現の特殊文字であってよい。正規表現の特殊文字とは、あるパターンの文字列をまとめて表現するための文字である。正規表現の特殊文字は、例えば、正規表現“[a-z]+[0-9]”における、1回以上の繰り返しを表す“+”、文字範囲指定の開始と終了を表す“[”及び“]”であるが、これらに限定されない。
本発明の実施態様において、「文字列の処理を含むプログラム」とは、プログラムの実行時において、文字列に対して何らかの処理を実行するプログラムである。上記処理はまた、該文字列が格納される例えば変数、構造体又はオブジェクトに対する処理を含む。上記処理は、例えば、文字列を生成する処理、文字列を複製する処理、文字列に含まれる任意の文字を検索する処理、文字列に含まれる文字を他の文字に変換する処理、文字列から任意の文字を抽出する処理、文字列同士を結合する処理、文字列同士を比較する処理、又は文字列に関する情報を取得する処理であるが、これらに限定されない。
本発明の実施態様において、「文字列の特性」とは、文字列に含まれる少なくとも1つの文字が持つ特徴をいう。上記特徴は、上記文字が、例えば大文字であること、小文字であること、数字であること、2バイト文字、例えば日本語、中国語であること、アルファベットであること、同一の文字コード文字であること、正規表現の特殊文字であること、8ビットで表現できる文字であること、URLエンコードにおける特殊文字であること又は上記例の文字でないことであるが、これらに限定されない。
本発明の実施態様において、「文字集合」は、共通の上記特徴をもつ文字の集まりである。文字集合は、例えば大文字の集合、小文字の集合、数字の集合、2バイト文字の集合、アルファベットの集合、同一の文字コード文字の集合、正規表現の特殊文字の集合、8ビットで表現できる文字の集合、URLエンコードにおける特殊文字の集合又はある集合に属さない文字の集合であるが、これらに限らない。文字集合に含まれる文字が重複していない複数の文字集合をまとめて、1つの文字集合として表してもよい。
本発明の実施態様において、「特性情報」とは、文字列の特性を表す情報である。特性情報は、文字列ごとに用意される。特性情報は、文字列が文字集合に属する文字を含むこと、含まないこと又は含むかどうか不明であることを表す少なくとも1の第1の情報と、上記文字列が文字集合に属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す第2の情報とを含む。
本発明の実施態様において、「文字列の処理を最適化する」とは、文字列の処理が複数の処理を含む場合に、文字列の処理の実行時においてコンピュータ・システムが、上記複数の処理のうち文字列の特性情報に応じた実行効率のよい処理を選択して実行することをいう。文字列の特性情報に応じた実行効率のよい処理とは、例えば第1の処理がどのような文字列にも適用可能な処理であり、第2の処理がある特性情報が対応付けられた文字列に対してのみ適用可能な処理である場合において、第1の処理に比べて高速に実行され且つ第1の処理と同一の結果が得られる第2の処理であるがこれに限らない。最適化された処理は、文字列の特性情報に応じた実行効率のよい処理を含む。
本発明の実施態様において、「文字列に関する演算処理」とは、プログラムにおいて実行される文字列又は該文字列が格納される領域に対する何らかの演算処理である。上記プログラムにおいて実行される文字列に対する演算処理は、例えば、文字列の生成、文字列の複製、文字列に含まれる任意の文字の検索、文字列に含まれる文字の他の文字への変換、文字列から任意の文字の抽出、文字列同士の結合、文字列同士の比較、又は文字列に関する情報の取得であるが、これらに限定されない。プログラムにおいて実行される文字列が格納される領域に対する処理は、例えば文字列を割り付けるメモリ領域の確保であるが、これに限定されない。
本発明の実施態様において、「文字列を1文字ずつ逐次処理する」とは、コンピュータ・システムが、文字列に含まれる文字それぞれに対して、個別に処理を実行することをいう。例えば文字列からある文字を検索する処理において、コンピュータ・システムが文字列に含まれる文字を全てチェックし、ヒットした全ての文字を検索結果とする場合、該検索は、文字列を1文字ずつ逐次処理することに該当する。一方、コンピュータ・システムが検索対象の文字がヒットした時点で残りの文字をチェックせずにヒットした文字を検索結果とする場合、該検索は、文字列を1文字ずつ逐次処理することに該当しない。
本発明の実施態様において、「逐次処理される文字を検査する」とは、文字の特性を求めることをいう。文字の特性は、上記逐次処理される文字が、例えば大文字であること、小文字であること、数字であること、2バイト文字であること、アルファベットであること、同一の文字コード文字であること、正規表現の特殊文字であること、8ビットで表現できる文字であること、URLエンコードにおける特殊文字であること又は上記例の文字でないことであるが、これらに限定されない。
以下、図面に従って、本発明の実施態様を説明する。本実施態様は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断らない限り、同一の符号は、同一の対象を指す。
なお、以下では、本発明の実施態様をJava(商標)で実装した場合を例として説明する。Java(商標)では、文字列の操作は、文字列オブジェクトを介して実行される。よって、請求項における文字列は、Java(商標)の場合、上記文字列オブジェクト自身又は該文字列オブジェクトに含まれる文字列を指す。
図1は、本発明の実施態様における、Java(商標)で実装した場合の文字列オブジェクトの構造を示す。
文字列オブジェクト(101)は、文字列(102)及び特性情報(103)を含む。なお、特性情報(103)は、上記文字列オブジェクト(101)と関連付けられたメモリ上の文字列オブジェクト(101)とは異なる領域に含まれてもよい。文字列オブジェクト(101)は、メモリ上に格納される。文字列オブジェクト(101)は、クラス・ライブラリに用意されている文字列クラスから生成される。クラス・ライブラリとは、例えばJava(商標)におけるJava(商標)クラス・ライブラリであるが、これに限定されない。文字列クラスとは、例えばJava(商標)におけるjava.lang.Stringクラス(Stringクラス)であるが、これに限定されない。
文字列(102)は、少なくとも1の文字が含まれる不変な又は可変な文字列のデータである。不変とは、文字列オブジェクト(101)が開放されるまで文字列が変化しないことをいう。可変とは、文字列オブジェクト(101)が開放されるまで文字列が変化しうることをいう。
特性情報(103)は、文字列(102)に含まれる文字がどのような特性を持っているかを表す情報である。特性とは、文字が例えば大文字であること、小文字であること若しくは数字であること、又はそれらの組み合わせであるが、これらに限定されない。特性情報(103)は、第1の情報(103a)及び第2の情報(103b)を含む。第1の情報(103a)は、文字列(102)が、文字集合(104)に属する文字を含むこと、該文字を含まないこと又は該文字を含むことが不明であることを表す。第2の情報(103b)は、文字列(102)が、文字集合(104)に属さない文字を含むこと、該文字を含まないこと又は該文字を含むかどうか不明であることを表す。文字集合(104)は、同じ特性を持つ文字の集まりである。文字集合(104)は、例えば大文字の集まり、小文字の集まり若しくは数字の集まり、又はそれらの組み合わせであるがこれらに限定されない。例えば、文字集合に含まれる文字が重複しない複数の文字集合同士が、1つの文字集合であってもよい。
特性情報(103)は、文字列オブジェクト(101)と関係付けられたメモリ上の他の位置に格納されてもよい。
特性情報(103)は、文字列オブジェクト(101)を処理するメソッドにおいて、高速な処理が実行されるための判断に使用される。
特性情報(103)は、第1の情報(103a)及び第2の情報(103b)の組み合わせにより、例えば、下記1〜4のいずれかのケースを示す。
ケース1.文字列(102)に含まれる全ての文字が、文字集合(104)に属する。ケース1では、第1の情報(103a)は文字集合(104)に属する文字を含むことを表しており、第2の情報(103b)は文字集合(104)に属さない文字を含まないことを表している。
ケース2.文字列(102)に含まれる全ての文字が、文字集合(104)に属さない。ケース2では、第1の情報(103a)は文字集合(104)に属する文字を含まないことを表しており、第2の情報(103b)は文字集合(104)に属さない文字を含むことを表している。
ケース3.文字列(102)が、文字集合(104)に属する文字と属さない文字との両方を含む。ケース3では、第1の情報(103a)は文字集合(104)に属する文字を含むことを表しており、第2の情報(103b)が文字集合(104)に属さない文字を含むことを表している。
ケース4.文字列(102)に含まれる文字について未検査である。ケース4では、第1の情報(103a)は文字集合(104)に属する文字を含むことが不明であることを表しており、第2の情報(103b)が文字集合(104)に属さない文字を含むことが不明であることを表している。
特性情報(103)は、ビット列で表されてもよい。
ビットそれぞれは、第1の情報(103a)又は第2の情報(103b)に対応する。第1の情報(103a)は、例えば文字列(102)が文字集合(104)に属する文字を含むことを「1」、文字集合(104)に属する文字を含まないこと又は含むことが不明であることを「0」とするビットで表されうる。第2の情報(103b)は、例えば文字列(102)が文字集合(104)に属さない文字を含むことを「1」、文字集合(104)に属さない文字を含まないこと又は含むことが不明であることを「0」とするビットで表されうる。
第1の情報(103a)及び第2の情報(103b)がビットで表された場合、上記ケース1は「10」、上記ケース2は「01」、上記ケース3は「11」及び上記ケース4は「00」というビット列で表わされる。
上記ビット列で表す例において、複数の文字集合それぞれに含まれる文字が排他である場合、複数の文字集合がまとめて扱われうる。上記まとめて扱われる場合、文字集合それぞれに第1の情報(103a)としてそれぞれ1ビットが割り当てられ、文字集合の何れにも属さない文字の集合に、第2の情報(103b)として1ビットが割り当てられる。
例えば大文字の集まり(以下、大文字集合)、小文字の集まり(以下、小文字集合)及び数字の集まり(以下、数字集合)は、互いに排他な文字の集合である。よって、大文字集合に第1の情報として1ビット、小文字集合に第1の情報として1ビット、数字集合に第1の情報として1ビットが割り当てられうる。また、大文字、小文字及び数字のいずれでもない文字の集合(以下、その他集合)に第2の情報として1ビットが割り当てられうる。上記割り当ての結果、特性情報(103)は、第1の情報に対応する3ビットと第2の情報に対応する1ビットとの計4ビットで表される。以下の例では、上記4ビットを大文字情報に対応するビット列、小文字情報に対応するビット列、数字集合に対応するビット列及びその他集合に対応するビット列の順で右から順に表す。
・特性情報「0001」は、文字列が「大文字を含む」ということを表す。
・特性情報「0010」は、文字列が「小文字を含む」ということを表す。
・特性情報「0100」は、文字列が「数字を含む」ということを表す。
・特性情報「1000」は、文字列が「大文字、小文字、数字以外の文字(以下、その他文字)を含む」ということを表す。
なお、上記「1」が立つビットは1つとは限らない。例えば、特性情報「1110」は、文字列が「小文字、数字及びその他文字を含む」ということを表す。
コンピュータ・システムは、複数の文字集合をまとめて扱うことにより、まとめて扱わない場合に比べて、特性情報を表すためのビット数を減らすことができる。
複数の文字集合をまとめて扱う場合、上述の例では、4ビットが必要である。一方、複数の文字集合をまとめて扱わない場合、上記ケース1〜4の例で示されるように、1つの文字集合を表す特性情報として2ビットが必要である。よって、複数の文字集合をまとめて扱わない場合、大文字集合、小文字集合及び数字集合の3つの文字集合に対して必要なビット数は、2ビット*3=6ビットである。
図2Aは、本発明の実施態様における、図1に示す特性情報の判定を説明するための図である。
コンピュータ・システムは、第1の文字列の特性(202)と第1の文字列(203)に関する演算処理(205)とから、第1の文字列(203)及び演算処理(205)の結果である第2の文字列(206)のうち少なくとも1についての文字列の特性情報(204又は207)を判定する。
第1の文字列の特性(202)は、既に判定され第1の特性情報(204)として保存されている場合と、コンピュータ・システムによって、例えば第1の文字列(203)の文字を検査することで求められる場合とがある。コンピュータ・システムによって第1の文字列の特性(202)が求められる場合、コンピュータ・システムは、該求めた特性を第1の特性情報(204)と判定する。
第1の文字列(203)は、演算処理(205)の対象となる文字列である。第1の文字列(203)は、1つの文字列であってもよく、又は複数の文字列であってもよい。具体例1(201a)で示されるように、演算処理(205)が例えば文字列“ABC”(203a)と文字列“DEF”(203b)とを結合する処理の場合、文字列“ABC”(203a)と文字列“DEF”(203b)とが第1の文字列(203)に該当する。
第1の特性情報(204)は、第1の文字列(203)に対応付けらえた情報である。第1の特性情報(204)は、第1の文字列(203)に既に対応付けられていてもよく、又はコンピュータ・システムによる第1の文字列(203)の文字の検査によって求められ、第1の特性情報(204)と判定された特性でもよい。
演算処理(205)は、例えば文字列の生成、文字列の複製、文字列に含まれる任意の文字の検索、文字列に含まれる文字の他の文字への変換、文字列から任意の文字の抽出、文字列同士の結合、文字列同士の比較、又は文字列に関する情報の取得であるが、これらに限定されない。
第2の文字列(206)は、上記演算の結果が格納される文字列である。具体例1(201a)で示されるように、演算処理(205)が例えば文字列“ABC”(203a)と文字列“DEF”(203b)とを結合する処理の場合、該加えられた結果の文字列“ABCDEF”(206a)が第2の文字列(206)に該当する。第2の文字列(206)は、1つの文字列であっても複数の文字列であってもよい。具体例2(201b)で示されるように、演算処理(205)が例えば文字列“abcdef”(203c)から2文字ずつ文字列を抽出する処理の場合、抽出された結果の文字列“ab”(206b)、文字列“cd”(206c)及び文字列“ef”(206d)それぞれが、第2の文字列に該当する。
第2の特性情報(207)は、第2の文字列(206)に対応付けられた情報である。第2の特性情報(207)は、第1の文字列の特性(202)と演算処理(205)とから判定されうる。
具体例1(201a)では、第1の特性情報(204a及び204b)が「全て大文字」である。よって、特性(202a及び202b)もまた「全て大文字」である。「全て大文字」の文字列同士を結合する演算(205a)では、演算の結果の文字列もまた「全て大文字」となる。従って、第2の特性情報(207a)は「全て大文字」と判定されうる。
具体例2(201b)では、第1の特性情報(204c)が「全て小文字」である。よって、特性(202c)もまた「全て小文字」である。「全て小文字」の文字列から文字列を抽出する演算(205b)では、演算の結果の文字列もまた「全て小文字」となる。従って、第2の特性情報(207b〜207d)は「全て小文字文字」と判定されうる。
上記判定は、プログラム実行時の下記第1の態様〜第3の態様に示すタイミングにおいて実行される。上記判定により、判定された特性情報は、文字列オブジェクト(図1、101)に付加される。該付加により、文字列と特性情報とが対応付けられる。
A.第1の態様
特性情報(図1、103)は、文字列オブジェクト(101)が文字列クラスから生成されることに応じて、文字列オブジェクト(101)に付加されうる。コンピュータ・システムは、生成される文字列オブジェクト(101)に含まれる文字列(図1、102)の特性情報が生成元の文字列オブジェクト(101)から判定できる場合又は生成元の文字列に対する逐次処理と同時に検査できる場合、該判定又は該検査によって求められる特性情報(103)を生成した文字列オブジェクト(101)に付加する。
特性情報の付加は、可変な文字列を保持する文字列オブジェクト及び不変な文字列を保持する文字列オブジェクトの両方の文字列オブジェクトに対して可能である。特に、不変な文字列を保持する文字列オブジェクト、例えばJava(商標)におけるStringオブジェクトでは、文字列オブジェクト(101)が一度生成されると、文字列オブジェクト(101)に含まれる文字列は変化しない。よって、文字列オブジェクト(101)に含まれる文字列の特性情報(103)も変化しない。従って、コンピュータ・システムは、不変な文字列を保持する文字列オブジェクトにおいて、オブジェクト生成に応じて特性情報(103)が付加された文字列オブジェクト(101)を、文字列オブジェクト(101)がガーベジコレクションされるまで利用することができる。
B.第2の態様
特性情報(103)は、特性情報(103)が付加されていない文字列オブジェクト(101)に含まれる文字列(102)に対する逐次処理と同時に特性が検査されることに応じて、文字列オブジェクト(101)に付加されうる。
文字列オブジェクト(101)が特性情報(103)を含むことの効果は、特性情報(103)によって最適化された処理が実行されることである。よって、ある文字列オブジェクトについて、最適化された処理が一度も実行されない場合、上記検査するコストが無駄になってしまう。上記コストを抑えるために、コンピュータ・システムは、文字列を処理するメソッドに文字列の内容を1文字ずつ逐次処理する処理が含まれる場合、該処理と同時に特性の検査を行う。
C.第3の態様
特性情報(103)は、特性情報(103)が付加された少なくとも1の文字列オブジェクト(以下、演算元オブジェクト)の演算処理が実行されることに応じて、演算処理の結果が格納される少なくとも1の文字列オブジェクト(以下、結果オブジェクト)に付加されうる。コンピュータ・システムは、演算元オブジェクトと演算処理の内容とから結果オブジェクトに付加される特性情報が判定されることに応じて、該判定された特性情報(103)を結果オブジェクトに付加する。上記演算処理とは、例えば文字列同士を結合する処理、文字列からある文字を取り出す処理、又は文字列を別の文字列に変換する処理であるが、これらに限定されない。
以下、第3の態様について例を挙げて説明する。例えば、第1の文字列オブジェクトが全て大文字の第1の文字列を含み、第2の文字列オブジェクトが全て大文字の第2の文字列を含むとする。
第1の文字列と第2の文字列とを結合する場合、コンピュータ・システムは、結合した結果の文字列も全て大文字で構成されると判定しうる。よって、コンピュータ・システムは、結果オブジェクトに付加される特性情報を、例えば「全て大文字」を表す情報としうる。
第1の文字列からある文字を取り出す場合、コンピュータ・システムは、一部の文字列が取り出された第1の文字列(以下、第1の結果の文字列)及び取り出した一部の文字列(以下、第2の結果の文字列)はともに全て大文字で構成されると判定しうる。第1の文字列からある文字を取り出す場合とは、例えば第1の文字列オブジェクトに対して文字列の一部を取り出すJava(商標)言語のString.substring()メソッドを適用した場合である。よって、コンピュータ・システムは、第1の結果の文字列を含む結果オブジェクト及び/又は第2の結果の文字列を含む結果オブジェクトに付加される特性情報を、例えば「全て大文字」を表す情報としうる。なお、第1の結果の文字列を含む結果オブジェクトは、第1の文字列オブジェクトでありうる。
第1の文字列を別の文字列、例えば小文字の文字列に変換する場合、コンピュータ・システムは、変換された文字列が全て小文字で構成されると判定しうる。よって、コンピュータ・システムは、結果オブジェクトに付加される特性情報を、例えば「全て小文字」を表す情報としうる。
図2Bは、本発明の実施態様における、図1に示す文字列オブジェクトに含まれる特性情報を、他の文字列オブジェクトに伝搬するための実装例を示す。
なお、第3の態様による結果オブジェクトへの特性情報の付加を「演算元オブジェクトから結果オブジェクトへの特性情報の伝搬」という。上記伝搬させるための処理は、文字列を操作するメソッドの処理内容と、該処理の対象となる少なくとも1の文字列オブジェクト(以下、s1、s2、・・・、sn)に含まれる特性情報(以下、attr1、attr2、・・・、attrn)によって決まる。なお、特性情報は、ビット列で表されているとする。該ビット列は、複数の文字集合をまとめて扱うように割り当てられたビット列であってもよいし、又は文字集合ごとに2ビットが割り当てられたビット列であってもよい。上記伝搬させるための処理は、多くの場合、以下に示す第1のコード(211)〜第3のコード(213)で示される処理の1つ又は少なくとも2の組み合わせである。
第1のコード(211)で示される処理は、特性情報attr1が付加された文字列オブジェクトと特性情報attr2が付加された文字列オブジェクトとを結合する場合の、結果オブジェクトに付加される特性情報を算出する処理である。第1のコード(211)で示される処理では、特性情報attr1と特性情報attr2との論理和によって、結果オブジェクトに付加される特性情報が求められる。
第2のコード(212)で示される処理は、特性情報attr1が付加された文字列オブジェクトに含まれる文字列から、特性情報attr2が付加された文字列オブジェクトに含まれる文字列を削除する場合の、結果オブジェクトに付加される特性情報を算出する処理である。ここで、削除される文字列は、例えば正規表現で表される動的な文字列であってもよい。第2のコード(212)で示される処理では、特性情報attr2に対応する文字集合の文字が特性情報attr1が付加された文字列オブジェクトに残っている場合もありうる。よって、特性情報attr1が、結果オブジェクトに付加される特性情報とされる。
第3のコード(213)で示される処理は、特性情報attr1が付加された文字列オブジェクトに含まれる文字列から、特性情報attr2が付加された文字列オブジェクトに含まれる文字列を全て削除する場合の、結果オブジェクトに付加される特性情報を算出する処理である。第3のコード(213)で示される処理では、特性情報attr1と特性情報attr2との論理積によって、結果オブジェクトに付加される特性情報が求められる。
クラス・ライブラリ作成者は、文字列を操作するメソッドの本来の処理内容から第1のコード〜第3のコード(211〜213)の組み合わせを決定し、上記伝搬させるための処理をプログラムに追加することができる。該追加により、プログラム実行時において、例えば結果オブジェクトに含まれる文字列が逐次検査されることなく、特性情報が結果オブジェクトに伝搬され付加される。
以下では、Java(商標)におけるStringクラスの3つのメソッドを例に、上記追加されるコードの例を示す。
String.concat()メソッドは、文字列に文字列を加えるためのメソッドである。よって、追加されるコードは、第1のコード(211)である。
String.substring()メソッドは、文字列の一部を切り出すメソッドである。よって、追加されるコードは、第2のコード(212)である。
String.replaceFirst()メソッドは、文字列の一部を置き換えるメソッドである。よって、追加されるコードは、第1のコード(211)と第2のコード(212)との組み合わせのコードである。
String.toUpper()メソッドは、小文字を大文字に変換するメソッドである。よって、追加されるコードは、第1のコード(211)と第3のコード(213)との組み合わせのコードである。
文字列オブジェクトが特定の特性情報を持つ場合、コンピュータ・システムは、上記メソッドにおいて最適化版のコードを実行させる。文字列オブジェクトが特定の特性情報を持たない場合、コンピュータ・システムは、上記メソッドにおいて、最適化していない元の通常版のコードを実行させる。
プログラムを動作させるためには、最適化版のコードの有無にかかわらず通常版のコードは必要である。特性情報が付加されていない文字列オブジェクトに対する処理を通常版コードで常に実行することによって、コンピュータ・システムはプログラムを正しく動作させる。また、通常版のコードの実行と同時に特性情報の検査が行われている場合、文字列オブジェクトが2回目以降に上記メソッドで処理されるときに、特性情報に応じて最適化版のコードが実行されうる。
以下では、文字列オブジェクトに付加される特性情報のバリエーションの例を示す。なお、特性情報のバリエーションは、以下の例1〜例4の例に限定されない。
例1.「大文字が含まれない」及び「小文字が含まれない」
例2.「例えば*及び[]という正規表現の特殊文字列が含まれない」
例3.「全ての文字が8ビットで表現できる」
例4.「URLエンコードにおける特殊文字である「%」及び「+」を含まない」
特性情報が上記例1を表す場合において、例えばString.toLowerCase()メソッド又はString.toUpperCase()メソッドの実行時に、文字列を小文字に変換する処理又は文字列を大文字に変換する処理が省略されうる。また、例えばString.compareIgnoreCase()メソッド又はString.equalsIgnoreCase()メソッドの実行時において、比較される2つの文字列がともに、「大文字を含まない」という特性情報を持っている場合又は、「小文字を含まない」という特性情報を持っている場合、上記比較が単純な16ビット値の比較となりうる。ここで、上記比較される2つの文字列のうち一方の文字列が「数字を含む」という特性情報を有し、他方の文字列が「数字を含まない」という特性情報を有していても構わない。上記比較が単純になることで、処理の高速化が望める。ここで、同じフラグを持っている場合とは、例えば上記比較される2つの文字列どちらにも「大文字が含まれていない」場合のことである。
特性情報が上記例2を表す場合において、例えばString.replaceFirst()メソッド又はsplit()メソッドの実行時に、java.util.regex.Matcherオブジェクトの作成が不要になる。よって、生成されるオブジェクトの削減及びプログラムの実行速度の高速化が期待できる。
特性情報が上記例3を表す場合において、例えば正規表現としてコンパイルしてステートマシンを作成する場合、プログラマーは、例えば分岐の多いswitch文による実装の代わりに、8ビットで表現できる文字である0〜255に対応する文字コードでインデックスする表を使った実装が可能になる。よって、該実装により、プログラム実行時の処理が高速化されうる。なお、上記正規表現としてコンパイルしてステートマシンを作成するとは、正規表現に対応した状態遷移を行うプログラムを作成することをいう。
特性情報が上記例4を表す場合において、例えば該特性情報が付加された文字列オブジェクトを引数とするjava.net.URLDecoder.decode()メソッドにおいて、文字列を一文字ずつ調べる処理と作業用バッファであるStringBufferを使用する処理とが省略されうる。よって、該省略により、プログラム実行時の処理が高速化されうる。
図3Aは、本発明の実施態様における、図1に示す文字列オブジェクトを生成する処理のフローチャートを示す。
図3Aに示すフローチャートは、上記第1の態様に対応する。図3A中のステップ304の処理が第1の態様で示される生成元の文字列オブジェクト(101)から判定できる場合に対応し、及び図3A中のステップ309及びステップ310の処理が第1の態様で示される生成元の文字列に対する逐次処理と同時に検査できる場合に対応する。
ステップ301は、文字列オブジェクトを生成する処理の開始を表す。
ステップ302では、コンピュータ・システムは、生成される文字列オブジェクトに代入される文字列が特性情報を含んでいるかどうかを判定する。特性情報を含んでいる場合、該処理はステップ303に進む。特性情報を含んでいない場合、該処理はステップ306に進む。
ステップ303では、コンピュータ・システムは、上記文字列から文字列オブジェクトを生成する。該生成の終了に応じて、該処理はステップ304に進む。
ステップ304では、コンピュータ・システムは、上記生成した文字列オブジェクトに伝搬される特性情報を算出する。1つの実施態様として、コンピュータ・システムは、例えば文字列に含まれる特性情報そのままを、伝搬される特性情報として算出する。他の実施態様として、コンピュータ・システムは、文字列に含まれる特性情報と文字列オブジェクトに初期値として与えられた特性情報との論理積の結果を、伝搬される特性情報として算出する。上記算出に応じて、該処理はステップ305に進む。なお、伝搬される特性情報が「不明」と算出された場合も、該処理はステップ305に進む。
ステップ305では、コンピュータ・システムは、上記算出した特性情報を生成された文字列オブジェクト(結果オブジェクト)に付加する。該付加に応じて、該処理はステップ311に進み、文字列オブジェクトを生成する処理は終了する。
ステップ306では、コンピュータ・システムは、上記文字列をchar型に変換する必要があるかどうかを判定する。Java(商標)言語では、例えば文字列リテラルはbyte型のデータ列としてメモリに格納される。よって、コンピュータ・システムは、上記文字列リテラルをchar型へ変換する必要がある文字列と判定する。char型に変換する必要があることに応じて、該処理はステップ309に進む。char型に変換する必要がないことに応じて、該処理はステップ307に進む。
ステップ307では、コンピュータ・システムは、上記文字列から文字列オブジェクトを生成する。該生成では、コンピュータ・システムは、上記文字列を文字単位ではなく文字列単位でまとめて文字列オブジェクトに代入する。上記生成の終了に応じて、該処理はステップ308に進む。
ステップ308では、コンピュータ・システムは、上記生成された文字列オブジェクト(結果オブジェクト)に「未検査」であることを示す特性情報を付加する。該付加の終了に応じて、該処理はステップ311に進み、文字列オブジェクトを生成する処理は終了する。
ステップ309では、コンピュータ・システムは、上記文字列から文字列オブジェクトを生成する。該生成では、コンピュータ・システムは、上記文字列を1文字ずつchar型に変換し、文字列オブジェクトに代入する。また、コンピュータ・システムは、該変換と並行して1文字ずつ特性を検査し、該検査の結果から、文字列オブジェクトの特性情報を求める。上記生成の終了に応じて、該処理はステップ310に進む。
ステップ310では、コンピュータ・システムは、上記求めた特性情報を生成された文字列オブジェクト(結果オブジェクト)に付加する。該付加の終了に応じて、該処理はステップ311に進み、文字列オブジェクトを生成する処理は終了する。
図3B及び図3Cは、本発明の実施態様における、図1に示す文字列オブジェクトに含まれる文字列について演算処理を実行する処理のフローチャートの例を示す。
図3Bは、本発明の実施態様における、図1に示す文字列オブジェクトに含まれる文字列を1文字ずつ逐次処理することを含む演算処理(以下、第1の文字列処理)のフローチャートの例を示す。
第1の文字列処理は、特性情報に応じて最適化された処理及び特性情報を付加する処理を、ライブラリに用意されている従来の処理に、クラス・ライブラリ作成者が追加した処理である。従来の処理とは、例えば、引数として受け取った少なくとも1の文字列オブジェクト(元オブジェクト)に含まれる文字列を1文字ずつ逐次処理し、該逐次処理された文字列を他の少なくとも1の文字列オブジェクト(結果オブジェクト)に含まれる文字列とする処理である。
図3B中のステップ326〜ステップ328の処理が上記第2の態様に対応し、ステップ324の処理が上記第3の態様に対応する。
ステップ321は、第1の文字列処理の開始を表す。
ステップ322では、コンピュータ・システムは、元オブジェクトに付加された特性情報に、最適化された処理を実行することが可能である値が設定されているかどうかを判定する。最適化された処理を実行することが可能である値が設定されている場合、該処理はステップ323に進む。最適化された処理を実行することが可能である値が設定されていない場合、該処理はステップ326に進む。
ステップ323では、コンピュータ・システムは、上記特性情報に応じて最適化された処理を実行する。該実行の終了に応じて、該処理はステップ324に進む。
ステップ324では、コンピュータ・システムは、結果オブジェクトに伝搬される特性情報を算出する。該算出は、第3の態様を用いて行われる。算出の方法は、上記最適化された処理の内容により異なる。コンピュータ・システムは、例えば上記最適化された処理に大文字を小文字に変換する処理が含まれる場合、コンピュータ・システムは、元オブジェクトに含まれる特性情報に「大文字を含まない」という情報を表す特性情報が付加された特性情報を算出する。上記算出に応じて、該処理はステップ325に進む。
ステップ325では、コンピュータ・システムは、上記算出した特性情報を結果オブジェクトに付加する。該付加に応じて、該処理はステップ330に進み、第1の文字列処理は終了する。
ステップ326では、コンピュータ・システムは、従来の処理である元オブジェクトに含まれる文字列を1文字ずつ処理する逐次処理を実行する。また、コンピュータ・システムは、該逐次処理と並行して、元オブジェクトに含まれる文字列の文字について、一文字ずつ特性を検査(以下、第1の検査)する。また、コンピュータ・システムは、結果オブジェクトの特性情報を検査(以下、第2の検査)する。上記逐次処理、第1の検査及び第2の検査の終了に応じて、該処理はステップ327に進む。
ステップ327では、コンピュータ・システムは、「未検査」を意味する特性情報が付加された元オブジェクト(以下、第1の元オブジェクト)があるかどうかを判定する。コンピュータ・システムは、さらに付加されている特性情報と異なる特性情報が第1の検査によって求められた元オブジェクト(第2の元オブジェクト)があるかどうかを判定する。上記第1の元オブジェクト又は上記第2の元オブジェクトがある場合、該処理はステップ328に進む。上記第1の元オブジェクト及び上記第2の元オブジェクトがない場合、該処理はステップ329に進む。
ステップ328では、コンピュータ・システムは、第1の検査の結果から元オブジェクトに付加する特性情報を決定する。そして、コンピュータ・システムは、該決定した特性情報を元オブジェクトに付加する。該付加の終了に応じて、該処理はステップ329に進む。
ステップ329では、コンピュータ・システムは、第1の検査及び第2の検査の結果から、結果オブジェクトの特性情報を求める。コンピュータ・システムは、上記求めた特性情報を結果オブジェクトに付加する。該付加の終了に応じて、該処理はステップ330に進み、第1の文字列処理は終了する。
ステップ330は、第1の文字列処理の終了を表す。
図3Cは、本発明の実施態様における、図1に示す文字列オブジェクトに含まれる文字列をまとめて処理することを含む演算処理(以下、第2の文字列処理)のフローチャートの例を示す。
第2の文字列処理は、特性情報に応じて最適化された処理及び特性情報を付加する処理を、ライブラリに用意されている従来の処理にクラス・ライブラリ作成者が追加した処理である。また、上記従来の処理は、例えば引数として受け取った少なくとも1の文字列オブジェクト(元オブジェクト)に含まれる文字列をまとめて処理し、該処理された文字列を他の少なくとも1の文字列オブジェクト(結果オブジェクト)に含まれる文字列とする処理とする。図3C中のステップ344の処理が、第3の態様に対応する。
ステップ341は、第2の文字列処理の開始を表す。
ステップ342では、コンピュータ・システムは、元オブジェクトに付加された特性情報に、最適化された処理を実行することが可能である値が設定されているかどうかを判定する。最適化された処理を実行することが可能である値が設定されている場合、該処理はステップ343に進む。最適化された処理を実行することが可能である値が設定されていない場合、該処理はステップ346に進む。
ステップ343では、コンピュータ・システムは、上記特性情報に応じて最適化された処理を実行する。該実行の終了に応じて、該処理はステップ344に進む。
ステップ344では、コンピュータ・システムは、結果オブジェクトに伝搬される特性情報を算出する。該算出は、第3の態様により行われる。算出の方法は、上記最適化された処理の内容により異なる。コンピュータ・システムは、例えば上記最適化された処理に先頭から5文字を抽出する処理が含まれ且つ、元オブジェクトに含まれる特性情報が「大文字しか含まない」ことを表す場合、コンピュータ・システムは、元オブジェクトに含まれる特性情報伝搬される特性情報を算出する。上記算出に応じて、該処理はステップ345に進む。
ステップ325では、コンピュータ・システムは、上記算出した特性情報を結果オブジェクトに付加する。該付加に応じて、該処理はステップ347に進み、第2の文字列処理は終了する。
ステップ346では、コンピュータ・システムは、従来の処理である元オブジェクトに含まれる文字列をまとめて処理する処理を実行する。該実行の終了に応じて、該処理はステップ347に進み、第2の文字列処理は終了する。
図4A〜図4Fは、本発明の実施例を説明するためのプログラム・コード及び状態遷移図を示す。
図4Aは、本発明の実施態様における、上記例1の実施例を説明するためのプログラム・コードを示す。
以下では、プログラム・コード(401)を例に、オブジェクトの生成に応じて特性情報が付加される流れ、及び該付加により最適化された処理が実行される例を説明する。
コンピュータ・システムが、プログラム・コード(401)を実行すると、最初に、new String("ABC")が実行される。ここで、new String("ABC")はオブジェクトを生成する処理に該当するため、図3Aで示すフローチャートの各処理が実行される。
ステップ302では、文字列オブジェクトに代入される文字列"ABC"が特性情報を含んでいないため、該処理はステップ306に進む。
ステップ306では、文字列"ABC"はリテラルでありchar型に変換する必要があるため、該処理はステップ309に進む。
ステップ309では、コンピュータ・システムは、文字列"ABC"が代入される文字列オブジェクトsを生成する。該生成において、コンピュータ・システムは、文字列"ABC"を1文字ずつchar型に変換しながらヒープメモリ上に配置する。また、コンピュータ・システムは、上記変換と並行して1文字ずつ文字列"ABC"の特性を検査する。ここで、該検査する特性が、「小文字が含まれない」という特性だとする。上記検査の結果、"A"、"B"及び"C"は小文字ではないため、コンピュータ・システムは、文字列"ABC"は小文字が含まれない文字列であると判定する。そして、該判定により、文字列オブジェクトsの特性情報として「全ての文字が小文字を含まない」を表す値が求められる。上記生成の終了に応じて、該処理がステップ310に進む。
ステップ310では、上記「全ての文字が小文字を含まない」を表す値を、例えば「01」とする場合、コンピュータ・システムは、文字列オブジェクトsに特性情報「01」を付加する。該付加の終了に応じて、該処理はステップ311に進み、オブジェクトを生成する処理は終了する。
上記オブジェクトを生成する処理が終了すると、toUpperCase()メソッドが実行される。toUpperCase()メソッドは、文字列に含まれる文字を全て大文字に変換するメソッドである。
ここで、クラス・ライプラリ作成者が、例えば特性情報「01」が付加された文字列がtoUpperCase()メソッドに与えられた場合、与えられた文字列をそのまま返値として返す実装をtoUpperCase()メソッドの実装部分に追加していたとする。上記実装が追加されている場合、コンピュータ・システムは、上記実行において、文字列を大文字化する従来の処理を全く行う必要がない。コンピュータ・システムは、与えられた特性情報「01」が付加された文字列の文字列"ABC"をそのままtoUpperCase()メソッドの返値として返すことができる。よって、toUpperCase()メソッドの処理は、高速化される。
図4Bは、本発明の実施態様における、上記例2の実施例を説明するためのプログラム・コードを示す。
プログラム・コード(411)は、StringRepleaceFirst()メソッドの実装部分である。StringRepleaceFirst()メソッドの従来の処理(412)では、Pattern.compile()メソッドが実行され、大量のオブジェクトが生成されうる。
ここで、StringRepleaceFirst()メソッドの引数で渡される文字列に正規表現の特殊文字が含まれない場合、上記Pattern.compile()メソッドによって実行される処理は、他のメソッドを用いた処理に置き換えることが可能である。上記正規表現の特殊文字とは、例えば正規表現“[a-z]+[0-9]”における、1回以上の繰り返しを表す“+”、文字範囲指定の開始と終了を表す“[”又は“]”であるがこれらに限られない。他のメソッドを用いた処理は、例えばindexOf()メソッドとsubstring()とを組み合わせたコードによる。上記組み合わせたコードによって実行される処理は、大量のオブジェクトを生成せず、Pattern.compile()メソッドによって実行される処理よりも高速で実行されうる。
よって、クラス・ライブラリ作成者は、例えばStringRepleaceFirst()メソッドに、引数で渡された文字列の特性情報が「正規表現の特殊文字列が含まれないこと」を表す場合のコード(412)を追加する。該追加により、引数で渡された文字列が正規表現を含まない場合、StringRepleaceFirst()メソッドは、従来の処理が実行される場合に比べ高速に実行されうる。
図4Cは、本発明の実施態様における、下記図4Dの説明におけるプログラムに関する状態遷移図を示す。
状態遷移図(421)は、文字列に含まれる正規表現“[a-z]+[0-9]”についてパターンマッチを行うプログラム・コードの遷移を表す。プログラマーは、上記プログラム・コードを実装するステートマシンを作成することで、正規表現“[a-z]+[0-9]”に対する処理が従来のパターンマッチ・プログラムよりも高速化したパターンマッチ・プログラムを作成することができる。
図4Dは、本発明の実施態様における、上記例3の実施例を説明するためのプログラム・コードを示す。
プログラム・コード(431)は、引数で渡される文字列が8ビット値に限定されている場合のステートマシン(図4Cを参照)の実装の例である。プログラム・コード(432)は、引数で渡される文字列が8ビット値に限定されていない場合のステートマシンの実装の例である。引数で渡される文字列が8ビット値に限定されていない場合、プログラマーは、プログラム・コード(432)に示す、例えばcase文による実装で文字列に含まれる文字と正規表現とのマッチングを実現させる。引数で渡される文字列が8ビット値に限定されている場合、プログラマーは、上記case文による実装に代えて、プログラム・コード(431)に示す、例えばfor文による単純なループによって、上記マッチングを実現させうる。
図4Eは、本発明の実施態様における、上記例4の実施例を説明するためのプログラム・コードを示す。
プログラム・コード(441)は、java.net.URLDecoder.decode()メソッドに本発明の実施態様を適用したプログラム・コードの例である。従来コード(442)が、従来の処理に対応し、追加コード(443〜446)が本発明の実施態様を適用するために追加した処理に対応する。
java.net.URLDecoder.decode()メソッドは、文字列を1文字ずつ読み込み、該読み込んだ文字列内のURLエンコードの特殊文字を本来の文字に戻すメソッドである。java.net.URLDecoder.decode()メソッドは、第1の文字列処理に該当する。
java.net.URLDecoder.decode()メソッドが実行されると、図3Bで示すフローチャートの各処理が実行される。
追加コード(444)の処理が、ステップ322の処理に対応する。追加コード(444)では、引数で渡された文字列オブジェクトsに含まれる特性情報に、最適化された処理を実行することが可能である値が設定されているかどうかが判定される。
特性情報が、例えば「URLエンコードにおける特殊文字を含まない」を表す値の場合、最適化された処理を実行することが可能であると判定される。文字列がURLエンコードにおける特殊文字を含まない場合、ステップ323及びステップ324に対応する処理は、java.net.URLDecoder.decode()メソッドにはないため、ステップ325に対応する「return s」が実行され、java.net.URLDecoder.decode()メソッドは終了する。
上記可能ではないと判定された場合、ステップ326に対応する従来の処理である従来コード(442)の処理が実行される。コード(442)の処理では、URLエンコードにおける特殊文字である「+」及び「%」が、文字列オブジェクトsに含まれる文字列に含まれているかが1文字ずつチェックされる。該チェックの結果は、変数needToChangeにセットされる。なお、java.net.URLDecoder.decode()メソッドにおいては、上記チェックは、第1の検査を兼ねることができる。よって、追加コード(445)において、文字列オブジェクトsに特性情報が付加されていない場合、変数needToChangeが利用され、文字列オブジェクトsに特性情報が設定される。追加コード(445)の処理は、ステップ327及びステップ328に対応する。
また、java.net.URLDecoder.decode()メソッドの結果は、URLエンコードにおける特殊文字を含まないことが自明である。よって、追加コード(446)において、返値としてsb.toString()で生成された文字列に、「URLエンコードにおける特殊文字を含まない」を表す特性情報が設定される。追加コード(446)の処理は、ステップ329に対応する。
また、ステップ328において、文字列オブジェクトsには、特性情報が付加される。よって、文字列オブジェクトsを引数として再度URLDecoder.decode()メソッドが実行されたときに、最適化された処理が実行される可能性がある。
図4Fは、本発明の実施態様における、図3Aに示すフローチャートの処理を実装するプログラム・コードの例を示す。
以下では、プログラム・コード(451)を例に、オブジェクト生成時に特性情報が付加される流れ及び、特性情報が伝搬する流れを説明する。
コンピュータ・システムが、プログラム・コード(451)を実行すると、最初に、new String("ABC")が実行される。ここで、new String("ABC")は、オブジェクトを生成する処理に該当するので、図3Aで示すフローチャートの各処理が実行される。
ステップ302では、文字列オブジェクトに代入される文字列"ABC"が特性情報を含んでいないため、該処理はステップ306に進む。
ステップ306では、文字列"ABC"はリテラルでありchar型に変換する必要があるため、該処理はステップ309に進む。
ステップ309では、コンピュータ・システムは、文字列"ABC"が代入される文字列オブジェクトs1を生成する。該生成において、コンピュータ・システムは、文字列"ABC"を1文字ずつchar型に変換しながらヒープメモリ上に配置する。また、コンピュータ・システムは、上記変換と並行して1文字ずつ文字列"ABC"の特性を検査する。ここで、該検査する特性が、「小文字が含まれない」という特性だとする。上記検査の結果、"A"、"B"及び"C"は小文字ではないため、コンピュータ・システムは、文字列"ABC"は小文字が含まれない文字列であると判定する。そして、該判定により、文字列オブジェクトs1の特性情報として「全ての文字が小文字を含まない」を表す値が求められる。上記生成の終了に応じて、該処理がステップ310に進む。
ステップ310では、上記「全ての文字が小文字を含まない」を表す値を、例えば「01」とする場合、コンピュータ・システムは、文字列オブジェクトs1に特性情報「01」を付加する。該付加の終了に応じて、該処理はステップ311に進み、オブジェクトs1を生成する処理は終了する。
次に、new String("XYZ")が実行される。ここで、new String("XYZ")は、オブジェクトを生成する処理に該当するため、図3Aで示すフローチャートの各処理が実行される。
ステップ302では、文字列オブジェクトに代入される文字列"XYZ"が特性情報を含んでいないため、該処理はステップ306に進む。
ステップ306では、文字列"XYZ"はリテラルでありchar型に変換する必要があるため、該処理はステップ309に進む。
ステップ309では、コンピュータ・システムは、文字列"XYZ"が代入される文字列オブジェクトs2を生成する。該生成において、コンピュータ・システムは、文字列"XYZ"を1文字ずつchar型に変換しながらヒープメモリ上に配置する。また、コンピュータ・システムは、上記変換と並行して1文字ずつ文字列"XYZ"の特性を検査する。ここで、該検査する特性が、「小文字が含まれない」という特性だとする。上記検査の結果、"X"、"Y"及び"Z"は小文字ではないため、コンピュータ・システムは、文字列"XYZ"は小文字が含まれない文字列であると判定する。そして、該判定により、文字列オブジェクトs2の特性情報として「全ての文字が小文字を含まない」を表す値が求められる。上記生成の終了に応じて、該処理がステップ310に進む。
ステップ310では、上記「全ての文字が小文字を含まない」を表す値を、例えば「01」とする場合、コンピュータ・システムは、文字列オブジェクトs2に特性情報「01」を対応付ける。該対応付けの終了に応じて、該処理はステップ311に進み、オブジェクトs2を生成する処理は終了する。
最後に、concat()メソッドが実行される。concat()メソッドの実行により、文字列オブジェクトs1に含まれる文字列と文字列オブジェクトs2に含まれる文字列とを連結した、文字列"ABCXYZ"を含むStringオブジェクトが生成される。また、該生成時に、クラス・ライブラリ作成者が、あらかじめconcat()メソッドに用意しておいたmergeAttr(attr, attr)が呼び出される。文字列オブジェクトs1及び文字列オブジェクトs2に含まれる特性情報はともに「全ての文字が小文字を含まない」を表す「01」である。よって、「01」と「01」との論理和「01」が上記文字列"ABCXYZ"を含むStringオブジェクトに付加される、そして、該オブジェクトが、s1.concat(s2)の返値として返される。
図5は、本発明の実施態様における、プログラム実行時の文字列の処理を最適化するコンピュータ・システムが有する機能を図示する機能ブロック図の例を示す。
コンピュータ・システム(501)は、メモリ(502)、判定部(503)、対応付け部(504)及び実行部(505)を含む。
メモリ(502)は、アプリケーションが自由に利用できる記憶領域を有する主記憶装置である。上記記憶領域には、プログラム(509)、少なくとも1の文字列(508a〜508n)及び少なくとも1の文字列(508a〜508n)それぞれに対応する少なくとも1の特性情報(507a〜507n)が格納されうる。
プログラム(509)は、少なくとも1つの文字列の処理(510)を含むプログラムである。プログラム(509)は、コンピュータ・システム(501)によって、メモリ(502)内に読み込まれ、そして中央演算処理装置(CPU)で実行される。
文字列の処理(510)は、少なくとも1の最適化された処理(511)及び従来の処理(512)を含む処理である。
最適化された処理(511)及び従来の処理(512)は、少なくとも1の文字列(508a〜508n)を使用して演算を行う処理である。
最適化された処理(511)は、ある特性情報と対応付けられた文字列について実行される場合に、従来の処理(512)よりも高速で実行されうる。
文字列(508a〜508n)は、プログラム(509)実行時にメモリに割り付けられるデータである。文字列(508a〜508n)は、文字列の処理(510)の実行時において、例えば、生成、参照、更新又は削除されうる。
特性情報(507a〜507n)は、文字列(508a〜508n)の特性を表す情報である。特性情報(507a〜507n)それぞれは、文字列(508a〜508n)それぞれと対応する。
判定部(503)は、第1の文字列(508a)に関する演算処理が実行されることに応じて、第1の文字列(508a)についての特性と上記演算処理とから、第1の文字列(508a)及び上記演算処理の結果のデータである第2の文字列(508b)のうち少なくとも1の文字列に対応する特性情報を判定する。
判定部(503)は、検査部(506)を含む。検査部(506)は、上記演算処理において、文字列(508a〜508n)に対する逐次処理が実行されることに応じて、該逐次処理される文字の特性を1文字ずつ求める。判定部(503)は、検査部(506)によって求められた文字の特性から、逐次処理が実行された文字列(508a〜508n)に対応する特性情報(507a〜507n)を判定する。
対応付け部(504)は、上記判定された特性情報を判定部(503)から受信し、第1の文字列(508a)又は第2の文字列(509a)に対応付ける。
実行部(505)は、最適化された処理(511)を含む文字列の処理(510)が実行されるときに、文字列の処理(510)によって処理される文字列(508a〜508n)に対応する特性情報(507a〜507n)を参照する。そして、実行部(505)は、参照した特性情報(507a〜507n)が、最適化された処理(511)が実行される条件を満たす場合、最適化された処理(511)を実行させる。実行部(505)は、参照した特性情報(507a〜507n)が、最適化された処理(511)が実行される条件を満たさない場合、例えば従来の処理(512)を実行させる。
図6は、本発明の実施態様における、図5に示すシステムのハードウェアのブロック図を示す。
コンピュータ・システム(601)は、CPU(602)とメイン・メモリ(603)と含み、これらはバス(604)に接続されている。CPU(602)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、インテル社のXeon(商標)シリーズ、Core(商標)シリーズ、Atom(商標)シリーズ、Pentium(商標)シリーズ、Celeron(商標)シリーズ、AMD社のPhenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(商標)シリーズ又はSempron(商標)を使用することができる。バス(604)には、ディスプレイ・コントローラ(605)を介して、LCDモニタなどのディスプレイ(606)が接続される。ディスプレイ(606)は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インタフェースで表示するために使用される。バス(604)にはまた、IDE又はSATAコントローラ(607)を介して、ハードディスク又はシリコン・ディスク(608)と、CD−ROM、DVDドライブ又はBDドライブ(609)が接続される。
ハードディスク(608)には、オペレーティング・システム、J2EEなどのJava(商標)処理環境を提供するプログラム、その他のプログラム及びデータが、メイン・メモリにロード可能に記憶されている。
CD−ROM、DVD又はBDドライブ(609)は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラムをハードディスクに追加導入するために使用される。バス(604)にはさらに、キーボード・マウスコントローラ(610)を介して、キーボード(611)及びマウス(612)が接続されている。
通信インタフェース(614)は、例えばイーサネット(商標)・プロトコルに従う。通信インタフェース(614)は、通信コントローラ(613)を介してバス(604)に接続され、コンピュータ・システム及び通信回線(615)を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は、有線LAN環境、或いは例えばIEEE802.11a/b/g/nなどの無線LAN接続規格に基づく無線LAN環境であってもよい。

Claims (20)

  1. 文字列の処理を含むプログラムを実行するコンピュータ・システムにおいて、文字列に対応付けられた前記文字列の特性を表す特性情報を用いて、前記プログラム実行時における前記文字列の処理を最適化する方法であって、
    第1の文字列についての特性と該第1の文字列に関する演算処理とから、前記第1の文字列及び前記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定するステップと、
    前記判定された特性情報を、前記少なくとも1の文字列に対応付けるステップと
    を含む、前記方法。
  2. 前記特性情報が対応付けられた文字列に関する処理を実行する場合に、前記対応付けられた特性情報に応じて、最適化された処理を選択して前記処理を実行するステップをさらに含む、請求項1に記載の方法。
  3. 前記演算処理が、少なくとも1の第1の文字列を代入する少なくとも1の第2の文字列を生成し、該生成時に前記少なくとも1の第1の文字列を1文字ずつ逐次処理することを含み、
    前記判定するステップが、前記逐次処理を実行するステップと該逐次処理とともに前記逐次処理される文字を検査するステップとをさらに含み、それによって前記少なくとも1の第2の文字列の特性情報が判定される、請求項1に記載の方法。
  4. 前記演算処理が、特性情報が不明である又は対応付けられていない少なくとも1の前記第1の文字列を1文字ずつ逐次処理することを含み、
    前記判定するステップが、前記逐次処理を実行するステップと該逐次処理とともに前記逐次処理する文字を検査するステップとをさらに含み、それによって前記少なくとも1の特性情報が判定される、請求項1に記載の方法。
  5. 前記演算処理が、少なくとも1の第1の文字列についての演算処理であり、
    前記判定するステップが、前記少なくとも1の第1の文字列それぞれについての特性情報と前記演算処理とから、少なくとも1の第2の文字列の特性情報を判定するステップを含む、請求項1に記載の方法。
  6. 前記文字列の特性を表す特性情報が、前記文字列が文字集合に属する文字を含むこと、含まないこと又は含むかどうか不明であることを表す少なくとも1の第1の情報と、前記文字列が前記文字集合に属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す第2の情報とを含む、請求項1に記載の方法。
  7. 前記文字集合が少なくとも2の第1の文字集合をまとめて表す第2の文字集合であり、該少なくとも2の第1の文字集合それぞれに含まれる文字が重複せず、前記第1の情報それぞれが、前記文字列が前記第1の文字集合それぞれに属する文字を含むこと、含まないこと又は含むかどうか不明であることを表し、前記第2の情報が、前記文字列が前記第1の文字集合全てに属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す、請求項6に記載の方法。
  8. 前記文字集合が少なくとも2の第1の文字集合をまとめて表す第2の文字集合であり、該少なくとも2の第1の文字集合それぞれに含まれる文字が重複せず、前記第1の情報が、前記文字列が前記第2の文字集合に属する文字を含むこと、含まないこと又は含むことが不明であることを表し、前記第2の情報が、前記文字列が前記第2の文字集合に属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す、請求項6に記載の方法。
  9. 前記第1の情報及び前記第2の情報がビット列で表され、ビットそれぞれが1つの文字集合又は文字集合のいずれにも属さない文字の集合に対応する、請求項6に記載の方法。
  10. 前記演算処理が、第1の特性情報が対応付けられた第1の文字列と、第2の特性情報が対応付けられた第1の文字列とを結合する演算処理であり、
    前記判定するステップが、前記第1の特性情報と前記第2の特性情報との論理和によって求められる特性情報を第2の文字列の特性情報と判定するステップを含む、請求項9に記載の方法。
  11. 前記演算処理が、第1の特性情報が対応付けられた第1の文字列から第2の特性情報が対応付けられた第1の文字列を削除する演算処理であり、
    前記判定するステップが、前記第1の特性情報を第2の文字列の特性情報と判定するステップを含む、請求項9に記載の方法。
  12. 前記演算処理が、第1の特性情報が対応付けられた第1の文字列から第2の特性情報が対応付けられた第1の文字列を削除する演算処理であり、該演算処理によって前記第2の特性情報が表す文字集合に属する文字が前記第1の特性情報が対応付けられた第1の文字列に含まれなくなる場合、
    前記判定するステップが、前記第1の特性情報と前記第2の特性情報との論理積によって求められる特性情報を第1の文字列の特性情報と判定するステップを含む、請求項9に記載の方法。
  13. 前記第1の文字列及び前記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定するステップが、請求項10に記載の判定するステップ、請求項11に記載の判定するステップ及び請求項12に記載の判定するステップの少なくとも2を組み合わせて上記特性情報を判定するステップを含む、請求項9に記載の方法。
  14. 前記文字集合が、大文字の集まり、小文字の集まり、数字の集まり、2バイト文字の集まり、ローマ字の集まり、同一の文字コード文字の集まり、正規表現の特殊文字の集まり、8ビットで表現できる文字の集まり及びURLエンコードにおける特殊文字の集まりからなる群から選択される少なくとも1を表す、請求項6に記載の方法。
  15. 前記演算処理が、少なくとも1の第1の文字列を代入する少なくとも1の第2の文字列を生成することを含み、
    前記判定するステップが、前記少なくとも1の第1の文字列についての特性情報から前記第2の文字列の特性情報を判定するステップを含む、請求項1に記載の方法。
  16. 前記演算処理が、文字列を生成し、該生成時に少なくとも1の第1の文字列を少なくとも1の第2の文字列に1文字ずつ代入する処理を含み、
    前記判定するステップが、前記代入する処理を実行するステップと該代入とともに前記代入する文字を検査するステップとをさらに含み、それによって前記少なくとも1の第2の文字列の特性情報が判定される、請求項1に記載の方法。
  17. 前記文字列がオブジェクトとして扱われるプログラム言語において、前記文字列に関する演算処理が前記オブジェクトに関する演算処理であり、前記特性情報が前記オブジェクトに含まれる、請求項1に記載の方法。
  18. 文字列の処理を含むプログラムを実行し、文字列に対応付けられた上記文字列の特性を表す特性情報を用いて、上記プログラム実行時における上記文字列の処理を最適化するコンピュータ・システムであって、
    第1の文字列についての特性と該第1の文字列に関する演算処理とから、前記第1の文字列及び前記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定する判定部と、
    前記判定された特性情報を、前記少なくとも1の文字列に対応付ける対応付け部と
    を含む、前記コンピュータ・システム。
  19. 文字列オブジェクトに含まれる文字列の処理を含むプログラムを実行するコンピュータ・システムにおいて、文字列に対応付けられた前記文字列の特性を表す特性情報を用いて、前記プログラム実行時における前記文字列の処理を最適化する方法であって、
    第1の文字列についての特性と該第1の文字列に関する演算処理とから、前記第1の文字列及び前記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定するステップと、
    前記判定された特性情報を、前記少なくとも1の文字列に対応付けるステップと、
    前記特性情報が対応付けられた文字列に関する処理を実行する場合に、前記対応付けられた特性情報に応じて、最適化された処理を選択して前記処理を実行するステップと
    を含み、下記(1)〜(3)の少なくとも1つの演算処理を用いて、前記特性情報の判定が行われる、前記方法:
    (1)前記演算処理が、少なくとも1の第1の文字列を代入する少なくとも1の第2の文字列を含む文字列オブジェクトを生成し、該生成時に前記少なくとも1の第1の文字列を1文字ずつ逐次処理することを含み、
    前記判定するステップが、前記逐次処理を実行するステップと該逐次処理とともに前記逐次処理される文字を検査するステップとをさらに含み、それによって前記少なくとも1の第2の文字列の特性情報が判定され、
    (2)前記演算処理が、特性情報が不明である又は対応付けられていない少なくとも1の前記第1の文字列を1文字ずつ逐次処理することを含み、
    前記判定するステップが、前記逐次処理を実行するステップと該逐次処理とともに前記逐次処理する文字を検査するステップとをさらに含み、それによって前記少なくとも1の特性情報が判定され、
    (3)前記演算処理が、少なくとも1の第1の文字列についての演算処理であり、
    前記判定するステップが、前記少なくとも1の第1の文字列それぞれについての特性情報と前記演算処理とから、少なくとも1の第2の文字列の特性情報を判定するステップを含む。
  20. 文字列の処理を含むプログラムを実行するコンピュータ・プログラムであって、コンピュータ・システムに、請求項1〜17及び19のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
JP2009131016A 2009-05-29 2009-05-29 プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム Pending JP2010277440A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009131016A JP2010277440A (ja) 2009-05-29 2009-05-29 プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム
US12/787,500 US9696976B2 (en) 2009-05-29 2010-05-26 Method for optimizing processing of character string during execution of a program, computer system and computer program for the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009131016A JP2010277440A (ja) 2009-05-29 2009-05-29 プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2012000276A Division JP5325309B2 (ja) 2012-01-04 2012-01-04 プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム

Publications (1)

Publication Number Publication Date
JP2010277440A true JP2010277440A (ja) 2010-12-09

Family

ID=43221743

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009131016A Pending JP2010277440A (ja) 2009-05-29 2009-05-29 プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム

Country Status (2)

Country Link
US (1) US9696976B2 (ja)
JP (1) JP2010277440A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017054242A (ja) * 2015-09-08 2017-03-16 株式会社リコー 情報置換システム、情報処理装置、情報出力システムおよびプログラム
CN107135429A (zh) * 2017-05-12 2017-09-05 武汉斗鱼网络科技有限公司 弹幕消息解析方法、装置及电子设备

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100031007A1 (en) * 2008-02-18 2010-02-04 Sandbridge Technologies, Inc. Method to accelerate null-terminated string operations
JP2014063285A (ja) * 2012-09-20 2014-04-10 International Business Maschines Corporation ガベージ・コレクションのためのコード変換方法、プログラム及びシステム
CN109783080B (zh) * 2018-12-25 2022-07-01 国电南瑞科技股份有限公司 一种前置接口通信协议开发方法及系统
CN115796166B (zh) * 2023-02-06 2023-05-09 华侨大学 一种智慧物流控制系统的正则表达式测试方法和系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61224033A (ja) * 1985-03-29 1986-10-04 Nec Corp コ−ド混在デ−タ処理方法および装置
JP2008059279A (ja) * 2006-08-31 2008-03-13 Internatl Business Mach Corp <Ibm> 文字列出力処理を最適化する技術

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4556951A (en) * 1982-06-06 1985-12-03 Digital Equipment Corporation Central processor with instructions for processing sequences of characters
IL100986A (en) * 1991-02-27 1997-01-10 Digital Equipment Corp Method for compiling code
US5561421A (en) * 1994-07-28 1996-10-01 International Business Machines Corporation Access method data compression with system-built generic dictionaries
US6523168B1 (en) * 1999-07-01 2003-02-18 International Business Machines Corporation Reduction of object creation during string concatenation and like operations that utilize temporary data storage
JP4776050B2 (ja) * 1999-07-13 2011-09-21 ソニー株式会社 配信コンテンツ生成方法、コンテンツ配信方法および装置、並びに、コード変換方法
US6954729B2 (en) * 2000-01-27 2005-10-11 Bowe Bell & Howell Postal Systems Company Address learning system and method for using same
JP3915876B2 (ja) * 2000-12-28 2007-05-16 セイコーエプソン株式会社 文字列データの処理方法および処理装置
AUPR824601A0 (en) * 2001-10-15 2001-11-08 Silverbrook Research Pty. Ltd. Methods and system (npw004)
JP4308676B2 (ja) * 2003-01-24 2009-08-05 株式会社リコー 文字列処理装置,文字列処理方法および画像形成装置
JP3919680B2 (ja) * 2003-02-26 2007-05-30 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ装置、コンパイラプログラム、及び記録媒体
JP4129981B2 (ja) * 2004-04-02 2008-08-06 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、コンパイラプログラム、記録媒体、制御方法、及び中央処理装置
US7587386B2 (en) * 2007-05-14 2009-09-08 Sap Ag Translating case-sensitive technical identfiers
US8443352B2 (en) * 2008-03-31 2013-05-14 International Business Machines Corporation Processing strings based on whether the strings are short strings or long strings

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61224033A (ja) * 1985-03-29 1986-10-04 Nec Corp コ−ド混在デ−タ処理方法および装置
JP2008059279A (ja) * 2006-08-31 2008-03-13 Internatl Business Mach Corp <Ibm> 文字列出力処理を最適化する技術

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017054242A (ja) * 2015-09-08 2017-03-16 株式会社リコー 情報置換システム、情報処理装置、情報出力システムおよびプログラム
CN107135429A (zh) * 2017-05-12 2017-09-05 武汉斗鱼网络科技有限公司 弹幕消息解析方法、装置及电子设备

Also Published As

Publication number Publication date
US20100306741A1 (en) 2010-12-02
US9696976B2 (en) 2017-07-04

Similar Documents

Publication Publication Date Title
JP4848317B2 (ja) データベースのインデックス作成システム、方法及びプログラム
JP6160259B2 (ja) 文字列探索方法、文字列探索装置および文字列探索プログラム
JP2010277440A (ja) プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム
JP2009237762A (ja) プログラム解析装置、プログラム解析方法および解析プログラム
JP5583514B2 (ja) バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
US20070011664A1 (en) Device and method for generating an instruction set simulator
JP2000132403A (ja) プログラム変換装置
JP2012063868A (ja) 言語処理パーサーを組み合わせて、組み合わせパーサーを生成する方法、並びにそのコンピュータ及びコンピュータ・プログラム
WO2018102767A1 (en) Obfuscating source code sent, from a server computer, to a browser on a client computer
JPWO2015019504A1 (ja) 検証方法、検証装置および検証プログラム
US9027008B2 (en) Method, computer, and computer program for speculatively optimizing code
US7979853B2 (en) Compiler device, method, program and recording medium
JP5440287B2 (ja) シンボリック実行支援プログラム、方法及び装置
JP2021184246A (ja) 命令変換支援プログラム、命令変換支援方法および情報処理装置
JP5325309B2 (ja) プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム
US11635947B2 (en) Instruction translation support method and information processing apparatus
JP3318051B2 (ja) 翻訳処理方法
JP5578625B2 (ja) プログラム分析装置、プログラム分析方法、及びプログラム
CN113031952A (zh) 深度学习模型的执行代码的确定方法、装置及存储介质
JP6547345B2 (ja) テストケース生成プログラム、テストケース生成方法およびテストケース生成装置
JP2000020318A (ja) メモリアクセス命令削減装置および記録媒体
JP2007200240A (ja) 情報処理装置及び情報処理方法
JP2011113298A (ja) 流用ソースコード解析システム及びプログラム並びに記録媒体
US7155709B2 (en) Displaying user readable information during linking
JP4061283B2 (ja) 字句をデータに変換する装置、方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101207

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110207

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110323

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110323

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110520

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110801

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110801

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110908