[#13775] Problems with racc rule definitions — Michael Neumann <neumann@...>

15 messages 2001/04/17
[#13795] Re: Problems with racc rule definitions — Minero Aoki <aamine@...> 2001/04/18

Hi,

[#13940] From Guido, with love... — Dave Thomas <Dave@...>

52 messages 2001/04/20

[#13953] regexp — James Ponder <james@...>

Hi, I'm new to ruby and am coming from a perl background - therefore I

19 messages 2001/04/21

[#14033] Distributed Ruby and heterogeneous networks — harryo@... (Harry Ohlsen)

I wrote my first small distributed application yesterday and it worked

15 messages 2001/04/22

[#14040] RCR: getClassFromString method — ptkwt@...1.aracnet.com (Phil Tomson)

It would be nice to have a function that returns a class type given a

20 messages 2001/04/22

[#14130] Re: Ruby mascot proposal — "Conrad Schneiker" <schneik@...>

Guy N. Hurst wrote:

21 messages 2001/04/24
[#14148] Re: Ruby mascot proposal — Stephen White <spwhite@...> 2001/04/24

On Tue, 24 Apr 2001, Conrad Schneiker wrote:

[#14188] Re: Ruby mascot proposal — matz@... (Yukihiro Matsumoto) 2001/04/25

Hi,

[#14193] Re: Ruby mascot proposal — "W. Kent Starr" <elderburn@...> 2001/04/25

On Tuesday 24 April 2001 23:02, Yukihiro Matsumoto wrote:

[#14138] Re: python on the smalltalk VM — Conrad Schneiker <schneik@...>

FYI: Thought this might be of interest to the JRuby and Ruby/GUI folks.

27 messages 2001/04/24
[#14153] Re: python on the smalltalk VM — Andrew Kuchling <akuchlin@...> 2001/04/24

Conrad Schneiker <schneik@austin.ibm.com> writes:

[#14154] array#flatten! question — Jim Freeze <jim@...> 2001/04/24

Hello.

[#14159] Can I insert into an array — Jim Freeze <jim@...> 2001/04/24

Ok, this may be a dumb question, but, is it possible to insert into an

[#14162] Re: Can I insert into an array — Dave Thomas <Dave@...> 2001/04/24

Jim Freeze <jim@freeze.org> writes:

[#14289] RCR: Array#insert — Shugo Maeda <shugo@...> 2001/04/27

At Wed, 25 Apr 2001 01:28:36 +0900,

[#14221] An or in an if. — Tim Pettman <tjp@...>

Hi there,

18 messages 2001/04/25

[#14267] Re: Ruby mascot proposal — "Conrad Schneiker" <schneik@...>

Danny van Bruggen,

16 messages 2001/04/26

[#14452] How to do it the Ruby-way 3 — Stefan Matthias Aust <sma@3plus4.de>

First a question: Why is

21 messages 2001/04/30

[ruby-talk:14164] Re: RCR, strange things in $:

From: Dave Thomas <Dave@...>
Date: 2001-04-24 17:09:51 UTC
List: ruby-talk #14164
matz@zetabits.com (Yukihiro Matsumoto) writes:

> Hmm, both loading from zip archive and versioning are intersting.
> I'd like to see bit more detailed proposal to start up active
> discussion.

OK, just to get the ball rolling.

Let's have a new class, RubyLoader:

  class RubyLoader
    private :initialize

    def require(*args)
      src = find_loadable_file(*args)
      src.load(*args) unless already_loaded(src)
    end

    def find_loadable_file(*args)
      ...
    end

    def already_loaded(src)
      ...
    end

    attr_accessor :search_path
    attr :loaded_files

  end

This internal split of finding, followed by loading, allows us to
override both behaviors. Versioning could be implemented at the 'find'
level. We also make the actual act of loading specific to the thing
found, so that we can support unzipping and network fetching here.

We then implement a collection of loaders, say LoaderChain. This
implements 'require' by calling the require method of each of its
contained loaders in turn. This allows us to implement sets of totally
different load behaviors and still have them appear unified at the user
level.

   LOADER_CHAIN.add_ruby_loader(XML_RPC_LOADER.new(url))

   require 'ruby://lib/net/webdav'

Then we do some clever aliasing to make all this look compatible with
the existing $:, $", and require.

In terms of versioning, I'd like to see some conventions appear.

Every library file could implement some standard local
variables. These won't pollute the user's name space, as they
disappear during a load.

  version = '1.2.3a'
  author  = 'dave@thomases.com'
  needs   = [ 'xmlparser >=1.2', 'soap ==2.0', 'errmsg <3.14']

  module DemoModule

     # ...
  end

(OK, so the actual syntax is ugly: remember you're supposed to
disagree with this :)

Then we could have a versioning version of RubyLoader that checked the
version of the loaded module

   require 'demomodule >= 1.2'

or
   require 'demomodule' { |version, author|
                                version >= '1.2' and author !~ /dave/
                        }

This would require an interpreter change to have 'load' return a
binding object giving us access to the source-file local variables.


Dave
   

In This Thread