Re: casting error
Brian Craft writes: Hi Brian, > The cast error, however, persists. It's something to do with reloading > the namespace with the defrecord. Ah, yes, I've had that, too, even without AOT compilation. Basically, you simply cannot reload/recompile protocols, deftypes, definterfaces, and defrecords and expect that functions working with them that are not recompiled afterwards still do their job. I think the reason is that all those generate interfaces implicitly, and after a reload, you get a new interface with the same name as the original one but still different and loaded from a new class loader. Thus, the old one is inaccessible and things like checking if an old instance of your record is an instance of the (now new) interface will fail. So I usually put all my protocols etc. in a separate file that I don't need to recompile frequently. Then I can recompile the namespaces/files that use those data types and protocols freely. If I really need to change a data type or protocol, well then I need to recompile the complete project. For that, clojure/tools.namespace is nice. Bye, Tassilo -- 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.
Re: casting error
I have a wonky work-around. The file that is aot compiled depends on the file with the defrecord reference. I eliminated the direct dependency and exported a function that does an alter-root-var. So the provider injects the required value into the dependent. On Wednesday, July 16, 2014 9:33:52 PM UTC-7, Brian Craft wrote: > > That does, in fact, fix the compile issue. Thanks! > > The cast error, however, persists. It's something to do with reloading the > namespace with the defrecord. Once it happens, it takes a "lein clean" to > clear. After that it works w/o error until the namespace is reloaded. It's > something to do with referencing the defrecord from another namespace, or > aot compiling. So far I haven't found a solution. It appears that an aot > compiled file can't reference a function with a type hint for a defrecord > if the namespace with that defrecord is then dynamically reloaded. Or > something. It all looks exceedingly complex at this point. > > > On Wednesday, July 16, 2014 8:36:35 PM UTC-7, Andy Fingerhut wrote: >> >> Try fully qualifying the class name in the return type hint. >> >> Might be the same symptom as in this ticket: >> http://dev.clojure.org/jira/browse/CLJ-1232 >> >> Andy >> >> >> On Wed, Jul 16, 2014 at 7:18 PM, Brian Craft wrote: >> >>> Apparently this is due to a class loader problem. >>> >>> I moved it into a different file to try to avoid the problem. However >>> I'm now finding that nothing referencing foo will compile, throwing this >>> error: >>> >>> CompilerException java.lang.IllegalArgumentException: Unable to resolve >>> classname: PStatement >>> >>> No idea what to do with this. Is it not possible to type hint methods >>> returning records? >>> >>> On Wednesday, July 16, 2014 4:21:22 PM UTC-7, Brian Craft wrote: Trying to eliminate a reflection warning, I put a type hint on a function, like (defn foo ^PStatement [] ...) which compiles without the reflection warnings, but at run time I get ClassCastException java.lang.ClassCastException: cavm.h2.PStatement cannot be cast to cavm.h2.PStatement What does this mean? PStatement is a defrecord type. >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To post to this group, send email to clo...@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+u...@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+u...@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.
Re: casting error
That does, in fact, fix the compile issue. Thanks! The cast error, however, persists. It's something to do with reloading the namespace with the defrecord. Once it happens, it takes a "lein clean" to clear. After that it works w/o error until the namespace is reloaded. It's something to do with referencing the defrecord from another namespace, or aot compiling. So far I haven't found a solution. It appears that an aot compiled file can't reference a function with a type hint for a defrecord if the namespace with that defrecord is then dynamically reloaded. Or something. It all looks exceedingly complex at this point. On Wednesday, July 16, 2014 8:36:35 PM UTC-7, Andy Fingerhut wrote: > > Try fully qualifying the class name in the return type hint. > > Might be the same symptom as in this ticket: > http://dev.clojure.org/jira/browse/CLJ-1232 > > Andy > > > On Wed, Jul 16, 2014 at 7:18 PM, Brian Craft > wrote: > >> Apparently this is due to a class loader problem. >> >> I moved it into a different file to try to avoid the problem. However I'm >> now finding that nothing referencing foo will compile, throwing this error: >> >> CompilerException java.lang.IllegalArgumentException: Unable to resolve >> classname: PStatement >> >> No idea what to do with this. Is it not possible to type hint methods >> returning records? >> >> On Wednesday, July 16, 2014 4:21:22 PM UTC-7, Brian Craft wrote: >>> >>> Trying to eliminate a reflection warning, I put a type hint on a >>> function, like >>> >>> (defn foo ^PStatement [] ...) >>> >>> which compiles without the reflection warnings, but at run time I get >>> >>> ClassCastException java.lang.ClassCastException: cavm.h2.PStatement >>> cannot be cast to cavm.h2.PStatement >>> >>> What does this mean? PStatement is a defrecord type. >>> >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@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+u...@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+u...@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.
Re: casting error
Try fully qualifying the class name in the return type hint. Might be the same symptom as in this ticket: http://dev.clojure.org/jira/browse/CLJ-1232 Andy On Wed, Jul 16, 2014 at 7:18 PM, Brian Craft wrote: > Apparently this is due to a class loader problem. > > I moved it into a different file to try to avoid the problem. However I'm > now finding that nothing referencing foo will compile, throwing this error: > > CompilerException java.lang.IllegalArgumentException: Unable to resolve > classname: PStatement > > No idea what to do with this. Is it not possible to type hint methods > returning records? > > On Wednesday, July 16, 2014 4:21:22 PM UTC-7, Brian Craft wrote: >> >> Trying to eliminate a reflection warning, I put a type hint on a >> function, like >> >> (defn foo ^PStatement [] ...) >> >> which compiles without the reflection warnings, but at run time I get >> >> ClassCastException java.lang.ClassCastException: cavm.h2.PStatement >> cannot be cast to cavm.h2.PStatement >> >> What does this mean? PStatement is a defrecord type. >> > -- > 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.
Re: casting error
Apparently this is due to a class loader problem. I moved it into a different file to try to avoid the problem. However I'm now finding that nothing referencing foo will compile, throwing this error: CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: PStatement No idea what to do with this. Is it not possible to type hint methods returning records? On Wednesday, July 16, 2014 4:21:22 PM UTC-7, Brian Craft wrote: > > Trying to eliminate a reflection warning, I put a type hint on a function, > like > > (defn foo ^PStatement [] ...) > > which compiles without the reflection warnings, but at run time I get > > ClassCastException java.lang.ClassCastException: cavm.h2.PStatement cannot > be cast to cavm.h2.PStatement > > What does this mean? PStatement is a defrecord type. > -- 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.
casting error
Trying to eliminate a reflection warning, I put a type hint on a function, like (defn foo ^PStatement [] ...) which compiles without the reflection warnings, but at run time I get ClassCastException java.lang.ClassCastException: cavm.h2.PStatement cannot be cast to cavm.h2.PStatement What does this mean? PStatement is a defrecord type. -- 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.