RE: Closures: summarizing suggestions a bit...

"Daniel Leuck" <[email protected]> Thu, 3 Feb 2005 14:18:28 -1000
Newsgroups gmane.comp.java.beanshell.devel
Message-ID <[email protected]>
It works with the grammar and looks better.  Do you think people might
mistake it for a comment?

> -----Original Message-----
> From: beanshell-developers-admin-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org [mailto:beanshell-
> developers-admin-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org] On Behalf Of Slava Pestov
> Sent: Thursday, February 03, 2005 2:12 PM
> To: 'BeanShell Developers'
> Subject: Re: [Beanshell-dev] Closures: summarizing suggestions a bit...
> 
> How about just # then? I think it looks fine.
> 
> Daniel Leuck wrote:
> > Hi Slava,
> >
> > @ will be used for attributes when 1.5 syntax is supported.  I suppose
> it
> > would be unambiguous in some of the contexts you describe, but might be
> a
> > bit confusing.
> >
> > #'foo looks a little weird to me.
> >
> > Dan
> >
> >
> >>-----Original Message-----
> >>From: beanshell-developers-admin-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> [mailto:beanshell-
> >>developers-admin-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org] On Behalf Of Slava Pestov
> >>Sent: Thursday, February 03, 2005 11:39 AM
> >>To: BeanShell Developers
> >>Subject: Re: [Beanshell-dev] Closures: summarizing suggestions a bit...
> >>
> >>Hi all,
> >>
> >>I suggest a syntax for closures, somewhat inspired by Common Lisp, where
> >>refer to a function object, either named or anonymous, you write #'foo,
> >>where foo is either a function name, or an anonymous function block
> >>("lambda").
> >>
> >>While #' is a bit ackward, in BeanShell you can reserve the
> >>currently-unused @ character to look up inside the function namespace --
> >>giving the ability to have function object literals. Using @ in a C like
> >>language is not that weird, and Objective C uses this character.
> >>
> >>So, suppose you had a function map() that took a list and a function,
> >>and returned a new list. You could do:
> >>
> >>sq(x) { return x*x; }
> >>
> >>map(list,@sq);
> >>
> >>For anonymous closures, just use a syntax like
> >>
> >>map(list,@(x) { return x*x; });
> >>
> >>So its @(arguments) { body }
> >>
> >>(in Common Lisp, its #'(lambda (x y) (+ x y)) -- notice the
parallel...).
> >>
> >>Now, I missed method literals. What you could do is return an object
> >>that is internally a pair; a 'this', and a BeanShell method to invoke.
> >>So the syntax could be like:
> >>
> >>map(list,myObj.@foo);
> >>
> >>Where myObj.@foo is an object that when called in some way, invokes
> >>myObj.foo(...).
> >>
> >>To call a method, function or closure, i think its ok to call the 'do'
> >>method on it, like in SmallTalk.
> >>
> >>void map(list,closure)
> >>{
> >>     for(i = 0; i < list.size(); i++)
> >>         list.set(i,closure.do(list.get(i)));
> >>}
> >>
> >>I hope my proposal is considered. I think overloading an unused
> >>punctuation character is the best way to implement anonymous closures
> >>and methods-as-arguments while maintaining brevity, without creating
> >>ambiguous situations.
> >>
> >>Patrick Niemeyer wrote:
> >>
> >>>Just to summarize a few of the alternate suggestions:
> >>>
> >>>// Extended method-like syntax:
> >>>callable( ... );
> >>>callable( arg, ... );
> >>>
> >>>
> >>>// Anonymous inner class-like syntax:
> >>>() { ... }
> >>>(arg) { ... }
> >>>
> >>>
> >>>// Multiple curly brace syntax:
> >>>{{ ... }}
> >>>{ arg { ... } }
> >>>
> >>>
> >>>
> >>>Pat
> >>>
> >>>
> >>>
> >>>-------------------------------------------------------
> >>>This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
> >>>Tool for open source databases. Create drag-&-drop reports. Save time
> >>>by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
> >>>Download a FREE copy at http://www.intelliview.com/go/osdn_nl
> >>>_______________________________________________
> >>>Beanshell-developers mailing list
> >>>Beanshell-developers-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> >>>https://lists.sourceforge.net/lists/listinfo/beanshell-developers
> >>
> >>
> >>
> >>-------------------------------------------------------
> >>This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
> >>Tool for open source databases. Create drag-&-drop reports. Save time
> >>by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
> >>Download a FREE copy at http://www.intelliview.com/go/osdn_nl
> >>_______________________________________________
> >>Beanshell-developers mailing list
> >>Beanshell-developers-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> >>https://lists.sourceforge.net/lists/listinfo/beanshell-developers
> >
> >
> 
> 
> 
> -------------------------------------------------------
> This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
> Tool for open source databases. Create drag-&-drop reports. Save time
> by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
> Download a FREE copy at http://www.intelliview.com/go/osdn_nl
> _______________________________________________
> Beanshell-developers mailing list
> Beanshell-developers-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> https://lists.sourceforge.net/lists/listinfo/beanshell-developers



-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl