On Thu, Feb 28, 2008 at 6:19 PM, Rick DeNatale
<rick.denatale gmail.com> wrote:
> On 2/28/08, Richard Kilmer <rich infoether.com> wrote:
> >
> > On Feb 28, 2008, at 7:44 PM, Evan Phoenix
wrote:
>
> > > At one point, I had a small parser change
that allowed this to be
> > > written as:
> > >
> > > O[duck foo: 1, bar: 2]
> > >
> > > The idea was that the rubinius compiler
would detect this special
> > > form and emit the 'right thing'.
> > >
> > > I think a bit part of this is whether you
expect users (and other
> > > code) to know they're calling out to
Objective-C, or if you want
> > > tight integration. This is essential what
matz says.
> > >
> > > By making special Objective-C syntax, then
you can't pass in an
> > > Objective-C object and expect it to be
duck-typed like normal ruby
> > > objects. But the trade off is that the
syntax is less elegant. I
> > > think it's a trade off, and my 2 cents is
you should opt for the
> > > more elegant syntax. This is because there
are only a few tiny edge
> > > cases where the Objective-C selector
matches the ruby selector,
> > > where you'd want to allow the ObjC object
to be duck typed as
> > > something else.
> >
> > So in your view:
> >
> > O[duck foo:1, bar:2]
> >
> > is elegant? Elegant Ruby? no. I agree to opt
for the elegant syntax
> > and that's:
> >
> > duck foo:1, bar:2
> Or
>
> duck foo: 1 bar: 2
>
> which is even more elegant, since it's the same syntax
as Smalltalk <G>
>
The problems with these syntaxes are that it's hard to parse
them, and
that they can lead to ambiguities when wrongly used.
For example,
duck.foo: x, with: y
could be written by mistake as
duck.foo ,
with: y
which has a completely different meaning.
Also, when the parenthesizes are omitted, it may be hard to
correctly
parse (assuming that you want to send the message to self)
foo ,
with:y
That's why I think that the following is the best compromise
so far,
between readability and reliability.
foo x, with:y # or foo(x, with:y)
Laurent
|