Slots in layers, was Re: [closer-devel] ContextL design question...

Nick Bourner nickb42 at gmail.com
Tue Feb 28 19:48:35 UTC 2006


Thanks for that, I'll give it a try.

Is the value of the slot global or can it be set on a per-thread basis
like active layers? I was thinking that it could be a good way of
carrying information for a particular activation of a layer. Say, for
instance, a stream for a display layer to write to or something. Then
you could have something like

(with-active-layers ((some-layer :some-slot a-value) some-other-layer)
   ...)
or
(ensure-active-layer (some-layer :some-slot a-value))

rather than something like

(let ((*some-special* a-value))
  (with-active-layers (some-layer some-other-layer)
    ....

Not a whole lot different but I think it just expresses the intent
slightly more clearly.

My guess is that because it's using an allocation of :class it's
global - one value for all threads.

Cheers,
Nick

On 2/28/06, Pascal Costanza <pc at p-cos.net> wrote:
>

<snip>

> Ah, ok. You can already do this by using undocumented behavior. So
> for examlpe, it should be possible to say this:
>
> (deflayer some-layer ()
>    ((some-slot :initform 42 :allocation :class :reader some-slot)))
>
> ...and then access the slot like this:
>
> (some-slot (layer-prototype (find-layer 'some-layer)))
>
> [Untested!]
>
> My goal is to make this look less ugly, but the semantics will be
> more or less the same. (This is all a side effect of the fact that
> layers are internally implemented as classes.)
>
> > I still haven't completely thought through what we were talking about
> > at DLD, and for the most part, it may not be necessary now. But I'll
> > try to come up with a concrete example.
>
> OK, would be nice. (But don't worry too much...)
>
>
> Cheers,
> Pascal
>
> >
> > Cheers,
> > Nick
> >
> >
> > On 2/28/06, Pascal Costanza <pc at p-cos.net> wrote:
> >>
> >> On 27 Feb 2006, at 19:10, Nick Bourner wrote:
> >>
> >>> Hi Pascal,
> >>>
> >>> I have to agree with your opinion that the prototype-based
> >>> approach is
> >>> the one to go for. I think that  moving to a class-based approach
> >>> adds
> >>> far too much complexity for minimal or no real gain in usefulness or
> >>> expressiveness. In my opinion that would be unfortunate, because for
> >>> me one of the strengths of ContextL is that it provides a
> >>> conceptually
> >>> simple, but very powerful, abstraction that  can be used to simplify
> >>> the organisation and expression of application code. Making the
> >>> abstraction more complex somewhat defeats the object - if you're not
> >>> careful you could wind up with application code that's as complex as
> >>> it would have been without the layering.
> >>
> >> Thanks a lot for your feedback!
> >>
> >>> BTW - is the code for slots in layers available? I could really use
> >>> that about now :-)
> >>
> >> Hmm, could you explain to me again what it is that you want here - I
> >> only have a rough idea from our discussion at the Dynamic Languages
> >> Day, but it would be helpful if you try to describe again what
> >> problem you actually want to solve. I hope I can then find a
> >> solution...
> >>
> >>
> >> 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
> >>
> >>
> >>
> >>
> >>
> >
>
> --
> 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-devel mailing list