Trans
5/12/2007 3:20:00 PM
On May 12, 9:27 am, Brian Candler <B.Cand...@pobox.com> wrote:
> On Sat, May 12, 2007 at 04:20:10PM +0900, enduro wrote:
> > I was exited when I heard that
> > Symbol was made a subclass of String
> > in Ruby 1.9, September last year.
>
> > But then I heard that the experiment
> > was stopped after only two months.
>
> > And recently I have started to think about this
> > topic again and I've tried to collect the reasons
> > why the idea was not pursued any longer.
>
> > I have not been very lucky searching the net
> > for that, that's why I am asking you:
>
> > Could someone give me a summary of the reasons
> > why the approach to make Symbol a subclass of String
> > is not considered for future Ruby versions anymore?
> > Or point me towards some information explaining that?
>
> The two objects have very different behaviours, so why should one be a
> subclass of the other?
>
> * Symbols are immutable, Strings are mutable
> * Symbols are singletons, Strings are not
>
> I think this is an example of the traditional OO dilemma: "is Circle a
> subclass of Oval, or is Oval a subclass of Circle?" One argument says: a
> Circle is a subclass of Oval because you can use an Oval to draw a Circle -
> you just need to constrain its parameters. Another argument says: an Oval is
> a subclass of Circle because it extends the behaviour of Circle.
>
> Ruby says: we don't care. Make a Circle class, and make an Oval class. Make
> them both respond to whatever methods make sense (e.g. all shapes may be
> expected to have a 'draw' method). If you want to share implementation code
> between them, then use a mixin.
There are a number of advantages to sub-classing that I can think of:
1) No need to do x.to_s.some_string_method.to_sym
2) Hash keys could efficiently equate symbol and string keys (it's
the distinction that should be optional)
3) It's conceptually simpler: a Symbol is an immutable String.
I'm sure there are a few more. On the downside, Symbols might not be
as efficient in general, and there could be some back-compatibility
issues.
Would be interesting to know what effectively killed the official
attempt at this.
T.