Saltar al contenido

Las macros, y qué esconden

Qué genera realmente la macro que declara un comando, por qué sus errores son confusos, y cómo se lee lo que produce.

Qué genera

Y el paso 3 explica algo que se acepta sin pensar: un comando puede recibir el estado o la ventana como argumento y el frontend no los manda — porque la macro los resuelve del contexto, no del mensaje.

Por qué sus errores son confusos

Tres razones que se acumulan:

Y el truco que resuelve la mayoría: buscar en el mensaje el nombre de tu propio tipo. El compilador siempre lo menciona, y ahí está la causa real — normalmente que le falta la capacidad de serializarse.

Los cuatro errores frecuentes

Con su causa y su arreglo:

  • Un tipo que no se puede deserializar → falta derivar la capacidad correspondiente. Nivel 15.1.
  • Un tipo de error que no se puede serializar → nivel 16: el error tiene que poder cruzar.
  • Un comando asíncrono con una referencia → el compilador exige que lo que se lleva a una tarea pueda moverse; la corrección es tomar lo que hace falta antes o usar la variante bloqueante. Nivel 42.1.
  • Y un argumento que el frontend no manda → si no es de los especiales del paso 3, es un desajuste con la llamada.

Los dos primeros son la mayoría y los dos se arreglan con una línea, cuando se sabe qué mirar.

Leer el código generado

Y la operación que convierte un error confuso en uno obvio: expandir la macro y ver el resultado.

  • Hay herramientas que muestran el código tras la expansión, y con eso el envoltorio deja de ser invisible.
  • Y leerlo una vez explica la mitad de las dudas: cómo se extraen los argumentos, dónde se comprueba qué, y qué se hace con el resultado.
  • Merece hacerlo una vez aunque no haya ningún error, por lo mismo que el nivel 74.5: entender lo que hay debajo hace predecible lo de arriba.

Y es especialmente útil con un error que no se entiende: ver el código real que no compila suele hacer evidente qué falta.