Hi,

so far my examples were more based on issues with namespaces separated into
multiple pieces than on a namespace / script dichotomy.

So while I understand the interest of separating source files to be
delivered to production from test files, I don't see how this would solve
both problems I reported ? (unless in your source directory you stick to the
one namespace / one file rule).

Regards,

-- 
Laurent

2009/7/21 Howard Lewis Ship <hls...@gmail.com>

>
> The other way of looking at these issues is that this style of
> compilation will *catch* these problematic issues. It seems to me that
> you should divide src/main/clojure into multiple source folders with
> an explicit ordering (say src/main/clojure and
> src/main/clojure-scripts) to distinguish between the cases, but have
> not explicit care of compilation order within a particular folder.
>
> In that case, you may need to use the snippet multiple times, one for
> each compilation step.  Or just compile your namespaces and don't
> compile your scripts.
>
> In my situation, I have tests and scripts under src/test/clojure,
> which is not compiled.
>
> Again, I think if you have these kinds of issues, you may be setting
> yourself up for some pain that's better to face before the project
> gets too big. Often this kind of pain is solved by separating out
> sources not by language type but by additionally by usage pattern.
>
> On Tue, Jul 21, 2009 at 8:43 AM, Laurent PETIT<laurent.pe...@gmail.com>
> wrote:
> > Hi Howard,
> >
> > Thanks for sharing that.
> >
> > One point though : I have a mitigate feeling with compiling all
> namespaces
> > from the same JVM/Clojure environment. I understand that it makes the
> > compilation go fast since ant does not need to relaunch the Compiler in a
> > new jvm for each namespace, but I can see problems not detected by this,
> > that could be detected if each namespace is compiled separately:
> >
> >  * if namespace A fails to include the appropriate :require directive for
> > namespace B, but B is compiled before A, then A will compile OK because B
> > has been loaded as a side effect of being compiled (this being a good or
> bad
> > thing is another problem, for the current problem, let's just it be a
> fact).
> > But if in your app A is loaded/required before B, clabamgo! you have a
> > problem. This kind of problem generally always appears late in the
> process
> > (generally in pre-production environments or -hopefully- via continuous
> > integration if it includes integration tests).
> >
> >  * As I understand the way your script works (and I don't think it could
> do
> > a better job due to the current naming convention that doesn't help
> > distinguish files creating namespaces from files that are just scripts or
> > pieces of namespaces), even files that are just pieces of namespaces
> (which
> > I presume should contain some (in-ns) directive at their top) are passed
> to
> > the compiler. For those file that will appear in the list before the file
> > containing the namespace definition, it will result in a fail of the
> > compilation, but they will be compiled again later, when the real file
> > containing the namespace definition is compiled. BUT again, this could
> > result in compilation of "dead code not yet removed from the code base
> for
> > some reason", and subtle problems in integration. To be more concrete:
> > namespace N is made of file N.clj, which includes the (ns) directive,
> > loading files N1.clj and N2.clj as pieces of namespace N. But an old file
> > N3.clj is still there, and (Moore's law) N3.clj redefines some functions
> in
> > N2.clj. In your development box : no problem, you always load namespace N
> > from N.clj, and N3.clj has been correctly removed from the (ns)
> directive.
> > But then you compile the project for distribution .... and N3.clj is
> > compiled after N2.clj and redefines some functions of N2.clj .... whoops
> !
> >
> > Regards,
> >
> > --
> > Laurent
> >
> > 2009/7/21 Howard Lewis Ship <hls...@gmail.com>
> >>
> >> I've written an Ant build script snippet that locates .clj files and
> >> compiles them.  Not tested on Windows.
> >>
> >> http://gist.github.com/151387
> >>
> >>
> >> --
> >> Howard M. Lewis Ship
> >>
> >> Creator of Apache Tapestry
> >> Director of Open Source Technology at Formos
> >>
> >>
> >
> >
> >
> > >
> >
>
>
>
> --
> Howard M. Lewis Ship
>
> Creator of Apache Tapestry
> Director of Open Source Technology at Formos
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to