REXXのlength()関数の処理オーバーヘッドは、文字列の長さによってどのように変化しますか?
更新:私は使用しています:
- uni-REXX(R)バージョン297t
- Open-REXX(TM)Copyright(C)iXCorporation1989-2002。全著作権所有。
REXXのlength()関数の処理オーバーヘッドは、文字列の長さによってどのように変化しますか?
更新:私は使用しています:
それは完全に実装に依存します。OS/2 用の REXX、z/VM 用の REXX、z/OS 用の REXX、Windows 用の OOREXX、REXX/400、または Regina のことですか?
IBM の REXX 言語仕様では、関数がカバーの下でどのように実装されているかを指示するものは何もありません。文字列をスキャンする場合は O(N)、文字列と共に長さがどこかに格納されている場合は O(1) になる可能性があります。
本当に重要な場合は、ベンチマーク コードでテストして、長さが違いを生むかどうかを確認することをお勧めします。
オーバーヘッドは 0 です。長さは記述子に格納されます。
Neil Milsted uni-REXX の著者 (冗談ではありません)。
わからない。私は Rexx を書いたことがありますが、length() 関数でパフォーマンスの問題が発生したことはありません。これがスケーリングする方法は、おそらく Rexx パーサーの実装によって異なります。
10 文字の文字列、次に 100 文字の文字列、そして 1000 文字の文字列で "length()" の 10.000 回の呼び出しを計測する Rexx スクリプトを作成します。
結果の時間をグラフにプロットすると、パフォーマンスがどのように低下するかを概算できます。
以上のことから、私の推測では、パフォーマンスの低下は、O(n) のようにせいぜい直線的です。( http://en.wikipedia.org/wiki/Big_O_notationを参照)
私は、IBM メインフレーム バージョン、OS/2 用の Classic Rexx バージョン、および Object Rexx 実装のいずれかについて話すことができます。長さは文字列記述子に格納されるため、オーバーヘッドは文字列の長さとは無関係です。
これは言語実装固有です。REXX を書いたのはもうずいぶん前のことです。実際、AREXX (Amiga の実装) を書いたのは 15 年前のことです。:-)
独自のテスト ルーチンを作成できます。長さが増加する文字列を生成し、高性能タイマーを使用して length() を取得するのにかかる時間を測定します。時間と文字列の長さをテキスト ファイル ベースのカンマ区切りのテーブルに保存すると、gnuplotを使用してプロットできます。そして、それがどのようにスケーリングするかが非常に明確にわかります。
編集:ロルフは多かれ少なかれ同じことを書いたので、最初にロルフの答えを確認する必要がありました。:-)