On Tue, Jul 7, 2009 at 9:30 AM, Stephen C. Gilardi <squee...@mac.com> wrote:

>
> On Jul 7, 2009, at 5:51 AM, John Harrop wrote:
>
>  Somehow, code that is treated as valid when compiled a function at a time
>> is treated as invalid when compiled all at once. That pretty much proves
>> it's an implementation bug, since the same code can't both be buggy and be
>> fine at the same time. :(
>>
>
> It sounds a lot like you're running into limits on the size or count of
> something in a class file:


Shouldn't be. I'm not using :gen-class or similar, so the only classes
generated should be ones for the individual functions, and the largest one
of those works, so is not exceeding any kind of limit.

Furthermore, the clojure documentation does not state any limits on function
size or similar, so implies that there are none.

Last but not least, a change to a single function definition's interior
triggered the error. If the error was:
* too large a function, a much larger function elsewhere in the file would
fail;
* too many names or other things in the namespace, changing a single thing's
  interior without adding more top-level things would not fail;
* just about anything else, either something else would have failed earlier
or
  things would have stayed working, one or the other.

That compiling the functions one by one in the REPL, in the same namespace,
exceeds no limits is also worthy of note. It can't be a namespace size limit
then, nor can any of the individual functions be exceeding a limit. In fact,
the only thing different is that a load script of sorts has to be compiled
for a load-file or build, which evaluates the definitions and other
instructions in order. If that's hitting some sort of limit, the ability to
execute exactly the same things in the same sequence at the REPL proves that
that limit can be circumvented under the hood, simply by having load-file
more faithfully emulate pasting everything into a REPL set to the
appropriate namespace and hitting "enter" than it apparently currently does.
Is it making the load script into a single huge static method perhaps? If
so, having it break such things up under the hood into several smaller ones
with a driver that calls them all in sequence would fix it, or even having
it break up the -init class into -init, -init2, -init3 and so forth if
necessary and making these invoke one another in chains.

There's really no reason I can think of for anything like this to even be
affecting the user.

If that's true, I think Clojure should be detecting the problem and
> reporting it in a way that's helpful rather than generating a bad class
> file.


That much I'd agree with.


> Are you able and willing to make the entire Clojure source file that's
> failing for you available so it's feasible to track down the problem?
>

It's probably going to end up GPL'd eventually -- if I can get it to
actually work and stay working -- but it's not presently in a releasable
state.

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