[closer-announce] ContextL 0.40.

Pascal Costanza pc at p-cos.net
Sat Apr 21 21:35:19 UTC 2007


Hi everyone,

I have just released ContextL 0.40. The idea is that this version is  
feature-complete with regard to the feature set of the upcoming 1.0  
release. So the goal is to test this version now, and in the meantime  
I hope I will find enough time to write up some more decent  
documentation of ContextL before version 1.0 is eventually released.

IMPORTANT: There are some changes in the API of ContextL 0.40  
compared to previous versions. If you rely on the old version and  
cannot afford to switch to 0.40 yet for some reason, I have also  
provided a new version 0.32 which has the same API as before, but  
just fixes an important internal bug I have discovered recently. If  
for some reason you can indeed not switch to 0.40, please let me know  
and I'll see what I can do to fix potential issues.

For those who are willing to switch, here are the changes that will  
probably affect your code:

   + The functions activate-layer and activate-layer-using-class have  
been renamed to adjoin-layer and adjoin-layer-using-class, and  
deactivate-layer and deactivate-layer-using-class have been renamed  
to remove-layer and remove-layer-using-class. The new names reflect  
better what these functions actually do. However, the semantics  
haven't changed.

   + Removed the functions funcall-with-layers and apply-with-layers.  
Use the functions funcall-with-layer-context and apply-with-layer- 
context instead. (That API was ugly, and I guess it was never used.)

   + The deflayer macro doesn't take a :layer-class option anymore,  
but instead a :metaclass option. (I have tried to abstract from the  
internal representation as CLOS classes, but that turns out to be  
useless for the time being.) There is no change in semantics here,  
you just have to switch from :layer-class to :metaclass in a deflayer  
form, that's all.


And now to some of the new features in this release:

   + Added the functions funcall-with-layer-context and apply-with- 
layer-context, as hopefully better replacements for funcall-with- 
layers and apply-with-layers.

   + 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. (This should  
be handy in conjunction with continuations, as for example in  
continuation-based web frameworks.)

   + Added the readers layered-function-definer, layered-function- 
argument-precedence-order, layered-function-lambda-list for layered- 
function objects.

   + Added the readers layered-method-lambda-list, layered-method- 
specializers, layered-method-layer for layered-method objects.

   + Added the readers slot-definition-layered-readers and slot- 
definition-layered-writers for layered slot definition metaobjects.

   + You can now specify an :in-layer option in slot specifiers. This  
means that a slot within a define-layered-class form can be declared  
to be in a different layer than the respective class itself. This  
should allow, for example, grouping of slots of different layers in  
the same define-layered-class form.

   + Layers and layered functions can now also have uninterned  
symbols as names. This enables a form of anonymous layers and  
anonymous layered functions when gensym is used to create names for  
them. It's then probably also better to pass these symbols around  
instead of the first-class layers or functions themselves.

   + Added the function ensure-layer for programmatically creating  
layers.


Finally some internal changes, which are not necessarily visible to  
application programmers:

   + Some of the :in-layer keyword parameters to internal functions  
have previously taken lists of layers for technical reasons. This is  
not the case anymore. This doesn't affect those who have used the  
define-layered-class, but if you have used plain defclass forms with  
the respective :metaclass options in the past, you may have to change  
the corresponding :in-layer class options.

   + Changed the internal handling of the :defining-metaclass option  
for partial classes. In the previous versions, that option actually  
didn't get recorded properly. Fortunately, that didn't affect the  
correctness of the behavioral semantics. (phew ;)

   + Layered direct slot definition metaobjects don't take :layered- 
reader, :layered-writer and :layered-accessor initargs anymore, but  
rather :layered-readers and :layered-writers, which is closer to how  
the CLOS MOP works as well.

   + Added methods for print-object for the major classes and  
metaclasses, such that, for example, debug output now prints more  
nicely.


So this all effectively means that I have kept my announcements from  
beginning of January of this year with a delay of only two months.  
(Hey, that's better than both Microsoft and Apple. ;)

Please feel free to ask any questions, either in the closer-devel  
mailing list (the preferred forum), or in private email.


Cheers,
Pascal

-- 
Pascal Costanza, mailto:pc at p-cos.net, http://p-cos.net
Vrije Universiteit Brussel, Programming Technology Lab
Pleinlaan 2, B-1050 Brussel, Belgium







More information about the closer-announce mailing list