[#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: Hugh Sasse <hgs@...>
Date: 2007-04-04 15:55:39 UTC
List: ruby-core #10860
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

In This Thread