2012-03-11 18 views
5

Xung của tôi là nói có, đặc biệt nếu tôi đang sử dụng cùng một regex ở nhiều vị trí mã, nhưng this article cho biết thư viện sẽ lưu bộ nhớ cache cho tôi (tôi thậm chí không chắc chắn nó sẽ làm như thế nào):Haskell: Tôi có nên biên soạn các biểu thức chính quy không?

Thường thì không cần biên dịch các mẫu biểu thức chính quy. Một mẫu sẽ được biên dịch lần đầu tiên được sử dụng và thời gian chạy Haskell của bạn sẽ làm mờ trình diễn được biên dịch cho bạn.

+4

Bạn đã benchmarked nó? – huon

+5

Có một bình luận ở đó (không ai khác ngoài tác giả của gói) rõ ràng nói rằng tuyên bố được trích dẫn là không đúng sự thật. –

+3

Tôi đã viết bình luận đó, và tôi vẫn tin rằng nó không có khả năng được ghi nhớ bằng cách sử dụng toán tử = ~. –

Trả lời

5

Nếu bạn sử dụng lại cụm từ thông dụng thì bạn nên sử dụng loại lớp RegexMaker để xác định cụm từ thông dụng "được biên dịch". Nó có khả năng để có tùy chọn bổ sung và khả năng báo cáo thất bại biên dịch trong sự lựa chọn của bạn của Monad.

Để sử dụng biểu mẫu "được biên dịch", bạn có thể sử dụng 'so khớp' hoặc 'matchM' từ RegexLike cung cấp cho bạn tương đương với toán tử = ~ hoặc == ~.

5

GHC (theo 7.8.4/regex-tdfa-1.2.0) không ghi nhớ các biểu thức thông thường phù hợp với (=~) hoặc (=~~). Tôi thấy một thứ tự cải thiện hiệu suất độ lớn bằng cách sử dụng compile and execute với số lượng lớn các kết quả phù hợp tiềm năng.

  1. compile and execute

  2. (=~)

Các vấn đề liên quan