Thank you Colin,

I think, the main problem is nobody has ever tried to write an article 
"Class loading in Clojure". If such article existed, it would make life 
much easier for many developers.

Regards,
Vladimir

On Monday, December 10, 2012 8:32:36 PM UTC+4, Colin Jones wrote:
>
> Right, this is because nREPL uses clojure.main/repl each time it does an 
> evaluation. See http://dev.clojure.org/jira/browse/NREPL-31 for a related 
> issue that was addressed by modifying clojure.main/repl.
>
> I'm not sure where a fix for this would belong (nREPL or clojure.main), 
> but I went ahead and opened an nREPL JIRA issue to track it: 
> http://dev.clojure.org/jira/browse/NREPL-36
>
> - Colin
>
>
>
>
> On Monday, December 10, 2012 2:46:10 AM UTC-6, Vladimir Tsichevski wrote:
>>
>> Hi,
>>
>> just found that every interaction with Clojure REPL causes one 
>> more DynamicClassLoader put on the Thread context class loader chain.
>>
>> Here is how clojure.main/repl beginning looks like:
>>
>>   (let [cl (.getContextClassLoader (Thread/currentThread))]
>>     (.setContextClassLoader (Thread/currentThread) 
>> (clojure.lang.DynamicClassLoader. cl)))
>>
>> And this is how to observe it:
>>
>> nREPL server started on port 19987
>> REPL-y 0.1.0-beta10
>> Clojure 1.4.0
>>     Exit: Control+D or (exit) or (quit)
>> Commands: (user/help)
>>     Docs: (doc function-name-here)
>>           (find-doc "part-of-name-here")
>>   Source: (source function-name-here)
>>           (user/sourcery function-name-here)
>>  Javadoc: (javadoc java-object-or-class-here)
>> Examples from clojuredocs.org: [clojuredocs or cdoc]
>>           (user/clojuredocs name-here)
>>           (user/clojuredocs "ns-here" "name-here")
>> user=> (defn print-class-loader-stack
>>   ([]
>>      (print-class-loader-stack (.getContextClassLoader 
>> (Thread/currentThread))))
>>   ([cl]
>>      (if cl
>>        (do
>>          (pprint cl)
>>          (print-class-loader-stack (.getParent cl)))
>>        (println "*Top*"))))
>>   #_=>   #_=>   #_=>   #_=>   #_=>   #_=>   #_=>   #_=> 
>> #'user/print-class-loader-stack
>> user=> (print-class-loader-stack)
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@26a0c73f>
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@6f603bdc>
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@2f368c5d>
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@5b31fd9>
>> #<AppClassLoader sun.misc.Launcher$AppClassLoader@4aad3ba4>
>> #<ExtClassLoader sun.misc.Launcher$ExtClassLoader@3326b249>
>> *Top*
>> nil
>> user=> 1
>> 1
>> user=> 1
>> 1
>> user=> 1
>> 1
>> user=> 1
>> 1
>> user=> (print-class-loader-stack)
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@5be04861>
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@7481933a>
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@273f212a>
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@4178feba>
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@5323961b>
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@26a0c73f>
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@6f603bdc>
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@2f368c5d>
>> #<DynamicClassLoader clojure.lang.DynamicClassLoader@5b31fd9>
>> #<AppClassLoader sun.misc.Launcher$AppClassLoader@4aad3ba4>
>> #<ExtClassLoader sun.misc.Launcher$ExtClassLoader@3326b249>
>> *Top*
>> nil
>> user=> 
>>
>

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