[#10853] Why limit class def to a constant or colon node? — Charles Oliver Nutter <charles.nutter@...>

Is there a historical reason why I can't do something like these:

12 messages 2007/04/03

[#10933] Cannot build with extra library path if previous version already installed — <noreply@...>

Bugs item #10140, was opened at 2007-04-16 17:32

10 messages 2007/04/16
[#10934] Re: [ ruby-Bugs-10140 ] Cannot build with extra library path if previous version already installed — nobu@... 2007/04/16

Hi,

[#10960] Re: [ ruby-Bugs-10140 ] Cannot build with extra library path if previous version already installed — "Michal Suchanek" <hramrach@...> 2007/04/18

On 4/16/07, nobu@ruby-lang.org <nobu@ruby-lang.org> wrote:

[#10967] Re: [ ruby-Bugs-10140 ] Cannot build with extra library path if previous version already installed — Nobuyoshi Nakada <nobu@...> 2007/04/19

Hi,

[#10970] Re: [ ruby-Bugs-10140 ] Cannot build with extra library path if previous version already installed — "Michal Suchanek" <hramrach@...> 2007/04/19

On 4/19/07, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:> Hi,>> At Wed, 18 Apr 2007 20:21:44 +0900,> Michal Suchanek wrote in [ruby-core:10960]:> > Yes. And this should also apply to extensions. The mkmf tests are now> > fine but the extension is linked with -L/sw/lib before -L../..>> Indeed.>>> Index: configure.in> ===================================================================> --- configure.in (revision 12191)> +++ configure.in (working copy)> @@ -1385,5 +1385,4 @@ if test "$enable_rpath" = yes; then> fi>> -LDFLAGS="-L. $LDFLAGS"> AC_SUBST(ARCHFILE)>This would break the previous fix so I did not even try to apply this ^

[#11003] miniruby loads extensions from already installed ruby — <noreply@...>

Bugs item #10303, was opened at 2007-04-23 10:44

10 messages 2007/04/23

[#11025] gsub with backslash characters in replacement string — "Adam Bozanich" <adam.boz@...>

Hello, spotted this one the other day:

10 messages 2007/04/26

Re: Why limit class def to a constant or colon node?

From: "Chris Carter" <cdcarter@...>
Date: 2007-04-04 16:42:03 UTC
List: ruby-core #10861
On 4/4/07, Hugh Sasse <hgs@dmu.ac.uk> wrote:
> On Wed, 4 Apr 2007, Nobuyoshi Nakada wrote:
>
> > Hi,
> >
> > At Wed, 4 Apr 2007 06:01:21 +0900,
> > Charles Oliver Nutter wrote in [ruby-core:10853]:
> > > Is there a historical reason why I can't do something like these:
> > >
> > > x = String
> > > class x; end
>         [...]
> > If there were can be an arbitrary expression, it conflicts
> > with the superclass notation.  Consider:
> >
> >   class X < String
> >
> > How do you see the above, X inherits String, or comparison
> > between X and String?  We concluded that parentheses around the
> > expression for a while ago.
>
> Interesting.   String < Object gives true,  Object < String -> false
> Fixnum < String -> nil, i.e, inheritance comparisons.  So handling
> an arbitrary expression is pretty tricky, given that classes can be
> reopened:
> irb(main):007:0> class Wibble < Array ; end
> => nil
> irb(main):008:0> class Wibble < Array ; end
> => nil
> irb(main):009:0> Wibble
> => Wibble
> irb(main):010:0> Wibble < Array
> => true
> irb(main):011:0> Array < Wibble
> => false
> irb(main):012:0>
>
> and class has to be a keyword because the present syntax combinations
> don't work as syntax sugar for a method call
>   class X
>   class Y < Z
>   class  << q
>
> mean it can't map to some fictional method :-
> Kernel::open_possibly_reopen_class(klass, superklass=nil)
> because we can't leave klass out, and yet have superklass.
>
> So maybe class X [< Y] could be changed to allow class (expr) [ <
> (expr)] provided the parentheses are present unless the expressions are
> syntactically constants, but this is another case where somebody
> has to persuade yacc to to this.  [Is anyone collecting these cases
> where we can't do something because it is a pain to make yacc do it?]
>
> Anyway, this makes me appreciate syntax I'd been taking for granted.
>
> Also makes me think: what about non-anonymous singleton classes?
>
> irb(main):002:0> class X << x
> irb(main):003:1>   def hello
> irb(main):004:2>     puts "hi"
> irb(main):005:2>   end
> irb(main):006:1> end
> SyntaxError: compile error
> (irb):2: syntax error, unexpected tLSHFT, expecting '<' or '\n' or ';'
> class X << x
>           ^
>         from (irb):6
>         from :0
> irb(main):007:0>
>
> Fair enough! :-)  That would produce some weird prototype based OO
> if it were allowed, though.
>
> > > The reason I ask is for something in JRuby. In JRuby we can refer to
> > > Java classes using a long-hand syntax:
> > >
> > > java.lang.System
> >
> > Hmmm, I'm interested in how the conflict is solved.
> >
> > --
> > Nobu Nakada
> >
> >
>         Hugh
>
>

Intrestingly, you can do things like this:
>> a = Object.new
=> #<Object:0x13292e4>
>> b = class <<a
>> attr_accessor :name
>> self
>> end
=> #<Class:#<Object:0x13292e4>>
>> b
=> #<Class:#<Object:0x13292e4>>
>> A = b
=> #<Class:#<Object:0x13292e4>>
>> A
=> #<Class:#<Object:0x13292e4>>

With singletons. Which allows you to do things like:
>> ObjectSpace.each_object(A) { |a| p a }
#<Object:0x13292e4>
=> 1


-- 
Chris Carter
concentrationstudios.com
brynmawrcs.com

In This Thread