¿Alguien tiene alguna experiencia con el sistema de metaprogramación JetBrains? ¿MPS es mejor que, por ejemplo, desarrollar un DSL en Ruby?Sistema de metaprogramación JetBrains
Respuesta
No tengo ninguna experiencia personal con MPS, pero se mencionó en el episodio reciente de Herding Code with Markus Völter. Aquí está mi entendimiento. MPS es un editor de proyección, lo que significa que, en lugar de analizar y editar texto, está editando directamente la estructura de datos del idioma que se subraya. Como menciona Markus, MPS le permite definir su propio idioma, pero también puede introducir nuevos conceptos de lenguaje en los idiomas existentes. Por ejemplo, puede agregar una nueva palabra clave a Java en cuestión de minutos. MPS difumina las líneas entre las DSL internas y externas y, con esto, obtiene tipeo estático y soporte de herramientas que no obtendría al desarrollar una DSL con un lenguaje dinámico como Ruby.
MPS es una bestia interesante y tiene un gran potencial. La idea es simplemente fantástico:
- Dentro de un IDE (MPS) el usuario define más o menos a la vista de su DSL (s)
- el IDE permite generar no sólo el propio idioma (el tiempo de ejecución o lo que hace), pero también la "herramienta" también conocida como IDE más o menos completo, que él u otros usuarios pueden usar para editar ese nuevo idioma.
Dicho esto, por desgracia, al menos para las versiones actuales disponibles MPS, JetBrains no pudo entregar los anteriores (al menos para mí) porque: - es muy, muy difícil y complicado de usar - como si no lo haría han sido hechos por los autores del IntelliJ fácil de usar. - hay demasiados conceptos y "formas" que el usuario debe aprender antes de poder hacer algo útil, y aún así uno tiene la sensación de aprovechar la oscuridad. - IDE no generará un IDE para usted, sino también algo dentro de MPS, un "Editor basado en celda" solamente (a partir de esta versión).
Probé MPS varias veces (porque el concepto es tan maravilloso y prometedor), pero lamentablemente a partir de este momento no pude hacer algo útil con él. Podría ser estúpido para MPS, pero en el momento en que me acababa de dar cuenta básico sobre MPS, pude entregar DSL Groovy utilizable completamente soplado.
Todavía estoy siguiendo la evolución de MPS, y espero que algún día entregue lo que se prometió inicialmente, ya que es una idea tan fantástica.
Trabajo para JetBrains. Dirigí el proyecto MPS durante varios años, y ahora estoy trabajando en otro proyecto que también está completamente escrito en MPS. De acuerdo con mi experiencia, MPS vale la pena usar :-)
La respuesta a su pregunta depende de muchas cosas. Si tienes un sistema basado en Ruby o quieres crear un idioma rápidamente, la DSL interna basada en Ruby podría ser la mejor opción. Si desea generar Java y tener tiempo para aprender MPS, MPS podría ser el mejor caso. También puede considerar sistemas como XText, etc., que son intermedios entre las DSL basadas en Ruby y MPS.
Macros en el sistema común de objetos lisp CLOS puede alterar la sintaxis de manera bastante espectacular, MPS es bastante similar a ANTLR, pero viene con un editor gráfico. Sin embargo, MPS no aprecia la fragmentación del código más allá de la compilación y el tiempo de ejecución y, por lo tanto, tanto MPS como ANTLR se combinan en torno a problemas de metaprogramación estática. Aún no puede crear construcciones que aceptarán una cantidad arbitraria de argumentos de subconstrucciones como Monadics, por ejemplo; un generador de comprensión de lista que toma una cantidad arbitraria de filtros y generadores de listas. Para que esto sea posible, debes modificar el AST en bruto mediante programación. Lispers más experimentados probablemente puedan señalar otras transformaciones que no se pueden hacer.
Acepto que la documentación ha sido un problema para los principiantes al aprender MPS. Esto fue ciertamente cierto cuando se escribió la publicación anterior (2010). Habiendo experimentado esto de primera mano, y finalmente habiendo logrado comprender el sistema, escribí The MPS Language Workbench (volúmenes I y II) para ayudar a suavizar la curva de aprendizaje. Los comentarios que recibo de los lectores es que los libros son suficientes para ayudarlo a comenzar (Volumen I) y aprenden aspectos más avanzados de la plataforma MPS (Volumen II).
En relación con la respuesta a la pregunta original. Sí, creo que MPS tiene ventajas clave en comparación con el desarrollo de una DSL en Ruby o Groovy. La razón es que como diseñador idioma que
- tienen mucho mejor control sobre todos los aspectos de la lengua,
- Los idiomas que usted construye con MPS pueden incluir notaciones gráficas y elementos de interfaz de usuario, que ellos un híbrido entre hacen una interfaz de usuario y una secuencia de comandos/programa DSL de texto,
- MPS ayuda a migrar programas a medida que evoluciona su lenguaje (por ejemplo, la refacturación u otros cambios en el lenguaje pueden propagarse a los usuarios finales de los idiomas, utilizando un script/programa DSL automático migraciones).
Puede ver un buen ejemplo de DSL construido con MPS en el MetaR project.
- 1. Lenguajes de metaprogramación mecanografiados
- 2. Programación genérica v.s. Metaprogramación
- 3. ¿Qué es la metaprogramación?
- 4. Contando con metaprogramación de plantillas?
- 5. Ejemplos de metaprogramación en F #
- 6. Idioma para aprender la metaprogramación
- 7. Lista de métodos de metaprogramación de Ruby?
- 8. JetBrains RubyMine 3.2.4 depurador no funciona
- 9. Pros y contras: Jetbrains IntelliJ/Sublime Text
- 10. Mouse documentation mouse-over JetBrains PHPStorm 3.0
- 11. Tutorial en línea de metaprogramación de Ruby
- 12. ¿Este abuso de la metaprogramación de ruby?
- 13. evaluación de metaprogramación de la plantilla
- 14. Pregunta de metaprogramación Clojure (para un principiante)
- 15. Metaprogramación C/C++ utilizando el preprocesador
- 16. JetBrains WebIDE: tipo de variable de PHP indirecta?
- 17. Detección de problemas de CPU W3WP con jetBrains dotTrace
- 18. Plantilla Metaprogramación - Todavía no lo entiendo :(
- 19. ¿Es posible la metaprogramación estática en Java?
- 20. ¿Es posible la metaprogramación en Javascript?
- 21. ¿Qué bibliotecas de GUI están usando los jetbrains?
- 22. logback.xml y aplicación en ejecución de JetBrains IDEA IDE
- 23. ¿Dónde está la documentación de JetBrains IntelliJ openapi?
- 24. programmatically add property do ActionScript Object (metaprogramación)
- 25. ¿Necesito que Git use Github en JetBrains IntelliJ IDEA?
- 26. Rubí Metaprogramación: dinámica nombres de las variables de instancia
- 27. Metaprogramación de Python: genera automáticamente funciones de miembro
- 28. ¿Hay alternativas de metaprogramación en C++ además de plantillas?
- 29. ¿Hay algún catálogo de patrones de metaprogramación para Python?
- 30. detectando typedef en tiempo de compilación (metaprogramación de plantillas)