On Feb 23, 2009, at 1:54 PM, Chouser wrote:

After kicking around some alternatives, I realized 'use' is sufficient
for all cases:

(ns n01se.net.graph.issues
 (:import (java.text SimpleDateFormat ParsePosition)
          (java.util GregorianCalendar Calendar)
          (org.jfree.chart ChartFrame))
 (:use [clojure.zip                    :only (xml-zip node)]
       [clojure.contrib.zip-filter     :as zf :only ()]
       [clojure.contrib.zip-filter.xml :only (xml-> attr text)]
       [clojure.contrib.lazy-xml       :only (parse-trim)]
       [clojure.contrib.seq-utils      :only (reductions)]
       [com.markmfredrickson.dejcartes :as chart :only ()]))

This is much prettier to my eye, but has a couple things that could be
better.  So, feature request #1 is that if a libspec has an ":as"
option, that the ":only []" option be implied.  That is, if I'm
aliasing an namespace, don't by default refer in all that namespaces
vars.

While this would technically be a breaking change, it seems unlikely
to me that it will cause much if any real-world disruption.  Any usage
that actually intended to both alias the namespace and refer all the
symbols could say [my.lib :as mylib :exclude ()]

I like this a lot.

At that point, it seems only a small step to remove "require" entirely which I think would be a long-term plus--coalescing two very similar things (require and use) into one (use) with (possibly) an additional option.

In order to keep it clear what non-core symbols refer to, several of us have been recommending always using either :as or :only and only very rarely if ever a "naked" use.

How about this as an alternative in the same spirit as your proposal:

- change the name of :require to :use -- :use with no options changes from an implicit "refer all" to an implicit "refer none"

        - :as, :only, :exclude, and :rename work as they do now

- add an :all option to cover the case of really wanting to refer in all of the subject namespace. It would have the same effect as ":exclude ()". (Alternatively, perhaps we intend for this to be a rare enough use case that ":exclude ()" by itself would suffice.)

Of course this would be a bigger, definitely breaking change, but not breakage that will be at all difficult to find or fix in old or new code.

--Steve

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to