Closer Project.
Recommended libraries: Closer to MOP - ContextL - Filtered Functions
  Navigation.
  • Main
  • History
  • Feature Tests
  • Closer to MOP
  • ContextL
  • Filtered Functions
  • AspectL
  • Mailing Lists
  • Repositories
  •   ContextL.
    ContextL is a CLOS extension for Context-oriented Programming (COP), and was the first language extension that explicitly supports COP when it was originally introduced in 2005.

    Currently, there is no documentation available, but you can find some test cases in the distribution and an overview of ContextL's features in an overview paper. See also this general overview article about COP which also contains some ContextL examples.

    New in version 1.0.0:
    • New version number based on semantic versioning.
    • Since version 0.61, support for Allegro Common Lisp 8.2 & 9.0, ABCL, and LispWorks 6.1 has been added.
    • An option has been added to disable special slots, which may improve performance if they are not needed.
    • Thread safety has been improved.

    New in version 0.61:
    • Added support for LispWorks 6.0.

    Highlights of version 0.6:
    • Added support for first-class dynamic environments and DYNAMIC-WIND. Due to popular demand, these features can be used independently of the rest of ContextL, by way of using a separate system definition. (In that case, no CLOS MOP is used, so this should run in any ANSI-compliant Common Lisp implementation.)
    • Added support for Embeddable Common Lisp.
    • Resurrected support for Macintosh Common Lisp (now RMCL).
    • Improved extensibility of ContextL metaclasses.
    • Removed unnecessary redefinition warnings for layered classes in Allegro and LispWorks.
    • Removed dependencies on portable-threads and trivial-garbage.
    • Improved use of synchronization features for multithreaded CL implementations.
    • Switched to a uniform model for optional features.
    • Simplified and improved conditionalizations for Clozure Common Lisp and LispWorks, and removed mentions of OpenMCL (which was just the old name for Clozure Common Lisp).
    • Lots of small little bug fixes and improvements here and there.
    • Lots of special thanks to the following people who provided useful patches and comments: Willem Broekema, Theam Yong Chew, Alexander Gravilov, Attila Lendvai, and Tobias Rittweiler. Extra special thanks to Duane Rettig (of Franz Inc.) and Martin Simmons (of LispWorks Ld.) for helping with Allegro-specific and LispWorks-specific issues.

    Highlights of version 0.51:
    • Ensure-layered-method now accepts function designators instead of just function names, due to Drew Crampsie.

    Highlights of version 0.5:
    • ContextL is now thread-safe.
    • Added :in as an alternative for :in-layer in the various define-layered-xyz macros.
    • Added new functions active-layers and (setf current-layer-context).
    • Added a garbage collector for layer caches, such that redefinition of layers or certain methods in the ContextL MOP have an effect.
    • Simplified mapping of layer-related names to internal names, which should also make things easier to read when debugging ContextL programs.

    Highlights of version 0.4:
    • The deflayer macro doesn't take a :layer-class option anymore, but instead a :metaclass option. This reflects that layers are in fact represented as CLOS classes.
    • Added the function current-layer-context. This captures the set of currently active layers, which can later be reinstalled with funcall-with-layer-context and apply-with-layer-context.
    • Added several readers for ContextL's metaclasses.

    Highlights of version 0.31:
    • Added two versions of the figure editor example from the JMLC'06 paper to the test suite.

    Highlights of version 0.3:
    • Added metacircular layer activation through ACTIVATE-LAYER-USING-CLASS and DEACTIVATE-LAYER-USING-CLASS.
    • Added WITH-SPECIAL-INITARGS and WITH-SPECIAL-INITARGS* macros for rebinding special slots based on their initargs.
    • WITH-ACTIVE-LAYERS and WITH-ACTIVE-LAYERS* now process initargs for layer-specific special slots such that they can be rebound at the same time when the respective layer is activated.
    • Added CALL-NEXT-LAYERED-METHOD for more convenient super calls in layered methods.
    • Added singleton classes. Layers are singletons and internally represented as singleton classes, but the notion of a singleton class is useful in itself, so ContextL provides this as a separate feature.
    Currently, the following Common Lisp implementations are supported:
    • Allegro Common Lisp 9.0 Express Edition
    • Armed Bear Common Lisp 1.3.1
    • CLisp 2.49
    • Clozure Common Lisp 1.10
    • CMU Common Lisp 20f
    • Embeddable Common Lisp 13.5.1
      (Git repository version as of June 11, 2014)
    • LispWorks 6.1.1 Personal Edition
    • Steel Bank Common Lisp 1.2.5
    All tests have been performed on Mac OS X 10.9.5

    The following implementations were supported in the past:
    • Allegro Common Lisp 7.0, 8.0 - 8.2 Enterprise Editions
    • Armed Bear Common Lisp 1.1.1, 1.2.1, 1.3.0
    • CLisp from 2.35 onward
    • Clozure Common Lisp 1.2 - 1.9
    • CMU Common Lisp 19c-f, 20a-e
    • Embeddable Common Lisp 9.12.3, 10.3.1, 10.4.1, 11.1.1, 12.2.1, 12.12.1
    • LispWorks 4.3 & 4.4, Personal and Professional Editions
    • LispWorks 5.0.1, 5.0.2, 5.1.0 - 5.1.2 Personal and Professional Editions
    • LispWorks 6.0, 6.0.1 Enterprise Editions
    • LispWorks 6.1, 6.1.1, Professional Editions
    • Macintosh Common Lisp 5.1, 5.2.1
    • OpenMCL 1.0
    • Scieneer Common Lisp 1.3.9
    • Steel Bank Common Lisp from 0.9.16 onward (except version 1.0.0)
    The respective code conditionalizations are still in the source files, so there is a good chance that they still work, especially for current or newer versions. However, there is no garantuee that this is the case, and active work for these implementations is currently on hold.

    This project was partially funded by the Institute for the Promotion of Innovation through Science and Technology in Flanders (IWT-Vlanderen) from 2005-2008.
    Powered by LML!
      (c) 2005-2014 Pascal Costanza. Original site design by Antipop.