There is syntax to ns. It's not syntax in the traditional way, but it's
essentially the same thing. And Greg is right that it often causes
confusion.

I +1 the second version. The first version's :as-class was too messy.

It could very easily be made backwards-compliant as well. All we have to do
is check if the first item in the list/vec is a keyword. If it is, then
it's the old-style ns. If not, it's the new.

Jonathan

On Mon, Aug 5, 2013 at 8:14 PM, Timothy Baldridge <tbaldri...@gmail.com>wrote:

> There's no syntax to ns, ns simply assumes that everything after the
> symbol/doc is in the form (function-to-execute & args). The only special
> case is gen-class, and even that is fixed up to look like everything else.
> Why invent special syntax where none exists now?
>
> I think the issue is more around people not understanding the difference
> (and problems behind) refer vs import instead of an actual problem with the
> require macro.
>
> On that subject when last discussed, it was mentioned that Clojure doesn't
> have a import * method because it's basically impossible to implement.
>
> To quote Rich: "Java packages are not enumerable. The only way to do so
> is to walk the classpath/jars etc. I don't think import * is a good idea,
> as it brings more into a namespace than you are going to use, making Clojure's
> namespace enumeration, e.g. ns-imports, that much less useful. "
>
>
> https://groups.google.com/forum/#!searchin/clojure/import$20wildcard/clojure/-gCg_0wmT5o/LnxDCU6W538J
>
> Timothy
>
>
> On Mon, Aug 5, 2013 at 11:58 AM, Greg <g...@kinostudios.com> wrote:
>
>> I don't really understand why we would need to simplify something that is
>> already so simple.
>>
>>
>> Because it's not simple to many people. It's one of the main things
>> people use as an example when discussing complexity in clojure.
>>
>> There are many threads and blog posts where people explain why they
>> consider the "ns" declaration to be complicated.
>>
>>
>> That being said, if you really want your syntax above, nothing is
>> stopping you from using your own import function
>>
>>
>> When I have time, I might do something like that, but not the way you
>> illustrated, because that's unnecessarily complicated in my view.
>>
>> I might either add a hook to to 'ns', or if that's not possible,
>> overwrite it to support both syntaxes, or create a different name, like
>> "include".
>>
>> Then it would be this:
>>
>> (include two.namespace
>>
>>   [clojure :refer-all [core :except (ancestors printf)]]
>>   [core :refer-all [matrix math bs]]
>>   [ring.adapter.jetty :refer (run-jetty)]
>>   [ring.middleware.file :refer (wrap-file)]
>>   [ring.middleware.file-info :refer (wrap-file-info)]
>>   [ring.middleware.stacktrace :refer (wrap-stacktrace)]
>>   [ring.util.response :refer (file-response)]
>>   [one :refer [reload middleware]]
>>
>>   [net.cgrand :refer [enlive-html :as html]]
>>   [org.apache.maven.artifact.resolver :refer ArtifactResolver]
>>   [java.io :refer File])
>>
>>
>> Instead of:
>>
>>
>> (ns one.fresh-server
>>   (:refer-clojure :exclude [ancestors printf])
>>   (:use core.matrix
>>         [ring.adapter.jetty :only (run-jetty)]
>>         [ring.middleware.file :only (wrap-file)]
>>         [ring.middleware.file-info :only (wrap-file-info)]
>>         [ring.middleware.stacktrace :only (wrap-stacktrace)]
>>         [ring.util.response :only (file-response)])
>>   (:require [one.reload :as reload]
>>             [one.middleware :as middleware]
>>             [net.cgrand.enlive-html :as html])
>>   (:import (org.apache.maven.artifact.resolver ArtifactResolver)
>>            (java.io File))))
>>
>>
>> - Greg
>>
>> --
>> Please do not email me anything that you are not comfortable also sharing
>> with the NSA.
>>
>> On Aug 5, 2013, at 1:46 PM, Timothy Baldridge <tbaldri...@gmail.com>
>> wrote:
>>
>> I don't really understand why we would need to simplify something that is
>> already so simple. Teach people the following:
>>
>> (ns my-namespace
>>   ...calls to import fns...)
>>
>> Where import functions can be either :require or :import:
>>
>> (:import [clojure.lang Number AFn]) ;; use for Java imports
>>
>> (:require [clojure.string :as string :refer [split]]) ;; use for clojure
>> imports
>>
>> :refer :all can be used to refer everything
>>
>> Boom! everything you need to know to get started with Clojure's ns.
>> What's the problem?
>>
>> That being said, if you really want your syntax above, nothing is
>> stopping you from using your own import function, they are pluggable after
>> all:
>>
>> (ns foo
>>   (:println "Hello World"))
>>
>> Hello World
>> => nil
>>
>> So you could easily write something like this:
>>
>> (ns foo
>>   (:simple-ns/simple
>>     [clojure.core match logic async]))
>>
>> Timothy Baldridge
>>
>>
>>
>>
>> On Mon, Aug 5, 2013 at 11:21 AM, Greg <g...@kinostudios.com> wrote:
>>
>>> OK, that's enough from me on this for now, gotta run (lot of work to
>>> do!).
>>>
>>>
>>> Sorry, after sending that, I couldn't resist simplifying 'ns' even
>>> further!
>>>
>>> (ns two.namespace
>>>   "optional doc string goes here"
>>>   [core :refer-all [matrix math bs]]
>>>   [clojure :refer-all [core :except (ancestors printf)]]
>>>   [ring.adapter.jetty :refer (run-jetty)]
>>>   [ring.middleware.file :refer (wrap-file)]
>>>   [ring.middleware.file-info :refer (wrap-file-info)]
>>>   [ring.middleware.stacktrace :refer (wrap-stacktrace)]
>>>   [ring.util.response :refer (file-response)]
>>>   [one :refer reload]
>>>   [one :refer middleware]
>>>   [net.cgrand :refer [enlive-html :as html]]
>>>   [org.apache.maven.artifact.resolver :refer ArtifactResolver]
>>>   [java.io :refer File])
>>>
>>>
>>> Look at the beauty of that! :-D
>>>
>>> Now not only have we gotten rid of :use, :require, :import,
>>> :refer-clojure, but we're starting to chip away at the mountain of keywords
>>> and we still have *all* of the power we had before! We got rid of :as-ns,
>>> :as-class and :all!
>>>
>>> Keep simplifying till you can't simplify anymore! That's the Lisp way!
>>> :-)
>>>
>>> - Greg
>>>
>>> --
>>> Please do not email me anything that you are not comfortable also
>>> sharing with the NSA.
>>>
>>> On Aug 5, 2013, at 1:14 PM, Greg <g...@kinostudios.com> wrote:
>>>
>>> (ns one.fresh-server
>>>  [core :refer-all [matrix math bs]])
>>>
>>>
>>> I like it.
>>>
>>>
>>> Ideally, the whole thing would be well thought out enough to allow these
>>> very basic principles to be combined in complicated ways (kinda like the
>>> idea behind Lisp itself).
>>>
>>> Getting rid of ambiguities might help make it more readable and
>>> "generalizable". For example, it could be specified that vectors can
>>> contain only namespaces and keywords, and lists can only contain functions.
>>>
>>> If that rule is applied, the original example plus the :refer-all
>>> keyword would look like this:
>>>
>>> *New School:*
>>>
>>> (ns two.namespace
>>>   "optional doc string goes here"
>>>   [core :refer-all [matrix math bs]]
>>>   [clojure :refer-all [core :except (ancestors printf)]]
>>>   [ring.adapter.jetty :refer (run-jetty)]
>>>   [ring.middleware.file :refer (wrap-file)]
>>>   [ring.middleware.file-info :refer (wrap-file-info)]
>>>   [ring.middleware.stacktrace :refer (wrap-stacktrace)]
>>>   [ring.util.response :refer (file-response)]
>>>   [one.reload :as-ns]
>>>   [one.middleware :as-ns]
>>>   [net.cgrand.enlive-html :as html]
>>>   [org.apache.maven.artifact.resolver.ArtifactResolver :as-class]
>>>   [java.io.File :as-class])
>>>
>>>
>>> Now the functions are emphasized as being functions (because only
>>> functions are allowed in lists).
>>>
>>> Notice that this:
>>>
>>> [clojure.core :refer-except (ancestors printf)]
>>>
>>>
>>> Has now changed to:
>>>
>>> [clojure :refer-all [core :except (ancestors printf)]]
>>>
>>>
>>> What if we want to :refer-all everything that's in the first level of
>>> the namespace? I see no reason why we couldn't just do this then:
>>>
>>> [:refer-all [core]]
>>>
>>>
>>> Or optionally, in the case where there's just one namespace in the
>>> vector:
>>>
>>> [:refer-all core]
>>>
>>>
>>> OK, that's enough from me on this for now, gotta run (lot of work to
>>> do!).
>>>
>>> - Greg
>>>
>>> --
>>> Please do not email me anything that you are not comfortable also
>>> sharing with the NSA.
>>>
>>> On Aug 5, 2013, at 12:59 PM, Lee Spector <lspec...@hampshire.edu> wrote:
>>>
>>>
>>> On Aug 5, 2013, at 12:41 PM, Greg wrote:
>>>
>>> Can you build in a way to get :require :refer :all to work on a bunch of
>>> sub-namespaces together on one line, as one currently can with :use,
>>> without listing each namespace completely on a separate line with a
>>> separate :refer :all?
>>>
>>>
>>> Certainly. I'm not saying this is how the exact syntax would go, but the
>>> general idea is to rely on the keywords to specify what (and how) you want
>>> to import stuff:
>>>
>>> Instead of:
>>>
>>> (ns one.fresh-server
>>>  (:use (core matrix math bs))
>>>
>>> You could do something like:
>>>
>>> (ns one.fresh-server
>>>  [core :refer-all [matrix math bs]])
>>>
>>>
>>> I like it.
>>>
>>> I can't personally assess the costs and benefits of the overall
>>> proposal, but this would address my concern nicely.
>>>
>>> -Lee
>>>
>>> --
>>> --
>>> 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
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to clojure+unsubscr...@googlegroups.com.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>>
>>>
>>>
>>
>>
>> --
>> “One of the main causes of the fall of the Roman Empire was that–lacking
>> zero–they had no way to indicate successful termination of their C
>> programs.”
>> (Robert Firth)
>>
>> --
>> --
>> 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
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>
>>
>>
>
>
> --
> “One of the main causes of the fall of the Roman Empire was that–lacking
> zero–they had no way to indicate successful termination of their C
> programs.”
> (Robert Firth)
>
> --
> --
> 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
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to