Intensions and extensions in a reflective tower
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
Designing robust Java programs with exceptions
SIGSOFT '00/FSE-8 Proceedings of the 8th ACM SIGSOFT international symposium on Foundations of software engineering: twenty-first century applications
Advances in Object-Oriented Metalevel Architectures and Reflection
Advances in Object-Oriented Metalevel Architectures and Reflection
The Art of the Metaobject Protocol
The Art of the Metaobject Protocol
Contracts for higher-order functions
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
ECOOP '01 Proceedings of the 15th European Conference on Object-Oriented Programming
Avoiding Confusion in Metacircularity: The Meta-Helix
ISOTAS '96 Proceedings of the Second JSSST International Symposium on Object Technologies for Advanced Software
The implementation of procedurally reflective languages
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
AspectJ in Action: Practical Aspect-Oriented Programming
AspectJ in Action: Practical Aspect-Oriented Programming
A semantics for advice and dynamic join points in aspect-oriented programming
ACM Transactions on Programming Languages and Systems (TOPLAS)
A classification system and analysis for aspect-oriented programs
Proceedings of the 12th ACM SIGSOFT twelfth international symposium on Foundations of software engineering
Classpects: unifying aspect- and object-oriented language design
Proceedings of the 27th international conference on Software engineering
Semantics and scoping of aspects in higher-order languages
Science of Computer Programming - Special issue: Foundations of aspect-oriented programming
MiniMAO1: an imperative core language for studying aspect-oriented reasonings
Science of Computer Programming - Special issue: Foundations of aspect-oriented programming
AspectML: A polymorphic aspect-oriented functional programming language
ACM Transactions on Programming Languages and Systems (TOPLAS)
EJFlow: taming exceptional control flows in aspect-oriented programming
Proceedings of the 7th international conference on Aspect-oriented software development
Expressive scoping of dynamically-deployed aspects
Proceedings of the 7th international conference on Aspect-oriented software development
Racer: effective race detection using aspectj
ISSTA '08 Proceedings of the 2008 international symposium on Software testing and analysis
Beyond static and dynamic scope
DLS '09 Proceedings of the 5th symposium on Dynamic languages
Parallel dynamic analysis on multicores with aspect-oriented programming
Proceedings of the 9th International Conference on Aspect-Oriented Software Development
AspectScript: expressive aspects for the web
Proceedings of the 9th International Conference on Aspect-Oriented Software Development
Execution levels for aspect-oriented programming
Proceedings of the 9th International Conference on Aspect-Oriented Software Development
Pointcut Rejuvenation: Recovering Pointcut Expressions in Evolving Aspect-Oriented Software
ASE '09 Proceedings of the 2009 IEEE/ACM International Conference on Automated Software Engineering
A catalogue of bug patterns for exception handling in aspect-oriented programs
Proceedings of the 15th Conference on Pattern Languages of Programs
A compilation and optimization model for aspect-oriented programs
CC'03 Proceedings of the 12th international conference on Compiler construction
Types and modularity for implicit invocation with implicit announcement
ACM Transactions on Software Engineering and Methodology (TOSEM)
Semantics Engineering with PLT Redex
Semantics Engineering with PLT Redex
Composition of dynamic analysis aspects
GPCE '10 Proceedings of the ninth international conference on Generative programming and component engineering
Scoping strategies for distributed aspects
Science of Computer Programming
Polymorphic bytecode instrumentation
Proceedings of the tenth international conference on Aspect-oriented software development
EScala: modular event-driven object interactions in scala
Proceedings of the tenth international conference on Aspect-oriented software development
Making aspects natural: events and composition
Proceedings of the tenth international conference on Aspect-oriented software development
A semantics for execution levels with exceptions
Proceedings of the 10th international workshop on Foundations of aspect-oriented languages
Comprehensive aspect weaving for Java
Science of Computer Programming
IEEE Software
Aspectizing Java Access Control
IEEE Transactions on Software Engineering
Proceedings of the eleventh workshop on Foundations of Aspect-Oriented Languages
A monadic interpretation of execution levels and exceptions for AOP
Proceedings of the 11th annual international conference on Aspect-oriented Software Development
Transactions on Aspect-Oriented Software Development I
abc: an extensible AspectJ compiler
Transactions on Aspect-Oriented Software Development I
Secure and modular access control with aspects
Proceedings of the 12th annual international conference on Aspect-oriented software development
A typed monadic embedding of aspects
Proceedings of the 12th annual international conference on Aspect-oriented software development
Taming aspects with monads and membranes
Proceedings of the 12th workshop on Foundations of aspect-oriented languages
Hi-index | 0.00 |
In aspect-oriented programming (AOP) languages, advice evaluation is usually considered as part of the base program evaluation. This is also the case for certain pointcuts, such as if pointcuts in AspectJ, or simply all pointcuts in higher-order aspect languages like AspectScheme. While viewing aspects as part of base level computation clearly distinguishes AOP from reflection, it also comes at a price: because aspects observe base level computation, evaluating pointcuts and advice at the base level can trigger infinite regression. To avoid these pitfalls, aspect languages propose ad-hoc mechanisms, which increase the complexity for programmers while being insufficient in many cases. After shedding light on the many facets of the issue, this paper proposes to clarify the situation by introducing levels of execution in the programming language, thereby allowing aspects to observe and run at specific, possibly different, levels. We adopt a defensive default that avoids infinite regression, and gives advanced programmers the means to override this default using level-shifting operators. We then study execution levels both in practice and in theory. First, we study the relevance of the issues addressed by execution levels in existing aspect-oriented programs. We then formalize the semantics of execution levels and prove that the default semantics is indeed free of a certain form of infinite regression, which we call aspect loops. Finally, we report on existing implementations of execution levels for aspect-oriented extensions of Scheme, JavaScript and Java, discussing their implementation techniques and current applications.