2012-02-28 8 views
2

この質問はあいまいに思えるかもしれません。誰でもObjective-CとPythonでRegExを書く経験がありますか?私は1対のパフォーマンスについて不思議に思っていますか? 1.ランタイムスピードとメモリ消費の点でどちらが速いのですか?私はいつもバックグラウンドで実行されているMac OSアプリケーションを持っています。私は、保存されているテキストファイルをインデックスに登録して、結果を保存したいと思います...私はObjの私のアプリケーションで正規表現メソッド-Cや、PerlやPython(Pythonの初心者)を使って別のアプリを書くことも可能です。Objective-CとPythonの正規表現のパフォーマンス

(おかげで、私はすでにあなたのいくつかからいくつかの良い情報を得たブーdownvoted人に、私は学ぶためにここにいる、と私は時間にいくつかの愚かな質問の時間を持っているかもしれない - 契約の一部を。。)

+0

「どちらが最適ですか?何のために? Appleのライセンスを使用するのに最適ですか?メモリの最善の使用?あなたが最適化しようとしている測定可能なものをいくつか提供してください。次に、測定方法を教えてください。 –

+0

なぜ2つの全く異なる言語の正規表現エンジンを比較していますか?これは「どちらの月がより短い軌道を持っているか、タイタンかプロテウスか」と尋ねるのと同じです。 – BoltClock

+0

私のMac OSアプリケーションでは、いくつかのテキスト処理を行い、Pythonでこれを行う方が速いのかどうか疑問に思っていました。 – janeh

答えて

2

あなたは、生のスピードを探しているなら、これら二つのどちらも非常に良い選択でしょう。実行速度のために、Perlを選択します。 PythonやPerlのどちらでも簡単にコードを書くことができるので、Objective Cで書くことができます。どちらも簡単にJavaソリューションを打ち破ることができます。コード化に要する時間が短い高水準言語は、測定しているすべてがソリューションの開発に比べてより多くのコード行を必要とするソリューションに比べて常に勝利を収めます。

実際の実行時のパフォーマンスになる限り、Perlの正規表現は非常に厳密にコード化されたCで書かれており、利用可能な最も高速で柔軟な正規表現として知られています。正規表現オプティマイザは、コンパイルされた正規表現プログラムに対して、Aho-Corasickの開始点最適化を適用して、O(1)時に実行する代替トライの開始点を見つけるなど、非常に巧妙なことをたくさん行います。誰もそれをしません。ヘック、私は他の誰も思っていませんが、PerlはO(n)からO(1)にあなたを連れて行くものです。コンパイラはスマートな何かをしてインタープリタはるかに速く走る。 Perlの正規表現はまた、デバッグとプロファイリングの大幅な改善をもたらします。 Pythonのものよりも柔軟性がありますが、デバッグだけでバランスをとることができます。

パフォーマンス上の唯一の例外は、Perlの、Javaの、Pythonのいずれの再帰的なバックトラッカーで実行したときに縮退する特定の病理パターンです。これらの問題は、Russ Coxによって書かれた、非常に推奨されているRE2ライブラリを置換プラグインとして使用することで対処できます。私はを知っていますそれはPerlのための透明な置換の正規表現エンジンとして利用可能であり、私はそれがPythonでも利用可能であったことを覚えていると確信しています。利用可能

あなたが本当にPythonのを使用したいが、ただ、より表現力と強固な正規表現ライブラリをしたい、ユニコード、に行儀され、特に1一方、あなたはマシュー・バーネットのregexモジュールを使用する場合、 Python2とPython3の両方のために。tr18のレベル1準拠要件(Unicode正規表現に関する標準文書)に準拠しているだけでなく、いくつかの完全にsui generisのその他の巧妙な機能もすべて備えています。あなたが正規表現の愛好家なら、それはチェックアウトする価値があります。

2

私のMac OSアプリケーションでは、テキスト処理を行う予定で、Pythonでこれを行う方が速いのだろうかと思っていました。

開発時間の面では、ほぼ確実です。ほぼすべてのソフトウェアプロジェクトでは、成功の尺度として開発時間がランタイムを支配しています。

ランタイムを意味する場合は、コードが遅いとユーザーインターフェイスの速度が低下することがわかっている場合を除いて、ほぼ確実に早すぎる最適化を行っています。

早期最適化はすべての悪の根源です。 - Donald Knuth

+0

"ほぼすべてのソフトウェアプロジェクトでは、開発期間が成功の尺度としてランタイムを支配しています。 - 私はそのグループに合っていません。私はランタイムのスピードを意味しました...速く終了するほど、メモリは他のプロセスのために解放されます。 – janeh

+2

@janeh:実際に**あなたの実際の必要条件を実際に述べるために質問を**更新してください。 –