2012-03-21 15 views
12

Iglesia (también conocido como patrón Visitante) es una forma de representar los datos como funciones: en lugar derazones prácticas para Сhurch Codificación codificación

data T = C1 F1 F2 | C2 F3 F4 

puede definir

data T = T (forall r. (F1 -> F2 -> r) -> (F3 -> F4 -> r) -> r) 

. Aunque la capacidad de representar cualquier cosa como una función es agradable, siempre he pensado que la primera versión era preferible porque es más limpia y no requiere extensiones de lenguaje (explícita forall). Sin embargo, a veces puede encontrar datos codificados por la iglesia en las bibliotecas públicas. ¿Cuáles son las ventajas de usar eso?

Los ejemplos de codificación de la iglesia en las bibliotecas públicas:

Respuesta

7

Esto corresponde a continuation-passing style con múltiples continuaciones, y se hace para el rendimiento: se evita la construcción explícita y la destrucción de datos, en lugar de pasar el control directamente basado en la salida de la coincidencia de patrón que se haría de inmediato. Esto no siempre da como resultado un rendimiento mejorado, pero cuando lo hace puede ser bastante significativo.

Básicamente, puede considerarlo como data vs. control. Si lo que estás haciendo es esencialmente similar al control en la naturaleza, como las ramas de éxito y falla de un analizador, entonces la representación basada en el control podría ser superior. De lo contrario, quédate con los datos.

Cuestiones relacionadas