Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
research:software:haskellaop [2012/10/02 10:25] – [Source Code] ifigueroresearch:software:haskellaop [2013/06/14 13:32] (current) – created ifiguero
Line 1: Line 1:
-====== A Typed Monadic Embedding of Aspects ====== +This page has been moved to[[research/software/effectiveaspects]].
- +
-We developed a novel approach to embed pointcut/advice aspects in a typed functional programming language like Haskell. Aspects are first-class, can be deployed dynamically, and the pointcut language is extensible. Type soundness is guaranteed by exploiting the underlying type system, in particular phantom types and a new anti-unification type class. The use of monads brings type-based reasoning about effects for the first time in the pointcut/advice setting, and makes it possible to modularly extend or modify the aspect language. +
- +
-====== GHC Extensions ====== +
-We implemented our approach in the Glasgow Haskell Compiler, GHC. [[http://pleiad.dcc.uchile.cl/research/software/haskellaop/ghc-extensions|Here]] we detail the extensions used. +
- +
-====== Source Code ====== +
-The source can be downloaded {{:research:software:aop1.zip | here}}. See the included README file for details. We tested the software in the [[http://hackage.haskell.org/platform/|Haskell Platform]] version 2012.2.0.0. +
- +
-The code depends on the following packages: +
-  * random +
-  * mtl +
-  * HUnit +
-  * QuickCheck +
-  * containers +
-  * haskell-src-meta +
-  * template-haskell +
-  * polytypeable +
-  * ghc-prim +
- +
-Which can be installed using the [[http://www.haskell.org/haskellwiki/Cabal-Install | cabal package manager]] included with the Haskell Platform. +
- +
-We include the paper examples, and tests used during development. The main difference between the code in the paper and the source code are: +
- +
-  * deployment/undeploy: we define the AOPMonad class with the deploy/undeploy top-level operations. These functions use the underlying deployInEnv / undeployInEnv functions defined by type class MonadDeploy. +
- +
-  * In file Function.hs we define tagged functions to provide a more robust notion of function equality. Join points, open function application, and weaving are modified to accept this new kind of functions.+