Download presentation
Presentation is loading. Please wait.
Published byAlycia Bollom Modified over 9 years ago
1
Wicca v2 demo Dynamic weaving using the.NET 2.0 Debugging APIs Marc Eaddy Columbia University
2
Marc Eaddy – Columbia University Wicca: A research platform Advanced separation of concerns (ASOC) ◦ First dynamic weaver based on.NET 2.0 Debugging APIs ◦ New breakpoint weaving technique ◦ New metrics for measuring crosscutting Novel language mechanisms ◦ Statement annotations ◦ Side classes Dynamic software updating 2 AOSD 2007 Experimenting with techniques for modularizing crosscutting concerns
3
Marc Eaddy – Columbia University Wicca: A research platform 3 AOSD 2007 Experimenting with techniques for modularizing crosscutting concerns
4
Marc Eaddy – Columbia University Wicca supports multiple weaving strategies 4 AOSD 2007
5
Marc Eaddy – Columbia University Wicca transformation pipeline 5 AOSD 2007 Compiler Post-Link Weaver Post-Link Weaver Deltas Aspect Assemblies Aspect Assemblies Compiled Program Compiled Program Source Files Source Files Woven Program Break Points Break Points
6
Marc Eaddy – Columbia University Phx.Morph 6 AOSD 2007
7
Marc Eaddy – Columbia University Demo setup: Simple Draw SimpleDraw draws Shapes on a Display Naïve implementation couples Shape and Display concerns public init() { s = new Shape[3]; s[0] = new Point(10, 10); s[1] = new Point(5, 5); s[2] = new Line(new Point(1, 9), new Point(9, 1)); for (int i = 0; i < s.Length; i++) Display.instance().addShape(s[i]); Display.instance().update(); SimpleDraw.cs public void moveBy(int dx, int dy) { x += dx; y += dy; Display.instance().update(); public void moveBy(int dx, int dy) { a.moveBy(dx, dy); b.moveBy(dx, dy); Display.instance().update(); Point.cs Line.cs 7 AOSD 2007
8
Marc Eaddy – Columbia University Demo setup: Simple Draw SimpleDraw draws Shapes on a Display Naïve implementation couples Shape and Display concerns public init() { s = new Shape[3]; s[0] = new Point(10, 10); s[1] = new Point(5, 5); s[2] = new Line(new Point(1, 9), new Point(9, 1)); for (int i = 0; i < s.Length; i++) Display.instance().addShape(s[i]); Display.instance().update(); SimpleDraw.cs public void moveBy(int dx, int dy) { x += dx; y += dy; Display.instance().update(); public void moveBy(int dx, int dy) { a.moveBy(dx, dy); b.moveBy(dx, dy); Display.instance().update(); Point.cs Line.cs 8 AOSD 2007
9
Marc Eaddy – Columbia University Demo 1: Static byte code weaving AOSD 2007 9 C# Compiler C# Compiler Phx.Morph Deltas Aspect Assemblies Aspect Assemblies Compiled Program Compiled Program C# Files C# Files Woven Program Break Points
10
Marc Eaddy – Columbia University Dynamic weaving.NET 2.0 Debugging APIs ◦ Edit-and-Continue API Replaces the.NET 1.1 Profiler API Dynamic AOP Edit-and-Continue Patching ◦ Breakpoint API – Noninvasive advising ◦ FuncEval API – In-process advice execution ◦ Intended for debugging, not dynamic AOP Microsoft Managed Debugger ◦ Hosts Wicca plug-in ◦ Hosts client program in separate process ◦ Command-line shell for weaving commands 10 AOSD 2007
11
Marc Eaddy – Columbia University Demo 2: Dynamic byte code weaving Using.NET 2.0 Edit-and-Continue API 11 AOSD 2007 C# Compiler C# Compiler Phx.Morph Aspect Assemblies Aspect Assemblies Compiled Program Compiled Program C# Files C# Files Deltas Woven Program Break Points
12
Marc Eaddy – Columbia University Demo 3: Dynamic bp weaving Noninvasive advising via Breakpoint API In-process advice execution via FuncEval API 12 AOSD 2007 Phx.Morph Aspect Assemblies Aspect Assemblies Compiled Program Compiled Program C# Files C# Files Break Points Break Points Woven Program Deltas C# Compiler C# Compiler
13
Marc Eaddy – Columbia University Wicca’s frontend ◦ Wicca# compiler Extends C# to support ◦ Statement annotations ◦ Side classes Goal ◦ Actually “modularize” crosscutting concerns (without sacrificing other modularity properties) Wicca# language 13 AOSD 2007
14
Marc Eaddy – Columbia University Statement annotations Fine-grained advising ◦ Statement-level advising (more elegant than dummy methods) ◦ Declarative instance-level advising Other possibilities ◦ Optimization and parallelization hints ◦ Contracts ◦ Avoiding reweaving ◦ Fault isolation ◦ Oblivious debugging “Statement Annotations for Fine-Grained Advising”, RAM-SE 2006 Allows any program statement to be annotated //[Concern("Input")] inputMapper.Update(elapsedTime); 14 AOSD 2007
15
Marc Eaddy – Columbia University Quantifying crosscutting “Identifying, Assigning, and Quantifying Crosscutting Concerns”, ACOM 2007 Display updating in SimpleDraw ◦ Degree of scattering: ◦ Scattering visualization (ala SeeSoft): 15 AOSD 2007
16
Marc Eaddy – Columbia University Demo 4: Concern profiling Statement annotation-based advising 16 AOSD 2007 Wicca# Compiler Wicca# Compiler Compiled Program Compiled Program Wicca# Source Files Wicca# Source Files Phx.Morph Aspect Assemblies Aspect Assemblies Woven Program Deltas Break Points
17
Marc Eaddy – Columbia University Side classes Powerful and disciplined class extension Powerful Combines subclasses, aspects, open classes, and refinements Unified subclass-like notation and semantics (similar to Eos) Virtual fields, constructors, and static members Multiple base classes can be extended simultaneously Extension order is arbitrary or explicit Disciplined Extensions must be explicitly allowed Honors access restrictions (public, private, virtual, …) Limits quantification 17 AOSD 2007
18
Marc Eaddy – Columbia University Expression problem revisited Need to parse simple expression language e.g., 3 + 4 Expressions: Literal, Add Operations: eval Extensibility goals Easily add new expressions Easily add new operations Cannot do both easily 18 AOSD 2007 P. Tarr, H. Ossher, W. Harrison, and S. Sutton Jr., "N Degrees of Separation: Multi-Dimensional Separation of Concerns," ICSE 1999 M. Torgersen, "The Expression Problem Revisited," ECOOP 2004
19
Marc Eaddy – Columbia University abstract class Expression { abstract int eval(); } class Add : Expression { public Expression left, right; public Add(Expression left, Expression right) { this.left = left; this.right = right; } public int eval() { return left.eval() + right.eval(); } } Parser implementation in OO 19 AOSD 2007 Concern: Add printing Operations are crosscutting!
20
Marc Eaddy – Columbia University abstract class PrintingExpr : Expression { abstract void print(); } class PrintingAdd : Add { public void print() { Console.WriteLine(left + “+” + right); } Add printing using subclassing 20 AOSD 2007 Invasive Inflexible
21
Marc Eaddy – Columbia University abstract class PrintingExpr + Expression { abstract void print(); } class PrintingAdd + Add { public void print() { Console.WriteLine(left + “+” + right); } Printing the side class way 21 AOSD 2007 Modularizes the printing concern Side class implicitly extends base class Clients (or other sub/side classess) oblivious
22
Marc Eaddy – Columbia University Caching Concern: Cache expression evaluation Invalidate cache when expression changes AOSD 2007 22
23
Marc Eaddy – Columbia University interface IObserver { void onChange(); } class CachableExpr + Expression : IObserver { protected IObserver observer = null; protected int cache; protected bool isCacheValid = false; void onChanged() { isCacheValid = false; if (observer != null) observer.onChanged(); } Side class: Caching eval 23 AOSD 2007
24
Marc Eaddy – Columbia University interface IObserver { void onChange(); } class CachableExpr + Expression : IObserver { protected IObserver observer = null; protected int cache; protected bool isCacheValid = false; void onChanged() { isCacheValid = false; if (observer != null) observer.onChanged(); } Side class: Caching eval 24 AOSD 2007
25
Marc Eaddy – Columbia University class CachableAdd + Add { public Add(Expression left, Expression right) { base(left, right); this.left.observer = this; this.right.observer = this; } override public int eval() { if (!isCacheValid) { cache = base.eval(); isCacheValid = true; } return cache; } Side class: Caching eval (2) 25 AOSD 2007
26
Marc Eaddy – Columbia University class CachableAdd + Add { public Add(Expression left, Expression right) { base(left, right); this.left.observer = this; this.right.observer = this; } override public int eval() { if (!isCacheValid) { cache = base.eval(); isCacheValid = true; } return cache; } Side class: Caching eval (2) 26 AOSD 2007
27
Marc Eaddy – Columbia University Side class: Caching eval (3) override Expression left { set { base.left = value; this.left.observer = this; this.onChange(); } override Expression right { set { base.right = value; this.right.observer = this; this.onChange(); } 27 AOSD 2007
28
Marc Eaddy – Columbia University Side class: Caching eval (3) override Expression left { set { base.left = value; this.left.observer = this; this.onChange(); } override Expression right { set { base.right = value; this.right.observer = this; this.onChange(); } 28 AOSD 2007
29
Marc Eaddy – Columbia University Side class: Caching eval (4) override Expression [$which = left | right] { set { base.$which = value; this.$which.observer = this; this.onChange(); } 29 AOSD 2007
30
Marc Eaddy – Columbia University class Add : Expression { public virtual Expression left, right; public Add(Expression left, Expression right) { this.left = left; this.right = right; } public virtual int eval() {return left.eval() + right.eval();} } Base class must allow extension 30 AOSD 2007
31
Marc Eaddy – Columbia University Addresses needs of existing mechanisms Subclasses ◦ Inflexible composition ◦ Only extend one base class ◦ Only extend instance methods ◦ Requires invasive changes in clients Open classes/refinements/mixins ◦ Need for composition ordering ◦ Need for constructor and static member overriding Aspects ◦ Lack of modular reasoning ◦ Poor integration with existing OO semantics and notation ◦ Need for symmetric model ◦ Matching wrong join points AOSD 2007 31
32
Marc Eaddy – Columbia University Conclusions Wicca is for experimenting with ASOC Side classes unifies aspects and subclasses to better modularize concerns 32 AOSD 2007
33
Marc Eaddy – Columbia University Acknowledgements Microsoft Phoenix Team Wicca developers ◦ Boriana Ditcheva ◦ Rajesh Ramakrishnan ◦ Adam Vartanian 33 AOSD 2007
34
Marc Eaddy – Columbia University Thank you! 34 AOSD 2007
35
Marc Eaddy – Columbia University Phx.Morph architecture Phx.Morph Editors Open Classes, binary and breakpoint weaving Phoenix-specific AOP Attribute Handlers Phoenix PEREW Assembly Re-Writer Phx.Aop AOP Joinpoints, pointcuts, … Attributes Custom AOP annotations.NET Morph Plugin 35 AOSD 2007
36
Copyright © Marc Eaddy Wicca architecture 36AOSD 2007
37
Copyright © Marc Eaddy Phx.Morph Wicca # Compiler Wicca# Compiler Wicca architecture 37AOSD 2007
38
Marc Eaddy – Columbia University38 AOSD 2007 Legalizing statement annotations
39
Marc Eaddy – Columbia University Legalizing statement annotations 39 AOSD 2007
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.