Oh, and that's one of the main reasons why I think it's best to have our ccw compiler in a separate jvm : not unexpectedly crashing the host Eclipse if some code like this arises in user code or libraries imported by user code :-)
2009/10/14 Laurent PETIT <[email protected]> > Hi Manuel, > > I guess the loading of the code is required at least because you need it if > you don't want to get rid of the macro system. > > Macros need to be loaded if you want to compile code that uses them (they > are executed in order to produce the final code that must be compiled). > > Regards, > > -- > Laurent > > 2009/10/14 Manuel Woelker <[email protected]> > > >> Hi all, >> >> after digging around a bit in the clojure code, trying to get the >> compile to work, I found out that classes used by the compiled code >> actually classloaded by the compiler. >> >> I can totally get behind the idea that code is data. But in this case >> data is considered code, and is immediately executed. This leads to >> all kinds of fun. >> >> fun.clj: >> >> (defn foo [] (new mostly.Harmless)) >> >> mostly/Harmless.java: >> >> package mostly; >> >> public class Harmless { >> static { >> System.exit(42); >> } >> } >> >> Try compiling these two files. The clojure compiler just silently >> exits. I admit the example is a bit extreme and needlessly malicious, >> but there are valid uses for class initializers. I guess clojure files >> might suffer from the same problems. >> >> I sort of understand that for clojure compile time is runtime, but I >> still find it quite odd that a language that puts so much emphasis on >> avoiding side-effects would allow code to be executed as a side-effect >> of compilation. Shouldn't compilation be a theoretically pure function >> transforming a set of source files into a set of class files? >> >> I guess one way to achieve this would be to use "Class handles", >> instead of raw Class objects. Depending on situation these class >> handles could either delegate to Class instances or use asm to get the >> required information. This might be a best of both worlds solution. >> >> Especially for IDE's and build tools like ant or maven these >> compilation side effects can wreak havoc to the surrounding execution >> context. >> >> Cheers >> - Manuel Woelker >> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---
