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?¿Existe una relación entre las citas de código sin tipo/tipadas en F # y macro hygiene?
Respuesta
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.
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.
- 1. ¿Existe una relación entre RTTI y excepciones?
- 2. ¿Otra limitación de las citas de F #?
- 3. ¿Qué son las citas de F #?
- 4. Generación parametrizados F # citas
- 5. soporte macro en F #
- 6. compatibilidad de código entre OCaml y F #
- 7. LaTeX: redefiniendo temporalmente la macro de citas
- 8. ¿Cuándo favorecer las citas sin tipo en T #?
- 9. Extraer cadena de entre las citas
- 10. ¿Es este un error de citas F #?
- 11. ¿Qué relación existe entre GDAL, FDO y OGR?
- 12. F # citas: variable puede escapar alcance
- 13. ¿Existe una diferencia lógica entre 'no ==' y '= (sin es)
- 14. Mantenimiento de una relación bidireccional entre las clases
- 15. ¿Existe una relación entre llamar a una función e instanciar un objeto en lenguajes funcionales puros?
- 16. Relación entre HttpContext.Request.Cookies y HttpContext.Response.Cookies
- 17. ¿Existe una relación entre el tamaño del objeto y el rendimiento de bloqueo en Java?
- 18. Relación entre C y C++
- 19. relación entre las funciones y los comandos de Emacs
- 20. expansión de macro variable en cadena entre comillas
- 21. ¿Cuál es la relación entre las redes bayesianas y neuronales?
- 22. Relación entre GEF y GMF?
- 23. Relación entre AppDelegate y main.m
- 24. Citas de parámetros de Bash y eval
- 25. relación entre log4j y apache.commons.logging
- 26. ¿Cuál es la relación, si existe, entre grupos de Active Directory y grupos en Exchange?
- 27. Diferencia entre Seq.map y Seq.collect en F #
- 28. Relación entre sesiones JDBC y Oracle procesa
- 29. Python 2.7 obtener la entrada del usuario y manipularla como cadena sin las citas
- 30. Evite las citas en CMake add_custom_command
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