I like almost all of this a lot. My only disagreement is on prefix lists ... I wouldn't want to lose them, and in fact would prefer to see them extended to recursive prefix lists (trees).
-Jason On Nov 11, 10:12 am, "Stephen C. Gilardi" <squee...@mac.com> wrote: > On Nov 10, 2009, at 9:08 PM, John Harrop wrote: > > > (ns foo.bar.baz > > (:use [clojure.contrib.core :only (seqable?)])) > > > (and thus violates the usual clojure rule of using vectors rather > > than lists for groupings that are not invocations -- that is, > > function calls, macro calls, or special form calls). > > I agree it's too complicated and that examples would help. > > Rich has also encouraged a look at simplifying the whole thing in the > past and I would like to work on that. > > Here are some of the ideas I've liked best for how to do it. > > - replace :use, :require, and :load with one common thing with good > conventions and easy ways to configure away from convention > > - maybe call it :uses > > - require that each "libspec" (reference to a lib) be a vector, > disallowing naked symbols and prefix extraction via prefix lists. This > would mean that everything after :uses will be a vector which is known > to be a complete specification of the dependency's name and how this > lib uses it. (This regularity would help humans understand and outside- > of-Clojure tools have an easier time parsing.) > > - don't "refer" any names from the target namespace into the current > namespace by default > > - support ":only []", ":rename {}", ":exclude []", and ":refer-all > true" options > > (:refer-all true is not strictly necessary as it's a synonym > for :exclude [], but the latter is much less clear to the human reader) > > - automatically alias the leaf name of the lib as a reference to the > lib: > > - (:uses [clojure.contrib.jmx]) would allow referring to the names > in clojure.contrib.jmx by prefixing them with jmx/ > > - disallow conflicts in leaf names, requiring one or the other lib > to have an ":as" option giving another alias > > - open question as to whether using :only, :rename, :exclude, > or :refer-all would suppress the automatic alias and require an > explicit :as if an alias is also desired. > > - remove the special ":refer-clojure" clause in favor of an optional > "[clojure.core]" within :uses that changes the default for > clojure.core away from ":refer-all true" > > - (based on this thread) require that all seqs within :uses be vectors > rather than lists. > > Here is a portion of an ns form before and after these changes: > > Before: > > (:refer-clojure :exclude [read]) > (:require (clojure.contrib [graph :as graph] [fcase :as fcase]) > [clojure.contrib.stream-utils :as su]) > (:use [clojure.contrib def except server-socket] > clojure.contrib.lazy-xml > [clojure.contrib.java-utils :only [as-str]] > [clojure.stacktrace :only (root-cause)] > [clojure.walk :only [postwalk]]) > > After: > > (:uses [clojure.core :exclude [read]) > [clojure.contrib.graph] > [clojure.contrib.fcase] > [clojure.contrib.stream-utils :as su] > [clojure.contrib.def :refer-all true] > [clojure.contrib.except :refer-all true] > [clojure.contrib.server-socket :refer-all true] > [clojure.contrib.lazy-xml :refer-all true] > [clojure.contrib.java-utils :only [as-str]] > [clojure.stacktrace :only [root-cause]] > [clojure.walk :only [postwalk]]) > > (Over time I would expect many ":refer-all true" options to become > more selective references once this change makes referencing in > everything slightly more difficult.) > > I'd appreciate hearing ideas and critiques. > > --Steve > > smime.p7s > 3KViewDownload -- 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 Note that posts from new members are moderated - please be patient with your first post. 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