Red de conocimiento informático - Aprendizaje de programación - ¿Qué problemas resuelve principalmente la metaprogramación?

¿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.