> Hi,
>
> I am honored to announce the beginning of the MacRuby project!
>
> MacRuby is a version of Ruby that runs on top of Objective-C. More
> precisely, MacRuby is currently a port of the Ruby 1.9 implementation
> for the Objective-C runtime and garbage collector.
>
> You can learn more about the project on its homepage:
>
> http://trac.macosforge.org/projects/ruby/wiki/MacRuby
>
> MacRuby is still extremely experimental, but a first release is
> expected very soon.
Interesting stuff.
After reading some of the material on the macosforge wiki, I'm curious
about the keyed arguments design.
It sounds like if I invoke a method like this:
x.foo(1, bar: 2)
Then what happens is that this gets turned into an
Objective-C/Smalltalk syntax message selector of foo:bar:, but if I
use
x.foo(1, 2, bar: 3)
then it effectively uses a different selector and uses Ruby parameter
semantics with bar: 3 getting mapped into {:bar => 3} the way Ruby 1.9
does it.
So what happens if I write a ruby class like this:
class C
def foo(*a)
keywords = a.pop if Hash === a.last
...
end
end
And then, possibly in a separate file, write
def quack(duck) # duck might be an instance of C, but is it?
duck.foo(1, 2, bar: 3) # I guess this would work in any case.
True.
duck.foo(1, bar: 2) # mapped to foo:bar: what does an
instance of C do with this?
Here, MacRuby will check if duck responds to foo:bar:. If true, this
message is sent with 1 and 2 as arguments. If not true, the foo
message is sent instead with 1 and {:bar => 2} as arguments.
If you're working with pure Ruby objects, the second code path should
always be taken. Unless you define foo:bar: in your Ruby class.
Note that the key:value syntax to describe a hash pair is available in
vanilla 1.9.
This also seems to be treading on some of the territory which Matz has
indicated he plans to be defining in Ruby 2.0. I'm worried that
there's a fork down the road here.
I don't really see this as a fork, but more as a port. Most of MacRuby
is based on 1.9, because we want to use all the upstream code base. We
just use Objective-C when it's necessary to provide a tighter
integration with Mac OS X APIs. Because we want people to use Ruby to
write complete full Mac OS X applications, without paying the bridging
cost.
Laurent
···
On Thu, Feb 28, 2008 at 6:33 AM, Rick DeNatale <rick.denatale@gmail.com> wrote:
On 2/27/08, Laurent Sansonetti <laurent.sansonetti@gmail.com> wrote: