AspectML: A polymorphic aspect-oriented functional programming language

Daniel S. Dantas, David Walker, Geoffrey Washburn, Stephanie Weirich

Research output: Contribution to journalArticlepeer-review

33 Scopus citations

Abstract

This article defines AspectML, a typed functional, aspect-oriented programming language. The main contribution of AspectML is the seamless integration of polymorphism, run-time type analysis and aspect-oriented programming language features. In particular, AspectML allows programmers to define type-safe polymorphic advice using pointcuts constructed from a collection of polymorphic join points. AspectML also comes equipped with a type inference algorithm that conservatively extends Hindley - Milner type inference. To support first-class polymorphic point-cut designators, a crucial feature for developing aspect-oriented profiling or logging libraries, the algorithm blends the conventional Hindley - Milner type inference algorithm with a simple form of local type inference. We give our language operational meaning via a type-directed translation into an expressive type-safe intermediate language. Many complexities of the source language are eliminated in this translation, leading to a modular specification of its semantics. One of the novelties of the intermediate language is the definition of polymorphic labels for marking control-flow points. When a set of labels is assembled as a pointcut, the type of each label is an instance of the type of the pointcut.

Original languageEnglish (US)
Article number14
JournalACM Transactions on Programming Languages and Systems
Volume30
Issue number3
DOIs
StatePublished - May 1 2008

All Science Journal Classification (ASJC) codes

  • Software

Keywords

  • Aspect-oriented programming
  • Functional languages
  • Parametric and ad-hoc polymorphism
  • Type inference
  • Type systems

Fingerprint

Dive into the research topics of 'AspectML: A polymorphic aspect-oriented functional programming language'. Together they form a unique fingerprint.

Cite this