Ejemplo de fusión de bucle usando un marco orientado a aspectos

7

Recientemente había leído un documento 'Programación orientada a aspectos 'por Gregor Kiczales y otros , y encontramos el ejemplo de bucle de fusión .

Aquí hay una definición de la fusión de bucle del documento

  

... la fusión de bucles se compone al fusionar los bucles de esos primitivos   Filtros que tienen la misma estructura de bucle y que son directos.   Vecinos en el gráfico de flujo de datos. Cada una de estas reglas de composición es   Fácil de entender cuando se mira su propia imagen apropiada. Pero   Las dos relaciones de composición se cortan tan fundamentalmente.   que cada uno es muy difícil de ver en la imagen del otro.

Más adelante en el documento loop fusion mencionado para implementarse utilizando el protocolo de metaobjetos en Lisp:

  

... el aspecto de fusión de bucle ... se puede implementar, con cierto grado de   Eficiencia, utilizando el método de combinación de métodos en el CLOS.   protocolo de metaobjetos

¿Qué aspecto tiene loop fusion al usar cualquier framework moderno orientado a aspectos en lenguajes estáticos o dinámicos? Estoy buscando ejemplos de lenguaje de aspecto y consejos que podrían hacer loop fusion .

Estado para mediados de enero'13

Mientras no haya ninguna otra respuesta, he marcado mi propia respuesta como una respuesta. De todos modos todavía estoy esperando ejemplos de otros lenguajes / marcos.

ps : fusión de bucle en foro" AOP in .NET "en el foro @manning

    
pregunta Akim 02.01.2013 - 16:34

1 respuesta

2

Después del lanzamiento del artículo inicial, Gregor Kiczales comenzó el proyecto AspectJ para implementar una idea de programación orientada a Aspectos. Recientemente encontré una explicación de por qué no hay "fusión de bucle" disponible en "AspectJ in Action" por Ramnivas Laddad :

  

Además, los siguientes son todos los puntos de unión: un objeto   construcción, una verificación condicional, una comparación, un controlador de excepciones,   e incluso para, mientras, y hacer / mientras bucles . No todas las uniones   Los puntos en un sistema están disponibles para su uso. … A fin de evitar   Implementación dependiente o inestable de corte transversal, AspectJ   deliberadamente expone solo un subconjunto de todos los puntos de unión posibles en   el sistema . AspectJ, por ejemplo, no se expone para los bucles porque   puede cambiar fácilmente un bucle for a un bucle while que funciona en el   Misma manera. Si se hiciera tal cambio, todos los consejos para   el punto de unión para el bucle for ya no sería válido ya que la   el bucle ya no existiría .

Otro punto que encontré en la entrevista con Gael Fraiteur en PostSharp :

  

Algunas personas diferentes recomiendan AOP también para requisitos funcionales   Y yo ... muy invasiva en sus aspectos. Usando PostSharp, usted es   obligó a a diseñar aspectos para que los aspectos no conozcan su objetivo   código . No saben cómo las variables ... así que presta atención a no   mal uso de PostSharp, para no usar AOP, y respetar también la ingeniería   principios, respeto de la separación de preocupaciones, y en el ecosistema de Java   Es un concepto mucho, mucho más largo y tienen mucha práctica con   y los usuarios tienen la sensación de que es más difícil de programar   con aspecto porque tiene que conocer el código objetivo . Tienen que   conocer la implementación del método de destino y así sucesivamente. Método objetivo tiene   Para saber se verán afectados. Creo que este es un diseño muy malo, y   cuando planea usar AOP, recomiendo diseñar su código base y   sus códigos AOP para que no se conozcan entre sí . Es realmente   Es importante no enojarse completamente con un pequeño cambio.

Parece que no hay "fusión de bucle" ni en AspectJ ni en PostSharp, y Dynamic Proxy, por definición, no podría proporcionar este tipo de funcionalidad también

    
respondido por el Akim 08.01.2013 - 11:56

Lea otras preguntas en las etiquetas