In fact, Rich had far better arguments than mines :-)

But again, while I agree with you that it may be time to fix things before
1.0, alas, I have no better proposal to make, so I think it's better to
stick with the current implementation, and move when the "click" happens in
our heads :-)

Regards,

-- 
Laurent

2009/2/10 Stephen C. Gilardi <squee...@mac.com>

>
> On Feb 10, 2009, at 10:02 AM, Laurent PETIT wrote:
>
>  Hello,
>>
>> Here are some (quick) thoughts :
>>
>> - The wikibook example could also be adapted to the new way of doing
>> things : having add1, otherfunc and morefuncs files in the same directory as
>> ourlib ?
>>
>
> Yes it could. They are, however, logically part of ourlib--they are only
> separate for some kind of "file size" or "grouping" convenience. The layout
> you propose gives no clue to anyone that they're related. The layout I
> propose keeps them together. The remaining uncertainty about whether they
> are standalone libs or files that are loaded by another lib is present in
> either case. One has to resolve that by looking inside them.
>
>  - if the other "parts" of the lib are not in the same directory/package as
>> the "master lib file", where will the functions defined in the loaded parts
>> be generated by AOT ? Still in the root package, or in the package with the
>> lib name at the end ? If it is the second option, then it doesn't look
>> natural to me.
>>
>
> The functions are defined in the namespace whose "ns" form is doing the
> loading. There is no change there:
>
> For example, proxy-call-with-super is a function in one of the files that
> would move. Here are the generated class files for it in the Current and New
> jars:
>
> Current:
>        clojure/core$proxy_call_with_super__5127.class
>
> New:
>        clojure/core$proxy_call_with_super__5136.class
>
> The (internal use) __init files move, but in a way that corresponds to the
> change so it's transparent:
>
> Current:
>        clojure/core__init.class
>        clojure/core_print__init.class
>        clojure/core_proxy__init.class
>        clojure/genclass__init.class
>
> New:
>        clojure/core/core_print__init.class
>        clojure/core/core_proxy__init.class
>        clojure/core/genclass__init.class
>        clojure/core__init.class
>
> The New case has these grouped together nicely. The Current doesn't. (these
> are internal use files, so there's no big advantage to that, but certainly
> no disadvantage)
>
>  - Why change ? I'm not sure there is a strong argument to change the way
>> it is done currently. Let me explain a little bit more : I too have the
>> feeling that the current way of doing things with libs may not be the final
>> one. So I think it may change in the future. But I would not like it to
>> change too often. It is sufficiently good now (almost that's my point of
>> view), and I would like to see it change for a good reason, when experience
>> help us grab the correct abstraction.
>>
>
> I don't personally use "load". Instead I use additional namespaces like
> this:
>
> clojure.contrib.sql
> clojure.contrib.sql.internal
> clojure.contrib.sql.test
>
> which ends up making the same kind of directory structure I'm proposing for
> load.
>
> I find the repetition in this code:
>
>        (ns example.ourlib
>>         (:load "ourlib/add1"
>>                "ourlib/otherfunc"
>>                "ourlib/morefuncs"))
>>
>
> to be a compelling example. It's ugly and hard to explain.
>
> I don't have a clear global picture of Clojure's timeline, but now seems a
> good time to make this change to me.
>
>  Again, those are very quick thoughts (no more time to think about it right
>> now),
>>
>
> Thanks very much for responding!
>
> --Steve
>
>
>  2009/2/10 Stephen C. Gilardi <squee...@mac.com>
>> I came across this when updating the wikibook concepts page, Libraries
>> section, to be correct for current Clojure behavior.
>>
>> In an early implementation of the code that handles libs, the resource
>> (file) for lib a.b.c was at the path "a/b/c/c.clj" within classpath. At that
>> time it was natural to consider "a/b/c/" as the lib's directory.
>>
>> Later, the resource for the library a.b.c changed to the path "a/b/c.clj"
>> and the lib's directory became "a/b/".
>>
>> I think the lib handling code should be changed such that the directory
>> associated with lib a.b.c is (again) "a/b/c/".
>>
>> The advantage of this comes into focus most sharply in a ":load" clause
>> within "ns".
>>
>> Here's the updated example from the wikibook:
>>
>>       (ns example.ourlib
>>         (:load "ourlib/add1"
>>                "ourlib/otherfunc"
>>                "ourlib/morefuncs"))
>>
>> With the change I'm proposing, this would become:
>>
>>       (ns example.ourlib
>>         (:load "add1"
>>                "otherfunc"
>>                "morefuncs"))
>>
>> Currently core.clj ends with 3 load calls to load in more pieces of
>> clojure.core that were each big enough to warrant a separate file.
>>
>> The directory structure in src/clj/clojure is (in part):
>>
>>       src/clj/clojure/
>>               core.clj
>>               core_print.clj
>>               core_proxy.clj
>>               genclass.clj
>>
>> With the proposed change, this would become:
>>
>>       src/clj/clojure/
>>               core/
>>                       core_print.clj
>>                       core_proxy.clj
>>                       genclass.clj
>>               core.clj
>>
>> or, perhaps removing the "core_" prefixes:
>>
>>       src/clj/clojure/
>>               core/
>>                       print.clj
>>                       proxy.clj
>>                       genclass.clj
>>               core.clj
>>
>> There is also at least one lib in clojure-contrib that would need to be
>> updated.
>>
>> I welcome discussion of this proposed change with the goal of entering an
>> issue and providing a patch. In the patch, I would also update the doc
>> string for clojure/require to reflect current Clojure behavior.
>>
>> Thanks,
>>
>> --Steve
>>
>>
>>
>> >>
>>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to