Primero - No creo que esté de acuerdo con su afirmación de que "la metaprogramación es el 'futuro de la codificación'". Es una gran herramienta, pero no a todos les gusta (por ejemplo, los diseñadores de Java dejaron las macros fuera del lenguaje intencionalmente, no es que me guste Java, pero las personas do tienen motivos para oponerse a la metaprogramación).
De todos modos ... Puedo pensar en dos maneras diferentes de hacer metaprogramación: en el nivel sintáctico y en el tiempo de ejecución.
Para la metaprogramación de sintaxis, creo que Scheme es una buena opción (si no hubieras mencionado la simplicidad, te sugiero Common Lisp). Para la metaprogramación en tiempo de ejecución Supongo que tanto Prolog como Smalltalk son muy muy interesantes. (Puede agregar, cambiar y eliminar hechos en una base de datos Prolog sobre la marcha, y puede cambiar objetos Smalltalk sobre la marcha). Probablemente también puedas hacer metaprogramación en tiempo de ejecución en Ruby, pero no conozco a Ruby.
Por lo tanto, hay diferentes métodos de metaprogramación en Scheme (diferentes sistemas de macros). Le sugiero que eche un vistazo a un libro de Scheme básico y luego lea sobre dos macro sistemas diferentes.
Algunos buenos libros: Esquema
implementaciones de Scheme son muy diferentes entre sí, por lo que también va a utilizar el manual de aplicación Esquema de una mucho también
Algunos lugares para aprender acerca de las macros de Scheme:
Si decide utilizar un lenguaje que es más grande y más desordenado que el esquema, tratar de Common Lisp . Hay tres libros que sugeriría:
- Primero, "Practical Common Lisp" por Peter seibel.Eso te permitirá comenzar con Common Lisp y macros;
- Segundo, "On Lisp" por Paul Graham. Luego aprenderá que las macros son más poderosas de lo que había pensado antes, y aprenderá técnicas realmente agradables;
- En tercer lugar, "Let Over Lambda" por Doug Hoyte. Un libro avanzado, mejor leído después de Graham's On Lisp.
Por Prolog, se puede leer "La programación en Prolog" por Clocksin y Mellish (obtener la última edición!) Y luego pasar a "Programación Prolog en Profundidad", de Covington, Vellino y Nute. Consulte el capítulo 6.
Hay muchos buenos libros de Smalltalk. Me gusta "El arte y la ciencia de Smalltalk" por Simon Lewis. También hay un muy buen free tutorial/primer by Canol Gokel sobre Smalltalk (pero no llega tan lejos como para enseñar metaprogramación).
Puede que quieras hacer de esta una pregunta wiki comunitaria para evitar el cierre sobre la base subjetiva y argumentativa . –
Ahora es wiki de la comunidad. – Erup
+1 Buena pregunta. Es una lástima que esto fue cerrado porque hay mucho que decir sobre el tema. Lisp (1960) es la madre de todos los lenguajes de metaprogramación. Scheme es un Lisp fácil de aprender. La familia de lenguajes MetaLanguage (ML, 1970) se diseñó específicamente para la metaprogramación y los derivados modernos (OCaml, Haskell, F #) tienen un gran respaldo. Consulte los idiomas que le permiten orientar sus VM como .NET pero también LLVM. Las expresiones regulares son un ejemplo práctico convincente de la utilidad de la metaprogramación. –