2012-05-17 8 views

Respuesta

6

Las citas son una forma de meta-programación. Permiten manipular árboles sintácticos abstractos mediante programación, que se pueden convertir en código y evaluar.

citas con tipo incrustar el tipo cosificada de la AST en el sistema de tipos de la lengua de acogida, por lo que aseguran que no se puede generar fragmentos escritos mal de código. Las cotizaciones sin cotización no ofrecen esa garantía (puede fallar con un error de tiempo de ejecución).

Como un lado, las citas mecanografiadas son muy similares a las cuasiquotaciones de la Plantilla Haskell.

macros Hygenic en idiomas Lisp-como se relacionan, en la que existen para apoyar meta-programación. Sin embargo, la higiene es para la confusión de captura de nombre simple, algo que se escribe cuasi citas ya evitar (y más).

Así que sí, que son similares, ya que son mecanismos de meta-programación en mecanografiadas y sin tipo idiomas, respectivamente. Las cuasicitaciones y las macros higiénicas tipadas añaden una seguridad adicional a la metaprogramación sin tipear y totalmente sintetizada. El nivel de garantía que ofrecen al programador es diferente. Las citas escritas son estrictamente más fuertes.

+3

Estoy de acuerdo, aunque creo que lo haría decirlo de otra forma, ya que creo que la higiene y 'escrito' aquí son conceptos ortogonales (que tanto añadir diferentes tipos de 'seguridad'); Creo que todas las citas de F # son higiénicas, y algunas agregan seguridad adicional a través de la escritura (meta) estática. – Brian

7

El aspecto de meta-programación es la única similitud, e incluso en ese sentido, hay una gran diferencia. Puede pensar en el transformador de macro como una función de sintaxis a sintaxis como puede manipular citas, pero los transformadores están coordinados globalmente para que los nombres usados ​​como carpetas sigan un protocolo específico:

1) Los encuadernadores pueden no ser lo mismo que cualquier nombre libre en entrada a la macro (a menos que use una compuerta de escape antihigiénica)

2) Los nombres enlazados en el contexto de una definición de macro libre en la expansión de la macro deben apuntar a la misma cosa en el tiempo de uso de la macro. (Esto necesita una coordinación global)

opciones para los nombres se hacen para que la expansión no falla si se ha utilizado el nombre equivocado (a menos que resulta que el nombre no está consolidado).

Los transformadores de citas tipadas no tienen esta idea de contexto de tiempo de definición. Manipula citas para formar un programa que no se refiere a ningún nombre en su programa. No están destinados a proporcionar un mecanismo de abstracción sintáctica. Formas arbitrarias de sintaxis? Nop. Todo tiene que ser formas centrales de AST.

código abierto en los sistemas de cotización mecanografiadas se puede cerrar con cualquier cosa que se adapte a la estructura tipo del contexto de esperar - no hay composición coordinada de varios componentes abiertos en una estructura coherente.

Cuestiones relacionadas