Whoops — when I said "with an extra [namespace] for each protocol", I meant "with an extra [namespace] for each protocol implementation".
On Sunday, 14 April 2013 18:21:19 UTC+1, Simon Katz wrote: > > I'm in the process of trying to work out how I want to use namespaces when > implementing libraries or subsystems. > > I'm aware of several approaches: > > - Use a single namespace, making only the API public (either with > everything in a single file or breaking things into multiple files and > using `load`). > - Use implementation namespaces and create an API in a separate > namespace (perhaps using Potemkin to simplify the creation of the API). > - Have lots of smaller namespaces and have the client need to know > which of the smaller namespaces to use for what. > - (And some variations.) > > > I'm fairly happy with large namespaces, so I'm leaning towards using a > single namespace. > > There's one thing I've come across that doesn't fit nicely with putting > everything into a single namespace, though. A Google search for "Clojure > in the Large" led me to a nice talk by Stuart Sierra ( > http://vimeo.com/46163090) in which he suggests putting protocols and > their implementations in separate namespaces, because, during development > reloading a protocol breaks existing instances. (I know Stuart gave a > similarly presentation at Clojure West recently, but I don't think the > video of that is available yet.) > > Having the separate namespaces would be fine if I was heading down the > route of having the client know about multiple namespaces, but I don't > really want to do that. With the single namespace approach (with an extra > one for each protocol I define), I end up wanting circular dependencies — a > namespace containing a protocol implementation needs to refer to the main > namespace in order to mention the protocol, and the main namespace needs to > refer to the namespaces containing protocol implementations in order to > invoke constructors. > > Maybe I'll just put everything in a single namespace and be careful about > reloading the whole thing when I care about existing instances of protocols. > > Any other suggestions? > > Simon > -- -- 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.