weaving generic programming and traversal performance
play

Weaving Generic Programming and Traversal Performance Bryan - PowerPoint PPT Presentation

Weaving Generic Programming and Traversal Performance Bryan Chadwick and Karl Lieberherr AOSD 10 March 17 th 2010 1 The Problem We write programs with... Rich, mutually recursive datatypes Possibly shifting/changing structures What


  1. Weaving Generic Programming and Traversal Performance Bryan Chadwick and Karl Lieberherr AOSD ’10 March 17 th 2010 1

  2. The Problem We write programs with... ❼ Rich, mutually recursive datatypes ❼ Possibly shifting/changing structures What we want to accomplish? Make it easier to... ❼ Write complex functions over structures ❼ Safely reuse for different structures Main Goals: Flexibility, reuse, and performance 2

  3. The Problem: Concretely Complex structures: AST Exp = If | Bin | Num | /* ... */. If = < cnd > Exp < thn > Exp < els > Exp. Bin = < left > Exp < op > Oper < right > Exp. Num = < val > int. /* ... */ Complex function: Simplify ❼ Walk an instance and replace statically computable expressions with constants “(5 + 7)” → “12” 3

  4. Our Solution: A New Approach, TBGP Traversal-based generic programming ❼ Separate traversal ❼ Modularize interesting code (Function-classes) ❼ Put together using asymmetric multiple-dispatch ❼ Function extension = inheritance Our Contributions ❼ Implementation: DemeterF ❼ Powerful, generic base function-classes ❼ Safety and weaving → performance Gives us: Flexibility, reuse, performance 4

  5. Related Work Visitors Palsberg and Jay [1998], VanDrunen and Palsberg [2004], Krish- namurthi et al. [1998], Oliveira [2009] Multi-Dispatch Clifton et al. [2000], Chambers [1992], Chen and Turau [1995] Gen. Prog. Gibbons [2007], Meijer et al. [1991], Sheard and Fegaras [1993], Jansson and Jeuring [1997], L¨ ammel and Peyton Jones [2003] AP/Generation Lieberherr et al. [2004], Orleans [2002], Orleans and Lieberherr [2001], JavaCC [2010], ANTLR [2010] Others Model-Driven Development (OMG), Event-based/Implicit Invoca- tion (Sullivan and Notkin [1992], Rajan and Leavens [2008]), 5

  6. Outline 1 Traversal-based generic programming Introduction Details 2 Generic base function-classes Building useful functions 3 Weaving traversals and functions Traversal generation and inlining 4 Performance results 6

  7. What is Traversal-based generic programming? Our view of AOP ❼ Base program execution generates events ( join points ) - Events are triggered by method call/return - Aspects attach advice to these events ❼ Pointcuts select sets of events and bind context ❼ Advice computes with context and state 7

  8. What is Traversal-based generic programming? AOP view of TBGP ❼ Base program is depth-first traversal - Events are triggered by traversal completion - Our aspects are function-objects (with combine methods) ❼ Method signatures select events and bind context ❼ Method bodies compute with context (recursive results) Advice chosen based on the dynamic type of recursive results 8

  9. TBGP Example: Pictures Pict = Overlay | Offset Pict top | Circle | Square. bot inner Overlay = < top > Pict < bot > Pict. Offset = < dx > int < dy > int Overlay Offset Circle Square < inner > Pict. rad dx dy size Circle = < rad > int. Square = < size > int. int 9

  10. TBGP Example: Pictures ( ToString ) Pict top class ToString extends ID { bot inner String combine(Circle c, int rad) { return ”Circle(”+rad+”)”; } Overlay Offset Circle Square String combine(Overlay o, String top, String bot) rad dx dy size { return ”Overlay(”+top+”,”+bot+”)”; } /* ... */ int String toString(Pict p) { return new Traversal(this). < String > traverse(p); } } * combine methods are like pointcuts and advice * Adaptive depth-first traversal 10

  11. TBGP Example: Pictures ( ToString ) Pict top class ToString extends ID { bot inner String combine(Circle c, int rad) { return ”Circle(”+rad+”)”; } Overlay Offset Circle Square String combine(Overlay o, String top, String bot) rad dx dy size { return ”Overlay(”+top+”,”+bot+”)”; } /* ... */ int String toString(Pict p) { return new Traversal(this). < String > traverse(p); } } * combine methods are like pointcuts and advice * Adaptive depth-first traversal 10

  12. TBGP Example: Execution cl ass T oString extends ID{ String combine( Overlay o, String top , String bot ) { return ” Overlay( ”+top+” ,”+bot+” ) ” ; } String combine( Offset o, int dx , int dy , String inner ) { return ” Offset ( ”+dx+” ,”+dy+” ,”+inner+” ) ” ; } String combine( Ci rcl e c , int rad) { return ” Ci rcl e( ”+rad+” ) ” ; } String combine( Square s , int si ze) { return ” Square( ”+si ze+” ) ” ; } Overlay } /* Provided by DemeterF */ Offset Offset cl ass ID{ int combine( int i ) { return i ; } /* ... */ } -30 -10 Square 30 10 Circle 50 25 11

  13. TBGP Example: Execution cl ass T oString extends ID{ String combine( Overlay o, String top , String bot ) { return ” Overlay( ”+top+” ,”+bot+” ) ” ; } String combine( Offset o, int dx , int dy , String inner ) { return ” Offset ( ”+dx+” ,”+dy+” ,”+inner+” ) ” ; } String combine( Ci rcl e c , int rad) { return ” Ci rcl e( ”+rad+” ) ” ; } String combine( Square s , int si ze) { return ” Square( ”+si ze+” ) ” ; } Overlay } /* Provided by DemeterF */ Offset Offset cl ass ID{ int combine( int i ) { return i ; } /* ... */ } -30 -10 Square 30 10 Circle 50 25 11

  14. TBGP Example: Execution cl ass T oString extends ID{ String combine( Overlay o, String top , String bot ) { return ” Overlay( ”+top+” ,”+bot+” ) ” ; } String combine( Offset o, int dx , int dy , String inner ) { return ” Offset ( ”+dx+” ,”+dy+” ,”+inner+” ) ” ; } String combine( Ci rcl e c , int rad) { return ” Ci rcl e( ”+rad+” ) ” ; } String combine( Square s , int si ze) { return ” Square( ”+si ze+” ) ” ; } Overlay } /* Provided by DemeterF */ Offset Offset cl ass ID{ int combine( int i ) { return i ; } /* ... */ } -30 -10 Square 30 10 Circle 50 25 11

  15. TBGP Example: Execution cl ass T oString extends ID{ String combine( Overlay o, String top , String bot ) { return ” Overlay( ”+top+” ,”+bot+” ) ” ; } String combine( Offset o, int dx , int dy , String inner ) { return ” Offset ( ”+dx+” ,”+dy+” ,”+inner+” ) ” ; } String combine( Ci rcl e c , int rad) { return ” Ci rcl e( ”+rad+” ) ” ; } String combine( Square s , int si ze) { return ” Square( ”+si ze+” ) ” ; } Overlay } /* Provided by DemeterF */ Offset Offset cl ass ID{ int combine( int i ) { return i ; } /* ... */ } -30 -10 "..." 30 10 Circle 25 11

  16. TBGP Example: Execution cl ass T oString extends ID{ String combine( Overlay o, String top , String bot ) { return ” Overlay( ”+top+” ,”+bot+” ) ” ; } String combine( Offset o, int dx , int dy , String inner ) { return ” Offset ( ”+dx+” ,”+dy+” ,”+inner+” ) ” ; } String combine( Ci rcl e c , int rad) { return ” Ci rcl e( ”+rad+” ) ” ; } String combine( Square s , int si ze) { return ” Square( ”+si ze+” ) ” ; } Overlay } /* Provided by DemeterF */ Offset Offset cl ass ID{ int combine( int i ) { return i ; } /* ... */ } -30 -10 "..." 30 10 Circle 25 11

  17. TBGP Example: Execution cl ass T oString extends ID{ String combine( Overlay o, String top , String bot ) { return ” Overlay( ”+top+” ,”+bot+” ) ” ; } String combine( Offset o, int dx , int dy , String inner ) { return ” Offset ( ”+dx+” ,”+dy+” ,”+inner+” ) ” ; } String combine( Ci rcl e c , int rad) { return ” Ci rcl e( ”+rad+” ) ” ; } String combine( Square s , int si ze) { return ” Square( ”+si ze+” ) ” ; } Overlay } /* Provided by DemeterF */ "..." Offset cl ass ID{ int combine( int i ) { return i ; } /* ... */ } 30 10 Circle 25 11

  18. TBGP Example: Execution cl ass T oString extends ID{ String combine( Overlay o, String top , String bot ) { return ” Overlay( ”+top+” ,”+bot+” ) ” ; } String combine( Offset o, int dx , int dy , String inner ) { return ” Offset ( ”+dx+” ,”+dy+” ,”+inner+” ) ” ; } String combine( Ci rcl e c , int rad) { return ” Ci rcl e( ”+rad+” ) ” ; } String combine( Square s , int si ze) { return ” Square( ”+si ze+” ) ” ; } Overlay } /* Provided by DemeterF */ "..." Offset cl ass ID{ int combine( int i ) { return i ; } /* ... */ } 30 10 Circle 25 11

  19. TBGP Example: Execution cl ass T oString extends ID{ String combine( Overlay o, String top , String bot ) { return ” Overlay( ”+top+” ,”+bot+” ) ” ; } String combine( Offset o, int dx , int dy , String inner ) { return ” Offset ( ”+dx+” ,”+dy+” ,”+inner+” ) ” ; } String combine( Ci rcl e c , int rad) { return ” Ci rcl e( ”+rad+” ) ” ; } String combine( Square s , int si ze) { return ” Square( ”+si ze+” ) ” ; } Overlay } /* Provided by DemeterF */ "..." Offset cl ass ID{ int combine( int i ) { return i ; } /* ... */ } 30 10 "..." 11

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend