I was able to fork your repo and created a different 'growing expression'
that nests each one inside the 'catch' clause of the enclosing try
expression, which is what the macro-expansion of core.match `match`
expressions do as they get longer.

It shows that the longest class file names are getting longer.  I believe
that at least the body of the catch clause is enclosed in a new function by
the Clojure compiler, if not the main body of the try.

https://github.com/jafingerhut/nestedrepro

Andy


On Sun, Oct 7, 2018 at 8:36 AM Laurens Van Houtven <_...@lvh.io> wrote:

> FWIW: I tried to reproduce it here: https://github.com/lvh/nestedrepro
> but I was unable to cause these sorts of errors using try/catch and do.
>
> On Sat, Oct 6, 2018 at 6:17 PM Laurens Van Houtven <_...@lvh.io> wrote:
>
>> I'm hitting CLJ-1852 [0] (Clojure-generated class names length exceed
>> file-system limit) with a large core.match expression. I have verified that
>> it is the number of clauses in core.match: compilation works as soon as I
>> reduce it, and looking at `target/` it is actually producing very long
>> filenames a la:
>>
>>
>> 'iddqd$xyzzy$fn__19779$fn__19788$fn__19789$fn__19790$fn__19793$fn__19794$fn__19795$fn__19796$fn__19797$fn__19814$fn__19815$fn__19816$fn__19819$fn__19820$fn__19823$fn__19824$fn__19825$fn__19826.class'
>>
>> However, I don't quite understand _why_ core.match produces such long
>> filenames. The error and filename suggest the problem is deeply nested
>> fn*s. Judging by macroexpand-all it's just a ton of let and try/catch which
>> I'd expect don't compile to fn*s internally (I'm aware of the equivalent
>> between let and lambda but I expect that's not really how it's
>> implemented). I am trying to understand why it's producing all of these
>> nested fns as compiled classes to see if I can somehow work around this
>> (without rewriting the function completely, hopefully!).
>>
>> I've found a similar reproducer here[1]. Unfortunately it doesn't do a
>> better job explaining _why_ the compiler emits that. Any tools for helping
>> me understand the compiler would be helpful. I'm already quite comfortable
>> with JVM bytecode and asm. Is the best way to figure this out just to read
>> Compiler.java?
>>
>>
>> [0]: https://dev.clojure.org/jira/browse/CLJ-1852
>> [1]: https://github.com/simonpure/clojure-match-io-exception
>>
>> --
> 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/d/optout.
>

-- 
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/d/optout.

Reply via email to