2012-03-11 12 views
5

Mi impulso es decir que sí, especialmente si estoy usando la misma expresión regular en varias ubicaciones de código, pero this article indica que la biblioteca guardará en caché la compilación por mí (que ni siquiera estoy seguro de cómo lo haría):Haskell: ¿debería molestarme en compilar expresiones regulares?

Normalmente no es necesario compilar patrones de expresiones regulares. Se compilará un patrón la primera vez que se usa, y el tiempo de ejecución de Haskell debería guardar en memoria de usted la representación compilada.

+4

¿Ha Benchmarked ella? – huon

+5

Hay un comentario ahí abajo (por nadie más que el autor del paquete) que indica claramente que la declaración citada no es verdadera. –

+3

Escribí ese comentario, y sigo creyendo que no es probable que se recuerde con el operador = ~. –

Respuesta

5

Si reutiliza una expresión regular, entonces vale la pena utilizar la clase de tipo RegexMaker para definir la expresión regular "compilada". Tiene la capacidad de tomar opciones adicionales y la capacidad de informar fallas de compilación en su elección de Monad.

Para usar el formulario "compilado" puede usar 'coincidencia' o 'coincidencia' desde RegexLike que le da el equivalente a = ~ o == ~ operadores.

5

GHC (a partir de 7.8.4/regex-tdfa-1.2.0) no memoriza las expresiones regulares que coinciden con (=~) o (=~~). Veo una mejora en el rendimiento del orden de magnitud usando compile and execute con una gran cantidad de posibles coincidencias.

  1. compile and execute

  2. (=~)

Cuestiones relacionadas