[#10209] Market for XML Web stuff — Matt Sergeant <matt@...>

I'm trying to get a handle on what the size of the market for AxKit would be

15 messages 2001/02/01

[#10238] RFC: RubyVM (long) — Robert Feldt <feldt@...>

Hi,

20 messages 2001/02/01
[#10364] Re: RFC: RubyVM (long) — Mathieu Bouchard <matju@...> 2001/02/05

[#10708] Suggestion for threading model — Stephen White <spwhite@...>

I've been playing around with multi-threading. I notice that there are

11 messages 2001/02/11

[#10853] Re: RubyChangeRequest #U002: new proper name for Hash#indexes, Array#indexes — "Mike Wilson" <wmwilson01@...>

10 messages 2001/02/14

[#11037] to_s and << — "Brent Rowland" <tarod@...>

list = [1, 2.3, 'four', false]

15 messages 2001/02/18

[#11094] Re: Summary: RCR #U002 - proper new name fo r indexes — Aleksi Niemel<aleksi.niemela@...>

> On Mon, 19 Feb 2001, Yukihiro Matsumoto wrote:

12 messages 2001/02/19

[#11131] Re: Summary: RCR #U002 - proper new name fo r indexes — "Conrad Schneiker" <schneik@...>

Robert Feldt wrote:

10 messages 2001/02/19

[#11251] Programming Ruby is now online — Dave Thomas <Dave@...>

36 messages 2001/02/21

[#11469] XML-RPC and KDE — schuerig@... (Michael Schuerig)

23 messages 2001/02/24
[#11490] Re: XML-RPC and KDE — schuerig@... (Michael Schuerig) 2001/02/24

Michael Neumann <neumann@s-direktnet.de> wrote:

[#11491] Negative Reviews for Ruby and Programming Ruby — Jim Freeze <jim@...> 2001/02/24

Hi all:

[#11633] RCR: shortcut for instance variable initialization — Dave Thomas <Dave@...>

13 messages 2001/02/26

[#11652] RE: RCR: shortcut for instance variable initialization — Michael Davis <mdavis@...>

I like it!

14 messages 2001/02/27

[#11700] Starting Once Again — Ron Jeffries <ronjeffries@...>

OK, I'm starting again with Ruby. I'm just assuming that I've

31 messages 2001/02/27
[#11712] RE: Starting Once Again — "Aaron Hinni" <aaron@...> 2001/02/27

> 2. So far I think running under TextPad will be better than running

[#11726] Re: Starting Once Again — Aleksi Niemel<zak@...> 2001/02/28

On Wed, 28 Feb 2001, Aaron Hinni wrote:

[ruby-talk:10476] Re: generic method

From: ts <decoux@...>
Date: 2001-02-07 05:44:21 UTC
List: ruby-talk #10476
>>>>> "Y" == Yukihiro Matsumoto <matz@zetabits.com> writes:

Y> Tell me, have you implemented this already?

 Yes, but not yet finished.

 Actually there are big modifications because I must modify :
   * parse.y for the new syntax `def toto(Array a)'
   * eval.c for NODE_DEFN and NODE_DEFS
   * search_method(), rb_call() for the runtime part.

 I've another patch if you want :-)


pigeon% cat b.rb
#!./ruby
autoload :CGI, "cgi"
ENV["QUERY_STRING"] = "a=b"
ENV["REQUEST_METHOD"] = "GET"
a = Thread.new { p CGI.new.params }
b = Thread.new { p CGI.new.params }
a.join
b.join
pigeon% 

pigeon% /usr/bin/ruby b.rb
{"a"=>["b"]}
b.rb:6: uninitialized constant CGI (NameError)
        from b.rb:8:in `join'
        from b.rb:8
pigeon% 

pigeon% b.rb
{"a"=>["b"]}
{"a"=>["b"]}
pigeon% 

 Rather than storing the name of the class in autoload_tbl it store a
 struct 

   typedef struct {
       char *modname;
       VALUE thr;
   } autoload_st;

 and it check which thread load the module

   void
   rb_autoload_load(id)
       ID id;
   {
       char *modname;
       VALUE module;
       autoload_st *al;
    
       st_lookup(autoload_tbl, id, &al);
       if (!al->thr) {
           al->thr = rb_thread_current();
           st_insert(autoload_tbl, id, al);
           module = rb_str_new2(al->modname);
           FL_UNSET(module, FL_TAINT);
           rb_f_require(Qnil, module);
           st_delete(autoload_tbl, &id, &al);
           free(al->modname);
           free(al);
       }
       else if (rb_feature_p(al->modname, Qtrue)) {
           return;
       }
   }
 
 all tests are adapted, for example

   static int
   top_const_get(id, klassp)
       ID id;
       VALUE *klassp;
   {
       autoload_st *al;
       /* pre-defined class */
       if (st_lookup(rb_class_tbl, id, klassp)) return Qtrue;
    
       /* autoload */
       if (autoload_tbl && st_lookup(autoload_tbl, id, &al) && al->thr != rb_thread_current()) {
           rb_autoload_load(id);
           *klassp = rb_const_get(rb_cObject, id);
           return Qtrue;
       }
       return Qfalse;
   }

 This can work or not ?

Y> |./b.rb:29: ambiguous call for toto ([Array, B::C] -- [Array, Array]) (RuntimeError)
Y> |pigeon% 
Y> |
Y> | it must give an error or not ?

Y> I believe it should give an error.

 OK for the line  29 but my question was more for the line 28

pigeon% cat -n b.rb
     1  #!./ruby
     2  class B
     3     class C
     4     end
     5  end
     6  module D
     7     def toto(B::C b, String d = "")
     8        puts "B::C #{b} -- String #{d}"
     9     end
    10  end
    11
    12  class A
    13     include D
    14     def toto(B::C b, Array c = [12, 24])
    15        puts "B::C #{b} -- Array #{c.join ' '}"
    16     end
    17     def toto(Array b, B::C c = B::C.new)
    18        puts "Array #{b.join ' '} -- B::C #{c}"
    19     end
    20     def toto(Array b, Array c = [3, 4])
    21        puts "Array #{b.join ' '} -- Array #{c.join ' '}"
    22     end
    23  end
    24
    25  a = A.new
    26
    27  a.toto(B::C.new, "toto")
    28  a.toto(B::C.new)
    29  a.toto([1, 2])
pigeon% 


 If it look only in the class A it can resolve the call `a.toto(B::C.new)'
 by [B::C, Array] (this is what it do actually) but if it look also in the
 superclass, it shall see that it has an ambiguous call [B::C, String] and
 [B::C, Array]

 In this case (not all parameters are given) it must also search in the
 superclasses ?



Guy Decoux

In This Thread