I was just thinking about this over the the weekend, almost exactly as you have 
written Joel.  I was amazed to read your post.  The simple make object! idea is
what I came up with too.  I strongly agree that such a system would especially benifit 
our community.

I really would like to know RT's time frame for the release of thier module system.

--Ryan


Joel Neely wrote:

> Those who are familiar with CPAN (the Comprehensive Perl
> Archive Network) know that it is a significant factor in
> the growth -- and ease of use -- of Perl.  CPAN modules
> provide:
>
> 1)  A community-maintained, standard namespace for modules,
>     (e.g., a reasonable tree-structured taxonomy which
>     helps the programmer remember "where" a module is).
> 2)  A collection of mirror sites from which modules may be
>     obtained.
> 3)  A simple set of mechanisms for acquiring a module and
>     installing it in the standard place on one's local box.
> 4)  A means of ensuring that a module has been successfully
>     loaded into a running program that wishes to use it.
> 5)  A means of controlling the effect that loading the
>     module has on the global namespace.
> 6)  A rich source of examples for newcomers learning the
>     language, as well as for older hands wanting to polish
>     their style.
>
> I've seen many useful pieces of REBOL code written and
> shared during the time I've been subscribed to this list.
> I've written one or two tidbits that I hope someone has
> found useful.  But...  where is all of this good stuff???
>
> Some of it is in the mailing list archives, some of it
> is on various individual or group sites, some may be
> lost.  This is sad, since there are many good wheels out
> there that don't need to be re-invented.
>
> Several of us (myself included) have written our own tools
> for "include"-ing a REBOL module from a local library into a
> running script.  However, it occurs to me that this kind of
> infrastructure itself is a wheel that doesn't need to be
> re-invented.
>
> All of this musing motivates a couple of specific questions:
>
> 1)  Can we -- as a community -- begin to build the same kind
>     of resource for REBOL that CPAN serves for Perl?
> 2)  Can we agree on (or at least discuss) the kinds of
>     standards/conventions/features that would make such a
>     resource effective for the old hands and easy for the
>     new kids on the block?
>
> Let me give an example of the kind of thing I mean in the
> second point.  I've been toying with the idea that a re-
> usable code unit could take the form of an "anonymous"
> object, something like the following:
>
> 8<------------------------------------------------------------
> rebol [
>     title:   "Component test"
>     file:    "cmptest.r"
>     author:  "Joel Neely"
>     version: 0.1.0
>     date:    08-May-2001
>     history: [
>         0.1.0 [
>             08-May-2001 {Preliminary proposal draft}
>         ]
>     ]
> ]
>
> make object! [
>     x: 1
>     y: 42
>     sum: does [x + y]
> ]
> 8<------------------------------------------------------------
>
> At some level down under the hood, this could be included into
> another script by the equivalent of...
>
> 8<------------------------------------------------------------
> >> testobject: do %cmptest.r
> >> testobject/sum
> == 43
> 8<------------------------------------------------------------
>
> but also by embedding inside other objects, as in...
>
> 8<------------------------------------------------------------
> >> foo: make object! [
> [    red: 23
> [    yellow: 48
> [    caramel: do %cmptest.r
> [    ]
> >> source foo
> foo:
> make object! [
>     red: 23
>     yellow: 48
>     caramel:
>     make object! [
>         x: 1
>         y: 42
>         sum: func [][x + y]
>     ]
> ]
> >> foo/caramel/sum
> == 43
> 8<------------------------------------------------------------
>
> The point of the anonymity is, of course, to avoid the danger
> of conflicting with other words defined by the code that uses
> the unit (or with words defined by other units).
>
> The point of the phrase "at some level under the hood" above
> is that I don't think a simple "do %unitname.r" is the right
> solution.  I suggest that the unit/module/component management
> mechanism contain the idea of a standard path (or set of paths)
> so that units stored in the canonical place are accessible to
> any using code regardless of where in the directory structure
> it (either one!) appears.
>
> Therefore, the actual usage might resemble something like
>
> 8<------------------------------------------------------------
> unit/add-unit-path %lib/ideas
>
> >> foo: make object! [
> [    red: 23
> [    yellow: 48
> [    caramel: unit/do %cmptest.r
> [    ]
> ...
> 8<------------------------------------------------------------
>
> which might imply that the file cmptest.r is in the lib/ideas
> subdirectory under whatever is the standard library path (or
> one of the standard library paths!) on the current box.  Thus
> the code above wouldn't change if I move to a different box or
> platform with different library placement conventions (this,
> of course, assumes that */lib/ideas/cmptest.r is in the "right"
> library path for the other box/platform).
>
> Comments, suggestions, alternatives, collaborators???
>
> -jn-
> --
> To unsubscribe from this list, please send an email to
> [EMAIL PROTECTED] with "unsubscribe" in the
> subject, without the quotes.

--


     Ryan Cole
 Programmer Analyst
 www.iesco-dms.com
    707-468-5400

"I am enough of an artist to draw freely upon my imagination.
Imagination is more important than knowledge. Knowledge is
limited. Imagination encircles the world." -Einstein


-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to