Wicca v2 demo

39
Wicca v2 demo Dynamic weaving using the .NET 2.0 Debugging APIs Marc Eaddy Columbia University C lasses

description

Wicca v2 demo. Dynamic weaving using the .NET 2.0 Debugging APIs. Marc Eaddy Columbia University. Wicca: A research platform. Experimenting with techniques for modularizing crosscutting concerns. Advanced separation of concerns (ASOC) First dynamic weaver based on .NET 2.0 Debugging APIs - PowerPoint PPT Presentation

Transcript of Wicca v2 demo

Wicca Demo

Wicca v2 demoDynamic weaving using the.NET 2.0 Debugging APIs

Marc EaddyColumbia University

1Wicca: A research platformAdvanced separation of concerns (ASOC)First dynamic weaver based on .NET 2.0 Debugging APIsNew breakpoint weaving techniqueNew metrics for measuring crosscuttingNovel language mechanismsStatement annotationsSide classesDynamic software updating

2AOSD 2007Experimenting with techniques for modularizing crosscutting concerns Marc Eaddy Columbia University2Wicca: A research platformAdvanced separation of concerns (ASOC)First dynamic weaver based on .NET 2.0 Debugging APIsNew breakpoint weaving techniqueNew metrics for measuring crosscuttingNovel language mechanismsStatement annotationsSide classesDynamic software updating

3AOSD 2007Experimenting with techniques for modularizing crosscutting concerns Marc Eaddy Columbia University3Wicca supports multiple weaving strategiesInvasiveNoninvasiveByte codeBreakpointStaticCompile timeNADynamicLoad timeRuntime4AOSD 2007 Marc Eaddy Columbia University4Wicca transformation pipeline5AOSD 2007CompilerPost-LinkWeaverDeltasAspectAssembliesCompiledProgramSourceFilesWovenProgramBreakPointsFrontendBackend Marc Eaddy Columbia University5Phx.MorphWiccas backend.NET byte code and breakpoint weaverBuilt using Microsoft PhoenixSupports .NET 1.0, 1.1, and 2.0Demoed at AOSD 2006New: Dynamic weaving, breakpoint weaving, statement annotation support

6AOSD 2007 Marc Eaddy Columbia University6Demo setup: Simple DrawSimpleDraw draws Shapes on a DisplayNave implementation couples Shape and Display concernspublic 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.cspublic 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.csLine.cs7AOSD 2007 Marc Eaddy Columbia University7Demo setup: Simple DrawSimpleDraw draws Shapes on a DisplayNave implementation couples Shape and Display concernspublic 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.cspublic 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.csLine.csCrosscutting8AOSD 2007 Marc Eaddy Columbia University8Demo 1: Static byte code weavingAOSD 20079C#CompilerPhx.MorphDeltasAspectAssembliesCompiledProgramC#FilesWovenProgramBreakPoints Marc Eaddy Columbia University9Dynamic weaving.NET 2.0 Debugging APIsEdit-and-Continue APIReplaces the .NET 1.1 Profiler APIDynamic AOPEdit-and-ContinuePatchingBreakpoint API Noninvasive advisingFuncEval API In-process advice executionIntended for debugging, not dynamic AOPMicrosoft Managed DebuggerHosts Wicca plug-inHosts client program in separate processCommand-line shell for weaving commands10AOSD 2007

Marc Eaddy Columbia University10Demo 2: Dynamic byte code weavingUsing .NET 2.0 Edit-and-Continue API

11AOSD 2007C#CompilerPhx.MorphAspectAssembliesCompiledProgramC#FilesDeltasWovenProgramBreakPoints Marc Eaddy Columbia University11Demo 3: Dynamic bp weavingNoninvasive advising via Breakpoint APIIn-process advice execution via FuncEval API12AOSD 2007Phx.MorphAspectAssembliesCompiledProgramC#FilesBreakPointsWovenProgramDeltasC#Compiler Marc Eaddy Columbia University12Wiccas frontendWicca# compilerExtends C# to supportStatement annotationsSide classesGoalActually modularize crosscutting concerns (without sacrificing other modularity properties)Wicca# language

13AOSD 2007 Marc Eaddy Columbia University13Statement annotationsFine-grained advisingStatement-level advising (more elegant than dummy methods)Declarative instance-level advisingOther possibilitiesOptimization and parallelization hintsContractsAvoiding reweavingFault isolationOblivious debuggingStatement Annotations for Fine-Grained Advising, RAM-SE 2006

Allows any program statement to be annotated//[Concern("Input")]inputMapper.Update(elapsedTime);14AOSD 2007 Marc Eaddy Columbia University14Quantifying crosscuttingIdentifying, Assigning, and Quantifying Crosscutting Concerns, ACOM 2007Display updating in SimpleDrawDegree of scattering: Scattering visualization (ala SeeSoft):0.9215AOSD 2007

Marc Eaddy Columbia University15Demo 4: Concern profilingStatement annotation-based advising16AOSD 2007Wicca#CompilerCompiledProgramWicca#SourceFilesPhx.MorphAspectAssembliesWovenProgramDeltasBreakPoints Marc Eaddy Columbia University16Side classesPowerful and disciplined class extension17AOSD 2007 Marc Eaddy Columbia University17Expression problem revisitedNeed to parse simple expression languagee.g., 3 + 4Expressions: Literal, AddOperations: evalExtensibility goalsEasily add new expressionsEasily add new operationsCannot do both easily18AOSD 2007P. Tarr, H. Ossher, W. Harrison, and S. Sutton Jr., "N Degrees of Separation: Multi-Dimensional Separation of Concerns," ICSE 1999M. Torgersen, "The Expression Problem Revisited," ECOOP 2004Easy in OOEasy in FP Marc Eaddy Columbia University18abstract 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 OO19AOSD 2007Concern: Add printingOperations are crosscutting! Marc Eaddy Columbia University19abstract class PrintingExpr : Expression {abstract void print();}

class PrintingAdd : Add {public void print() { Console.WriteLine(left + + + right); }}

Add printing using subclassing20AOSD 2007InvasiveInflexible Marc Eaddy Columbia University20abstract class PrintingExpr + Expression {abstract void print();}

class PrintingAdd + Add {public void print() { Console.WriteLine(left + + + right); }}

Printing the side class way21AOSD 2007Modularizes the printing concernSide class implicitly extends base classClients (or other sub/side classess) obliviousSide class compositionoperator

Marc Eaddy Columbia University21CachingConcern: Cache expression evaluationInvalidate cache when expression changesAOSD 200722 Marc Eaddy Columbia Universityinterface 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 eval23AOSD 2007 Marc Eaddy Columbia University23interface 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 eval24AOSD 2007Memberintertype declarationsInterfaceintertype declaration Marc Eaddy Columbia University24class 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)25AOSD 2007 Marc Eaddy Columbia University25class 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)26AOSD 2007Call next delegate(i.e., proceed) Marc Eaddy Columbia University26Side 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();}}}27AOSD 2007 Marc Eaddy Columbia University27Side 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();}}}28AOSD 2007Override virtual field Marc Eaddy Columbia University28Side class: Caching eval (4)override Expression [$which = left | right] {set { base.$which = value; this.$which.observer = this; this.onChange();}}29AOSD 2007MetavariableLimited quantification Marc Eaddy Columbia University29class 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 extension30AOSD 2007 Marc Eaddy Columbia University30Addresses needs of existing mechanismsSubclassesInflexible compositionOnly extend one base classOnly extend instance methodsRequires invasive changes in clientsOpen classes/refinements/mixinsNeed for composition orderingNeed for constructor and static member overridingAspectsLack of modular reasoningPoor integration with existing OO semantics and notationNeed for symmetric modelMatching wrong join pointsAOSD 200731 Marc Eaddy Columbia UniversityConclusions32AOSD 2007

Wicca#sideClasses@Statement Marc Eaddy Columbia University32AcknowledgementsMicrosoft Phoenix TeamWicca developersBoriana DitchevaRajesh RamakrishnanAdam Vartanian33AOSD 2007 Marc Eaddy Columbia University33Thank you!34AOSD 2007 Marc Eaddy Columbia University34Phx.Morph architecturePhx.MorphEditorsOpen Classes, binary and breakpoint weavingPhoenix-specific AOPAttribute HandlersPhoenixPEREWAssemblyRe-WriterPhx.AopAOPJoinpoints, pointcuts, AttributesCustom AOP annotations.NETMorphPlugin

35AOSD 2007 Marc Eaddy Columbia University35

Wicca architecture36AOSD 2007Copyright Marc Eaddy36

Phx.MorphWicca #CompilerWicca#CompilerWicca architecture37AOSD 2007Copyright Marc Eaddy37public OnDraw() {//[Note("Creating a line")]line = new Line();38AOSD 2007Legalizing statement annotations Marc Eaddy Columbia University38public OnDraw() {//[Note("Creating a line")]line = new Line();[Statement(9, "Note", "Creating a line")]public OnDraw() {line = new Line();Legalizing statement annotationsLegalize39AOSD 2007 Marc Eaddy Columbia University39Data

VM

Compiler

Front-end

VM

BuildInfo

C#

C#

App

Preprocessor

Source Weaver

Binary Weaver

a

b

Breakpoint Weaver

ICorDbgCallback

DebuggerHost

ICorDbg

Projects

Assemblies

Assemblies

Wicca

Hosted App

Assemblies

Assemblies

App

Weaving

IL + MD Deltas

Joinpoint Breakpoints

Data

VM

Compiler

Front-end

VM

BuildInfo

C#

C#

App

Preprocessor

Source Weaver

Binary Weaver

a

b

Breakpoint Weaver

ICorDbgCallback

DebuggerHost

ICorDbg

Projects

Assemblies

Assemblies

Wicca

Hosted App

Assemblies

Assemblies

App

Weaving

IL + MD Deltas

Joinpoint Breakpoints