Concepts and experiments in computational reflection
OOPSLA '87 Conference proceedings on Object-oriented programming systems, languages and applications
Intensions and extensions in a reflective tower
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
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
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
A semantics for advice and dynamic join points in aspect-oriented programming
ACM Transactions on Programming Languages and Systems (TOPLAS)
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
Dynamic join points: model and interactions
Dynamic join points: model and interactions
AspectML: A polymorphic aspect-oriented functional programming language
ACM Transactions on Programming Languages and Systems (TOPLAS)
Expressive scoping of dynamically-deployed aspects
Proceedings of the 7th international conference on Aspect-oriented software development
Expressive scoping of distributed aspects
Proceedings of the 8th ACM international conference on Aspect-oriented software development
Beyond static and dynamic scope
DLS '09 Proceedings of the 5th symposium on Dynamic languages
AspectScript: expressive aspects for the web
Proceedings of the 9th International Conference on Aspect-Oriented Software Development
A compilation and optimization model for aspect-oriented programs
CC'03 Proceedings of the 12th international conference on Compiler construction
Semantics Engineering with PLT Redex
Semantics Engineering with PLT Redex
Open modules: modular reasoning about advice
ECOOP'05 Proceedings of the 19th European conference on Object-Oriented Programming
Aspects of composition in the reflex AOP kernel
SC'06 Proceedings of the 5th international conference on Software Composition
AspectScript: expressive aspects for the web
Proceedings of the 9th International Conference on Aspect-Oriented Software Development
Composition of dynamic analysis aspects
GPCE '10 Proceedings of the ninth international conference on Generative programming and component engineering
Proceedings of the 7th Workshop on Reflection, AOP and Meta-Data for Software Evolution
Polymorphic bytecode instrumentation
Proceedings of the tenth international conference on Aspect-oriented software development
Avoiding confusion with exception handling in aspect-oriented programming
Proceedings of the tenth international conference on Aspect-oriented software development companion
Towards a domain-specific aspect language for dynamic program analysis: position paper
Proceedings of the sixth annual workshop on Domain-specific aspect languages
A semantics for execution levels with exceptions
Proceedings of the 10th international workshop on Foundations of aspect-oriented languages
Aspect oriented programming: a language for 2-categories
Proceedings of the 10th international workshop on Foundations of aspect-oriented languages
Counting messages as a proxy for average execution time in pharo
Proceedings of the 25th European conference on Object-oriented programming
Implementing scoped method tracing with ContextJS
Proceedings of the 3rd International Workshop on Context-Oriented Programming
Spy: A flexible code profiling framework
Computer Languages, Systems and Structures
Proceedings of the eleventh workshop on Foundations of Aspect-Oriented Languages
A practical monadic aspect weaver
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
Membranes for AOP: from vision to practice
Proceedings of the 11th annual international conference on Aspect-oriented Software Development Companion
PHANtom: a modern aspect language for Pharo Smalltalk
Proceedings of the International Workshop on Smalltalk Technologies
The crosscutting impact of the AOSD Brazilian research community
Journal of Systems and Software
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
Proceedings of the 4th international workshop on Variability & composition
Towards control of aspect interference using membranes and monads
Proceedings of the 12th annual international conference companion on Aspect-oriented software development
Increasing test coverage with Hapao
Science of Computer Programming
Join point interfaces for safe and flexible decoupling of aspects
ACM Transactions on Software Engineering and Methodology (TOSEM)
Science of Computer Programming
Hi-index | 0.01 |
In aspect-oriented programming 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 in all cases, and give advanced programmers the means to override this default using level shifting operators. We formalize the semantics of our proposal, and provide an implementation. This work recognizes that different aspects differ in their intended nature, and shows that structuring execution contexts helps tame the power of aspects and metaprogramming.