byte-compilation – ¿Se expanden las macros cuando se compila el archivo?

Pregunta:

Tengo una macro que debe expandirse en cada instancia de su uso en tiempo de compilación. ¿Hay alguna manera de que pueda especificar que esto sea así sin pasar por el código base y envolver cuidadosamente cada llamada con eval-when-compile ?

Respuesta:

Todas las macros accesibles por el compilador de bytes se expanden durante la compilación. "Accesible" significa esencialmente no estar cotizado.

El cuerpo de defun s, defmacro s, lambda s, se compilan en bytes cuando el archivo fuente que los contiene se compila en bytes. Entonces, sí, cualquier macro dentro de ellos se expandirá, siempre que no estén dentro de una comilla ( ' ). Un error muy común es envolver lambda s en una cita y, de hecho, es por eso que nunca debe citar sus lambda s .

Esta es una de las grandes ventajas de las macros, siempre que estén bien escritas, no tienen ningún impacto en el rendimiento del tiempo de ejecución. La otra ventaja es su potencia y versatilidad, por supuesto. La desventaja es que está manipulando la sintaxis, no los objetos, por lo que hay mucho espacio para problemas, algunos inesperados, otros inevitables.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım