JP2010277440A - プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム - Google Patents
プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing 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
第1の文字列についての特性と該第1の文字列に関する演算処理とから、上記第1の文字列及び上記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定するステップと、
上記判定された特性情報を、上記少なくとも1の文字列に対応付けるステップと
を含む。
上記判定するステップが、上記逐次処理を実行するステップと該逐次処理とともに上記逐次処理する文字を検査するステップとをさらに含み、それによって上記少なくとも1の第2の文字列の特性情報が判定される。
上記判定するステップが、上記逐次処理を実行するステップと該逐次処理とともに上記逐次処理する文字を検査するステップとをさらに含み、それによって上記少なくとも1の特性情報が判定される。
上記判定するステップが、上記少なくとも1の第1の文字列それぞれについての特性情報と上記演算処理とから、少なくとも1の第2の文字列の特性情報を判定するステップを含む。
上記判定するステップが、上記第1の特性情報と上記第2の特性情報との論理和によって求められる特性情報を第2の文字列の特性情報と判定するステップを含む。
上記判定するステップが、上記第1の特性情報を第2の文字列の特性情報と判定するステップを含む。
上記判定するステップが、上記第1の特性情報と上記第2の特性情報との論理積によって求められる特性情報を第1の文字列の特性情報と判定するステップを含む。
上記第1の特性情報と上記第2の特性情報との論理和によって求められる特性情報を第2の文字列の特性情報と判定するステップ、上記第1の特性情報を第2の文字列の特性情報と判定するステップ及び上記第1の特性情報と上記第2の特性情報との論理積によって求められる特性情報を第1の文字列の特性情報と判定するステップの少なくとも2を組み合わせて上記特性情報を判定するステップを含む。
上記判定するステップが、上記少なくとも1の第1の文字列についての特性情報から上記第2の文字列の特性情報を判定するステップを含む。
上記判定するステップが、上記代入する処理を実行するステップと該代入とともに上記代入する文字を検査するステップとをさらに含み、それによって上記少なくとも1の第2の文字列の特性情報が判定される。
第1の文字列についての特性と該第1の文字列に関する演算処理とから、上記第1の文字列及び上記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定する判定部と、
上記判定された特性情報を、上記少なくとも1の文字列に対応付ける対応付け部と
を含む。
上記判定部が、上記逐次処理を実行し、及び該逐次処理とともに上記逐次処理する文字を検査する。それによって上記少なくとも1の第2の文字列の特性情報が判定される。
上記判定部が、上記逐次処理を実行し、及び該逐次処理とともに上記逐次処理する文字を検査する。それによって上記少なくとも1の特性情報が判定される。
上記判定部が、上記少なくとも1の第1の文字列それぞれについての特性情報と上記演算処理とから、少なくとも1の第2の文字列の特性情報を判定する。
上記判定部が、上記第1の特性情報と上記第2の特性情報との論理和によって求められる特性情報を第2の文字列の特性情報と判定する。
上記判定部が、上記第1の特性情報を第2の文字列の特性情報と判定する。
上記判定部が、上記第1の特性情報と上記第2の特性情報との論理積によって求められる特性情報を第1の文字列の特性情報と判定する。
上記判定部が、上記少なくとも1の第1の文字列についての特性情報から上記第2の文字列の特性情報を判定する。
上記判定部が、上記代入する処理を実行するステップと該代入とともに上記代入する文字を検査する。それによって上記少なくとも1の第2の文字列の特性情報が判定される。
本発明の実施態様において、「文字集合」は、共通の上記特徴をもつ文字の集まりである。文字集合は、例えば大文字の集合、小文字の集合、数字の集合、2バイト文字の集合、アルファベットの集合、同一の文字コード文字の集合、正規表現の特殊文字の集合、8ビットで表現できる文字の集合、URLエンコードにおける特殊文字の集合又はある集合に属さない文字の集合であるが、これらに限らない。文字集合に含まれる文字が重複していない複数の文字集合をまとめて、1つの文字集合として表してもよい。
なお、以下では、本発明の実施態様をJava(商標)で実装した場合を例として説明する。Java(商標)では、文字列の操作は、文字列オブジェクトを介して実行される。よって、請求項における文字列は、Java(商標)の場合、上記文字列オブジェクト自身又は該文字列オブジェクトに含まれる文字列を指す。
文字列オブジェクト(101)は、文字列(102)及び特性情報(103)を含む。なお、特性情報(103)は、上記文字列オブジェクト(101)と関連付けられたメモリ上の文字列オブジェクト(101)とは異なる領域に含まれてもよい。文字列オブジェクト(101)は、メモリ上に格納される。文字列オブジェクト(101)は、クラス・ライブラリに用意されている文字列クラスから生成される。クラス・ライブラリとは、例えばJava(商標)におけるJava(商標)クラス・ライブラリであるが、これに限定されない。文字列クラスとは、例えばJava(商標)におけるjava.lang.Stringクラス(Stringクラス)であるが、これに限定されない。
特性情報(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)に属さない文字を含むことが不明であることを表している。
ビットそれぞれは、第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の情報として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ビットである。
コンピュータ・システムは、第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)は「全て小文字文字」と判定されうる。
A.第1の態様
特性情報(図1、103)は、文字列オブジェクト(101)が文字列クラスから生成されることに応じて、文字列オブジェクト(101)に付加されうる。コンピュータ・システムは、生成される文字列オブジェクト(101)に含まれる文字列(図1、102)の特性情報が生成元の文字列オブジェクト(101)から判定できる場合又は生成元の文字列に対する逐次処理と同時に検査できる場合、該判定又は該検査によって求められる特性情報(103)を生成した文字列オブジェクト(101)に付加する。
特性情報の付加は、可変な文字列を保持する文字列オブジェクト及び不変な文字列を保持する文字列オブジェクトの両方の文字列オブジェクトに対して可能である。特に、不変な文字列を保持する文字列オブジェクト、例えばJava(商標)におけるStringオブジェクトでは、文字列オブジェクト(101)が一度生成されると、文字列オブジェクト(101)に含まれる文字列は変化しない。よって、文字列オブジェクト(101)に含まれる文字列の特性情報(103)も変化しない。従って、コンピュータ・システムは、不変な文字列を保持する文字列オブジェクトにおいて、オブジェクト生成に応じて特性情報(103)が付加された文字列オブジェクト(101)を、文字列オブジェクト(101)がガーベジコレクションされるまで利用することができる。
特性情報(103)は、特性情報(103)が付加されていない文字列オブジェクト(101)に含まれる文字列(102)に対する逐次処理と同時に特性が検査されることに応じて、文字列オブジェクト(101)に付加されうる。
文字列オブジェクト(101)が特性情報(103)を含むことの効果は、特性情報(103)によって最適化された処理が実行されることである。よって、ある文字列オブジェクトについて、最適化された処理が一度も実行されない場合、上記検査するコストが無駄になってしまう。上記コストを抑えるために、コンピュータ・システムは、文字列を処理するメソッドに文字列の内容を1文字ずつ逐次処理する処理が含まれる場合、該処理と同時に特性の検査を行う。
特性情報(103)は、特性情報(103)が付加された少なくとも1の文字列オブジェクト(以下、演算元オブジェクト)の演算処理が実行されることに応じて、演算処理の結果が格納される少なくとも1の文字列オブジェクト(以下、結果オブジェクト)に付加されうる。コンピュータ・システムは、演算元オブジェクトと演算処理の内容とから結果オブジェクトに付加される特性情報が判定されることに応じて、該判定された特性情報(103)を結果オブジェクトに付加する。上記演算処理とは、例えば文字列同士を結合する処理、文字列からある文字を取り出す処理、又は文字列を別の文字列に変換する処理であるが、これらに限定されない。
第1の文字列と第2の文字列とを結合する場合、コンピュータ・システムは、結合した結果の文字列も全て大文字で構成されると判定しうる。よって、コンピュータ・システムは、結果オブジェクトに付加される特性情報を、例えば「全て大文字」を表す情報としうる。
第1の文字列からある文字を取り出す場合、コンピュータ・システムは、一部の文字列が取り出された第1の文字列(以下、第1の結果の文字列)及び取り出した一部の文字列(以下、第2の結果の文字列)はともに全て大文字で構成されると判定しうる。第1の文字列からある文字を取り出す場合とは、例えば第1の文字列オブジェクトに対して文字列の一部を取り出すJava(商標)言語のString.substring()メソッドを適用した場合である。よって、コンピュータ・システムは、第1の結果の文字列を含む結果オブジェクト及び/又は第2の結果の文字列を含む結果オブジェクトに付加される特性情報を、例えば「全て大文字」を表す情報としうる。なお、第1の結果の文字列を含む結果オブジェクトは、第1の文字列オブジェクトでありうる。
第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との論理積によって、結果オブジェクトに付加される特性情報が求められる。
String.concat()メソッドは、文字列に文字列を加えるためのメソッドである。よって、追加されるコードは、第1のコード(211)である。
String.substring()メソッドは、文字列の一部を切り出すメソッドである。よって、追加されるコードは、第2のコード(212)である。
String.replaceFirst()メソッドは、文字列の一部を置き換えるメソッドである。よって、追加されるコードは、第1のコード(211)と第2のコード(212)との組み合わせのコードである。
String.toUpper()メソッドは、小文字を大文字に変換するメソッドである。よって、追加されるコードは、第1のコード(211)と第3のコード(213)との組み合わせのコードである。
プログラムを動作させるためには、最適化版のコードの有無にかかわらず通常版のコードは必要である。特性情報が付加されていない文字列オブジェクトに対する処理を通常版コードで常に実行することによって、コンピュータ・システムはプログラムを正しく動作させる。また、通常版のコードの実行と同時に特性情報の検査が行われている場合、文字列オブジェクトが2回目以降に上記メソッドで処理されるときに、特性情報に応じて最適化版のコードが実行されうる。
例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中のステップ304の処理が第1の態様で示される生成元の文字列オブジェクト(101)から判定できる場合に対応し、及び図3A中のステップ309及びステップ310の処理が第1の態様で示される生成元の文字列に対する逐次処理と同時に検査できる場合に対応する。
ステップ302では、コンピュータ・システムは、生成される文字列オブジェクトに代入される文字列が特性情報を含んでいるかどうかを判定する。特性情報を含んでいる場合、該処理はステップ303に進む。特性情報を含んでいない場合、該処理はステップ306に進む。
ステップ303では、コンピュータ・システムは、上記文字列から文字列オブジェクトを生成する。該生成の終了に応じて、該処理はステップ304に進む。
ステップ304では、コンピュータ・システムは、上記生成した文字列オブジェクトに伝搬される特性情報を算出する。1つの実施態様として、コンピュータ・システムは、例えば文字列に含まれる特性情報そのままを、伝搬される特性情報として算出する。他の実施態様として、コンピュータ・システムは、文字列に含まれる特性情報と文字列オブジェクトに初期値として与えられた特性情報との論理積の結果を、伝搬される特性情報として算出する。上記算出に応じて、該処理はステップ305に進む。なお、伝搬される特性情報が「不明」と算出された場合も、該処理はステップ305に進む。
ステップ305では、コンピュータ・システムは、上記算出した特性情報を生成された文字列オブジェクト(結果オブジェクト)に付加する。該付加に応じて、該処理はステップ311に進み、文字列オブジェクトを生成する処理は終了する。
ステップ307では、コンピュータ・システムは、上記文字列から文字列オブジェクトを生成する。該生成では、コンピュータ・システムは、上記文字列を文字単位ではなく文字列単位でまとめて文字列オブジェクトに代入する。上記生成の終了に応じて、該処理はステップ308に進む。
ステップ308では、コンピュータ・システムは、上記生成された文字列オブジェクト(結果オブジェクト)に「未検査」であることを示す特性情報を付加する。該付加の終了に応じて、該処理はステップ311に進み、文字列オブジェクトを生成する処理は終了する。
ステップ310では、コンピュータ・システムは、上記求めた特性情報を生成された文字列オブジェクト(結果オブジェクト)に付加する。該付加の終了に応じて、該処理はステップ311に進み、文字列オブジェクトを生成する処理は終了する。
第1の文字列処理は、特性情報に応じて最適化された処理及び特性情報を付加する処理を、ライブラリに用意されている従来の処理に、クラス・ライブラリ作成者が追加した処理である。従来の処理とは、例えば、引数として受け取った少なくとも1の文字列オブジェクト(元オブジェクト)に含まれる文字列を1文字ずつ逐次処理し、該逐次処理された文字列を他の少なくとも1の文字列オブジェクト(結果オブジェクト)に含まれる文字列とする処理である。
図3B中のステップ326〜ステップ328の処理が上記第2の態様に対応し、ステップ324の処理が上記第3の態様に対応する。
ステップ322では、コンピュータ・システムは、元オブジェクトに付加された特性情報に、最適化された処理を実行することが可能である値が設定されているかどうかを判定する。最適化された処理を実行することが可能である値が設定されている場合、該処理はステップ323に進む。最適化された処理を実行することが可能である値が設定されていない場合、該処理はステップ326に進む。
ステップ323では、コンピュータ・システムは、上記特性情報に応じて最適化された処理を実行する。該実行の終了に応じて、該処理はステップ324に進む。
ステップ324では、コンピュータ・システムは、結果オブジェクトに伝搬される特性情報を算出する。該算出は、第3の態様を用いて行われる。算出の方法は、上記最適化された処理の内容により異なる。コンピュータ・システムは、例えば上記最適化された処理に大文字を小文字に変換する処理が含まれる場合、コンピュータ・システムは、元オブジェクトに含まれる特性情報に「大文字を含まない」という情報を表す特性情報が付加された特性情報を算出する。上記算出に応じて、該処理はステップ325に進む。
ステップ325では、コンピュータ・システムは、上記算出した特性情報を結果オブジェクトに付加する。該付加に応じて、該処理はステップ330に進み、第1の文字列処理は終了する。
ステップ327では、コンピュータ・システムは、「未検査」を意味する特性情報が付加された元オブジェクト(以下、第1の元オブジェクト)があるかどうかを判定する。コンピュータ・システムは、さらに付加されている特性情報と異なる特性情報が第1の検査によって求められた元オブジェクト(第2の元オブジェクト)があるかどうかを判定する。上記第1の元オブジェクト又は上記第2の元オブジェクトがある場合、該処理はステップ328に進む。上記第1の元オブジェクト及び上記第2の元オブジェクトがない場合、該処理はステップ329に進む。
ステップ328では、コンピュータ・システムは、第1の検査の結果から元オブジェクトに付加する特性情報を決定する。そして、コンピュータ・システムは、該決定した特性情報を元オブジェクトに付加する。該付加の終了に応じて、該処理はステップ329に進む。
ステップ329では、コンピュータ・システムは、第1の検査及び第2の検査の結果から、結果オブジェクトの特性情報を求める。コンピュータ・システムは、上記求めた特性情報を結果オブジェクトに付加する。該付加の終了に応じて、該処理はステップ330に進み、第1の文字列処理は終了する。
ステップ330は、第1の文字列処理の終了を表す。
第2の文字列処理は、特性情報に応じて最適化された処理及び特性情報を付加する処理を、ライブラリに用意されている従来の処理にクラス・ライブラリ作成者が追加した処理である。また、上記従来の処理は、例えば引数として受け取った少なくとも1の文字列オブジェクト(元オブジェクト)に含まれる文字列をまとめて処理し、該処理された文字列を他の少なくとも1の文字列オブジェクト(結果オブジェクト)に含まれる文字列とする処理とする。図3C中のステップ344の処理が、第3の態様に対応する。
ステップ342では、コンピュータ・システムは、元オブジェクトに付加された特性情報に、最適化された処理を実行することが可能である値が設定されているかどうかを判定する。最適化された処理を実行することが可能である値が設定されている場合、該処理はステップ343に進む。最適化された処理を実行することが可能である値が設定されていない場合、該処理はステップ346に進む。
ステップ343では、コンピュータ・システムは、上記特性情報に応じて最適化された処理を実行する。該実行の終了に応じて、該処理はステップ344に進む。
ステップ344では、コンピュータ・システムは、結果オブジェクトに伝搬される特性情報を算出する。該算出は、第3の態様により行われる。算出の方法は、上記最適化された処理の内容により異なる。コンピュータ・システムは、例えば上記最適化された処理に先頭から5文字を抽出する処理が含まれ且つ、元オブジェクトに含まれる特性情報が「大文字しか含まない」ことを表す場合、コンピュータ・システムは、元オブジェクトに含まれる特性情報伝搬される特性情報を算出する。上記算出に応じて、該処理はステップ345に進む。
ステップ325では、コンピュータ・システムは、上記算出した特性情報を結果オブジェクトに付加する。該付加に応じて、該処理はステップ347に進み、第2の文字列処理は終了する。
コンピュータ・システムが、プログラム・コード(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に進み、オブジェクトを生成する処理は終了する。
ここで、クラス・ライプラリ作成者が、例えば特性情報「01」が付加された文字列がtoUpperCase()メソッドに与えられた場合、与えられた文字列をそのまま返値として返す実装をtoUpperCase()メソッドの実装部分に追加していたとする。上記実装が追加されている場合、コンピュータ・システムは、上記実行において、文字列を大文字化する従来の処理を全く行う必要がない。コンピュータ・システムは、与えられた特性情報「01」が付加された文字列の文字列"ABC"をそのままtoUpperCase()メソッドの返値として返すことができる。よって、toUpperCase()メソッドの処理は、高速化される。
プログラム・コード(411)は、StringRepleaceFirst()メソッドの実装部分である。StringRepleaceFirst()メソッドの従来の処理(412)では、Pattern.compile()メソッドが実行され、大量のオブジェクトが生成されうる。
ここで、StringRepleaceFirst()メソッドの引数で渡される文字列に正規表現の特殊文字が含まれない場合、上記Pattern.compile()メソッドによって実行される処理は、他のメソッドを用いた処理に置き換えることが可能である。上記正規表現の特殊文字とは、例えば正規表現“[a-z]+[0-9]”における、1回以上の繰り返しを表す“+”、文字範囲指定の開始と終了を表す“[”又は“]”であるがこれらに限られない。他のメソッドを用いた処理は、例えばindexOf()メソッドとsubstring()とを組み合わせたコードによる。上記組み合わせたコードによって実行される処理は、大量のオブジェクトを生成せず、Pattern.compile()メソッドによって実行される処理よりも高速で実行されうる。
よって、クラス・ライブラリ作成者は、例えばStringRepleaceFirst()メソッドに、引数で渡された文字列の特性情報が「正規表現の特殊文字列が含まれないこと」を表す場合のコード(412)を追加する。該追加により、引数で渡された文字列が正規表現を含まない場合、StringRepleaceFirst()メソッドは、従来の処理が実行される場合に比べ高速に実行されうる。
状態遷移図(421)は、文字列に含まれる正規表現“[a-z]+[0-9]”についてパターンマッチを行うプログラム・コードの遷移を表す。プログラマーは、上記プログラム・コードを実装するステートマシンを作成することで、正規表現“[a-z]+[0-9]”に対する処理が従来のパターンマッチ・プログラムよりも高速化したパターンマッチ・プログラムを作成することができる。
プログラム・コード(431)は、引数で渡される文字列が8ビット値に限定されている場合のステートマシン(図4Cを参照)の実装の例である。プログラム・コード(432)は、引数で渡される文字列が8ビット値に限定されていない場合のステートマシンの実装の例である。引数で渡される文字列が8ビット値に限定されていない場合、プログラマーは、プログラム・コード(432)に示す、例えばcase文による実装で文字列に含まれる文字と正規表現とのマッチングを実現させる。引数で渡される文字列が8ビット値に限定されている場合、プログラマーは、上記case文による実装に代えて、プログラム・コード(431)に示す、例えばfor文による単純なループによって、上記マッチングを実現させうる。
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()メソッドは終了する。
また、java.net.URLDecoder.decode()メソッドの結果は、URLエンコードにおける特殊文字を含まないことが自明である。よって、追加コード(446)において、返値としてsb.toString()で生成された文字列に、「URLエンコードにおける特殊文字を含まない」を表す特性情報が設定される。追加コード(446)の処理は、ステップ329に対応する。
以下では、プログラム・コード(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を生成する処理は終了する。
ステップ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を生成する処理は終了する。
コンピュータ・システム(501)は、メモリ(502)、判定部(503)、対応付け部(504)及び実行部(505)を含む。
文字列の処理(510)は、少なくとも1の最適化された処理(511)及び従来の処理(512)を含む処理である。
最適化された処理(511)及び従来の処理(512)は、少なくとも1の文字列(508a〜508n)を使用して演算を行う処理である。
最適化された処理(511)は、ある特性情報と対応付けられた文字列について実行される場合に、従来の処理(512)よりも高速で実行されうる。
特性情報(507a〜507n)は、文字列(508a〜508n)の特性を表す情報である。特性情報(507a〜507n)それぞれは、文字列(508a〜508n)それぞれと対応する。
判定部(503)は、検査部(506)を含む。検査部(506)は、上記演算処理において、文字列(508a〜508n)に対する逐次処理が実行されることに応じて、該逐次処理される文字の特性を1文字ずつ求める。判定部(503)は、検査部(506)によって求められた文字の特性から、逐次処理が実行された文字列(508a〜508n)に対応する特性情報(507a〜507n)を判定する。
コンピュータ・システム(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)が接続される。
Claims (20)
- 文字列の処理を含むプログラムを実行するコンピュータ・システムにおいて、文字列に対応付けられた前記文字列の特性を表す特性情報を用いて、前記プログラム実行時における前記文字列の処理を最適化する方法であって、
第1の文字列についての特性と該第1の文字列に関する演算処理とから、前記第1の文字列及び前記演算処理の結果である第2の文字列のうちの少なくとも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の文字集合全てに属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す、請求項6に記載の方法。
- 前記文字集合が少なくとも2の第1の文字集合をまとめて表す第2の文字集合であり、該少なくとも2の第1の文字集合それぞれに含まれる文字が重複せず、前記第1の情報が、前記文字列が前記第2の文字集合に属する文字を含むこと、含まないこと又は含むことが不明であることを表し、前記第2の情報が、前記文字列が前記第2の文字集合に属さない文字を含むこと、含まないこと又は含むかどうか不明であることを表す、請求項6に記載の方法。
- 前記第1の情報及び前記第2の情報がビット列で表され、ビットそれぞれが1つの文字集合又は文字集合のいずれにも属さない文字の集合に対応する、請求項6に記載の方法。
- 前記演算処理が、第1の特性情報が対応付けられた第1の文字列と、第2の特性情報が対応付けられた第1の文字列とを結合する演算処理であり、
前記判定するステップが、前記第1の特性情報と前記第2の特性情報との論理和によって求められる特性情報を第2の文字列の特性情報と判定するステップを含む、請求項9に記載の方法。 - 前記演算処理が、第1の特性情報が対応付けられた第1の文字列から第2の特性情報が対応付けられた第1の文字列を削除する演算処理であり、
前記判定するステップが、前記第1の特性情報を第2の文字列の特性情報と判定するステップを含む、請求項9に記載の方法。 - 前記演算処理が、第1の特性情報が対応付けられた第1の文字列から第2の特性情報が対応付けられた第1の文字列を削除する演算処理であり、該演算処理によって前記第2の特性情報が表す文字集合に属する文字が前記第1の特性情報が対応付けられた第1の文字列に含まれなくなる場合、
前記判定するステップが、前記第1の特性情報と前記第2の特性情報との論理積によって求められる特性情報を第1の文字列の特性情報と判定するステップを含む、請求項9に記載の方法。 - 前記第1の文字列及び前記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定するステップが、請求項10に記載の判定するステップ、請求項11に記載の判定するステップ及び請求項12に記載の判定するステップの少なくとも2を組み合わせて上記特性情報を判定するステップを含む、請求項9に記載の方法。
- 前記文字集合が、大文字の集まり、小文字の集まり、数字の集まり、2バイト文字の集まり、ローマ字の集まり、同一の文字コード文字の集まり、正規表現の特殊文字の集まり、8ビットで表現できる文字の集まり及びURLエンコードにおける特殊文字の集まりからなる群から選択される少なくとも1を表す、請求項6に記載の方法。
- 前記演算処理が、少なくとも1の第1の文字列を代入する少なくとも1の第2の文字列を生成することを含み、
前記判定するステップが、前記少なくとも1の第1の文字列についての特性情報から前記第2の文字列の特性情報を判定するステップを含む、請求項1に記載の方法。 - 前記演算処理が、文字列を生成し、該生成時に少なくとも1の第1の文字列を少なくとも1の第2の文字列に1文字ずつ代入する処理を含み、
前記判定するステップが、前記代入する処理を実行するステップと該代入とともに前記代入する文字を検査するステップとをさらに含み、それによって前記少なくとも1の第2の文字列の特性情報が判定される、請求項1に記載の方法。 - 前記文字列がオブジェクトとして扱われるプログラム言語において、前記文字列に関する演算処理が前記オブジェクトに関する演算処理であり、前記特性情報が前記オブジェクトに含まれる、請求項1に記載の方法。
- 文字列の処理を含むプログラムを実行し、文字列に対応付けられた上記文字列の特性を表す特性情報を用いて、上記プログラム実行時における上記文字列の処理を最適化するコンピュータ・システムであって、
第1の文字列についての特性と該第1の文字列に関する演算処理とから、前記第1の文字列及び前記演算処理の結果である第2の文字列のうちの少なくとも1についての文字列の特性情報を判定する判定部と、
前記判定された特性情報を、前記少なくとも1の文字列に対応付ける対応付け部と
を含む、前記コンピュータ・システム。 - 文字列オブジェクトに含まれる文字列の処理を含むプログラムを実行するコンピュータ・システムにおいて、文字列に対応付けられた前記文字列の特性を表す特性情報を用いて、前記プログラム実行時における前記文字列の処理を最適化する方法であって、
第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の文字列の特性情報を判定するステップを含む。 - 文字列の処理を含むプログラムを実行するコンピュータ・プログラムであって、コンピュータ・システムに、請求項1〜17及び19のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
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)
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)
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)
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)
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 |
-
2009
- 2009-05-29 JP JP2009131016A patent/JP2010277440A/ja active Pending
-
2010
- 2010-05-26 US US12/787,500 patent/US9696976B2/en not_active Expired - Fee Related
Patent Citations (2)
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)
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 |