tipear - ¿Existe una relación entre las citas de código sin tipo/tipeado en F#y macro hygiene?
que es tipear datos (2)
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.
Las citas escritas insertan el tipo reificado de AST en el sistema de tipos de la lengua del servidor, por lo que se aseguran de que no pueda generar fragmentos de código mal escritos. Las cotizaciones sin cotización no ofrecen esa garantía (puede fallar con un error de tiempo de ejecución).
Como un aparte, las citas escritas a máquina son muy similares a las cuasiquotaciones de Template Haskell.
Las macros de Hygen en lenguajes Lisp están relacionadas, ya que existen para soportar la 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).
Entonces, sí, son similares, en el sentido de que son mecanismos para la metaprogramación en lenguajes tipeados y no tipificados, respectivamente. Las cuasicitaciones y las macros higiénicas tipadas añaden seguridad adicional a la metaprogramación sin tipear completamente sin tipar. El nivel de garantía que ofrecen al programador es diferente. Las citas escritas son estrictamente más fuertes.
Me pregunto si existe una relación entre las citas de código sin tipo / tipadas en F # y la higiene de los macro sistemas. ¿Resuelven los mismos problemas en sus respectivos idiomas o son preocupaciones separadas?
El aspecto de meta-programación es la única similitud, e incluso en ese sentido, hay una gran diferencia. Puede pensar en el transformador del macro como una función desde la sintaxis hasta la sintaxis, como puede manipular las citas, pero los transformadores están coordinados a nivel mundial, de modo que los nombres utilizados como aglutinantes siguen un protocolo específico:
1) Las carpetas pueden no ser las mismas que cualquier nombre libre en la entrada a la macro (a menos que use una escotilla de escape antihigiénica)
2) Los nombres enlazados en el contexto de una definición de macro que están libres en la expansión de la macro deben señalar lo mismo en el tiempo de uso de la macro. (esto necesita coordinación global)
Las opciones para los nombres se hacen para que la expansión no falle si usaste el nombre incorrecto (a menos que resulte que ese nombre está desatado).
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.
El código abierto en los sistemas de cotización tipeados se puede cerrar con cualquier cosa que se ajuste a la estructura de tipos del contexto esperado; no hay una composición coordinada de varios componentes abiertos en una estructura coherente.