¿Qué problemas resuelve principalmente la metaprogramación?
En principio, existen dos tipos de MetaProgramación que se pueden ver actualmente
El primero se centra en reconstruir la sintaxis, es decir, DSL, y Lisp/Scheme entra en esta categoría En los últimos años, el nuevo campeón Ruby también pertenece a esta escuela, e incluso existe el lenguaje REBOL, más avanzado pero relativamente especializado.
El segundo se centra en el cálculo y el envío en tiempo de compilación para lograr código automático para específicos. escenarios Seleccione optimización, las plantillas de C++ entran en esta categoría. Las macros de C tienen ambas, pero sus capacidades son relativamente débiles. Según he visto, el primero es más reconocido por los académicos, mientras que el segundo es más utilizado gracias a la influencia de C++.
En el trabajo real, tengo una actitud negativa hacia cualquier tipo de Metaprogramación. Creo que la metaprogramación destruye un principio básico en la comunicación: el mismo lenguaje de programación debe tener los mismos hábitos de comunicación. Construir el DSL de manera demasiado desordenada dificulta la comunicación entre programadores. Un ejemplo típico a este respecto es REBOL. Varias sintaxis DSL son obviamente diferentes y el costo de reaprendizaje es demasiado alto, lo que en realidad contribuye a la tendencia divisiva de la comunidad. Cuando no tienes nada que hacer, puedes simplemente jugar por diversión; si lo pones en práctica, dañarás a los demás y a ti mismo.
En cuanto a la MetaProgramación de la familia Lisp/Scheme, no es tanto que sea mejor, sino que la estructura gramatical es demasiado simple, haciendo que se vea igual sin importar cómo se transforme. . Con respecto a este punto, también puedes comparar REBOL. No hay muchas similitudes de sintaxis entre los distintos DSL que construye. Sin embargo, para mí, la sintaxis simple de Lisp/Scheme es en realidad lo que me gusta de Scheme: los diseñadores de compiladores pueden gastar más energía en el tiempo de ejecución y la optimización.