2012-03-11 5 views
5

私のインパルスは、特に複数のコード位置で同じ正規表現を使用している場合は特にありますが、this articleはライブラリが私のためにコンパイルをキャッシュすることを示しています(私はそれがどういうことをするのかは分かりません):Haskell:正規表現のコンパイルはどうですか?

通常、正規表現パターンをコンパイルする必要はありません。最初にパターンがコンパイルされ、Haskellのランタイムはコンパイルされた表現をあなたのためにメモする必要があります。

+4

あなたはそれをベンチマークがありますか? – huon

+5

クォートされたステートメントが真ではないことを明示的に述べるコメントが(パッケージの作成者以外の誰も)そこにあります。 –

+3

私はそのコメントを書いていますが、私はまだ=〜演算子を使ってメモをとる可能性はないと考えています。 –

答えて

5

正規表現を再利用する場合は、RegexMakerタイプのクラスを使用して「コンパイル済み」正規表現を定義する価値があります。 Monadの選択において、追加のオプションとコンパイル失敗を報告する機能を持つことができます。

"コンパイル済み"フォームを使用するには、RegexLikeから 'match'または 'matchM'を使用できます。これは=〜または==〜演算子に相当します。

5

GHC(7.8.4/regex-tdfa-1.2.0以降)は、(=~)または(=~~)と一致する正規表現をメモしません。私は、可能性のある一致が多数あるcompile and executeを使用して、パフォーマンスの向上を確認しました。

  1. compile and execute

  2. (=~)