name suggestions: * x modules: actually, what about **X-Modules**? (ie. "crosscutting modules", nice mix between XPI and Open Modules) * aspectual modules: already (rarely) used * aspect(ual) shells * aspect(ual) capsules ---- * [[research:mao:iiia-examples|IIIA Examples / problems]] * [[research:mao:advice-dispatch|Advice dispatch]] * [[research:mao:subtyping|Subtyping considerations]] * [[research:mao:two-signatures|Extended JPI signatures as in StrongAspectJ]] * [[research:mao:invariant-pcd|Invariant Pointcut Designators]] * [[research:mao:overloading|JPI overloading]] * [[research:mao:parametric-polymorphism|Extending JPI with parametric polymorphism]] * [[research:mao:extended-signatures|Extending JPI Signatures]] ---- ====== General Design Principles/Decisions ====== Following Ungar's grid of Values - Principles - Practices * values (what you care about, what you want, what you like) * teamwork * reuse * change * simplicity * design principles (general rules for achieving values) * uniformity/symmetry (S) * separate development, separate compilation (TC) * loose coupling (RC) * modular reasoning (TRC) * make it hard to shoot yourself in the foot / avoid surprises (S) [loops, double jps] * support for shared libraries (R) * coarse-grained quantification (S) * abstraction (TRCS) * specific practices (specific things to do) * modules encompassing classes/packages (cgq, sdsc, mr, lc, ssl) * modules can both advise and exhibit (us) * join point types (as, mr, lc, sdsc) * functional join point types (no structs) (as) * explicit declaration of exhibited jpts (as) * join point subtypes (a) * explicit join points / block jps (a, as) * "potentially-exhibit" declarations (shl) * compile-time checks for potential loops (as) * execution levels / or notion of cflow based on use-relation (as) ---- ====== Examples ====== * [[research:mao:iiia-examples-fixed|fixed versions of IIIA buggy examples]] * translate good examples from IIIA, closure jp paper, PPPJ explicit jp paper, open modules paper(s), XPI paper * [[research:mao:new-things|new things we can do]] that they can't (dynamic analysis aspects -- wide scope, etc.) * case study: * Racer / Profiler * AJHotDraw * Berkeley DB * AspectOptima * HealthWatcher * iBatis * MobileMedia ====== Pending ====== * TODO: each class contained in only one module? Java8: different namespaces/loaders, incompatible * Study the Java8 proposal (link?) * explicit declaration of used modules (sdsc, lc) [removed?!] * references: XPIs, Open Modules, ECeasarJ/EScala ====== Paper outline ====== modular reasoning / implicit invocation / AOP * motivation from IIIA * overview of IIIA and limitations/problems * overview of X-Modules (model, boxes and arrows) * X-Modules in practice: addressing IIIA issues * implementation: AspectJ extended / abc, implementation details, separate compilation, checks, etc. * case study * related work