Protection from Bad Advice
Aspect-oriented programming languages such as AspectJ provide a new
way to separate out and consolidate code for debugging, profiling,
distribution and other tasks that would otherwise become tangled with
the main-line computation. Without aspects, this code can be difficult
understand and maintain. Unfortunately, while aspects purport to
provide a new form of modularity, they also defeat the purpose of
existing information hiding and modularity mechanisms.
We have developed a new aspect-oriented programming language,
AspectML, that allows programmers to control information hiding and
access to the internals of a module through a simple static type
system. Using our mechanisms, programmers can prevent aspects
from interfering with local invariants or reading information
that should be kept private to a module. Consequently, AspectML
is the first aspect-oriented language that interoperates
safely and effectively with rich module systems.