[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: LFM + LFSP = LFE?




Brian,

Got a link for Slate?  I'd like to check it out.

Mike

> Date: Sat, 14 Jun 2003 16:01:39 -0700 (PDT)
> From: Brian T Rice <water@tunes.org>
> 
> On Sat, 14 Jun 2003, Avi Bryant wrote:
> 
> > On Sat, 14 Jun 2003, Michael Vanier wrote:
> > - use a block to define each method.  In the simplest case this would
> > probably look something like:
> >
> > Script addMethod: #run do:
> >   [:self |
> >   self puts: 'hello world']
> >
> > or
> >
> > Script addMethod: #add:to: do:
> >   [:self :x :y |
> >   x + y]
> 
> In Slate, we allow the user to omit the input block arguments from the
> header and instead use them in the signature, and this is rewritten by the
> parser into a canonical syntax model.
> 
> > To properly match the return semantics, you would have to pass a
> > continuation in as well:
> >
> > Script addMethod: #add:to: do:
> >   [:self :return :x :y |
> >   return value: x + y]
> 
> Now this is interesting syntactically, because we had been using ^ as a
> selector on method objects which leads to precedence confusion among
> migrating Smalltalkers. We still use the continuation model of course.
> 
> > I guess you could use the {} literal syntax to make this a little
> > friendlier, by defining #methods: to take associations from selectors to
> > blocks:
> >
> > Script methods:
> >  {#run ->
> >    [:self :return | self puts: 'hello world'].
> >
> >   #add:to: ->
> >     [:self :return :x :y | return value: x + y]}
> >
> > If you got really clever you could make "self" and "return" be dynamically
> > scoped globals, so now we'd have something like
> >
> > Script methods:
> >   {#run -> [Self puts: 'hello world'].
> >    #add:to: -> [:x :y | Return value: x + y]}
> 
> This is even more interesting, and in Slate I could see an additional
> benefit by combining this with accessing the method's slots for outer
> calling contexts, so that a specific continuation could be chosen. Of
> course, if you assume that dynamic scoping is available, you can also
> introduce other continuations that way.
> 
> -- 
> Brian T. Rice
> LOGOS Research and Development
> http://tunes.org/~water/
>