Re: casting error

2014-07-16 Thread Tassilo Horn
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

2014-07-16 Thread Brian Craft
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

2014-07-16 Thread Brian Craft
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

2014-07-16 Thread Andy Fingerhut
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

2014-07-16 Thread Brian Craft
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

2014-07-16 Thread Brian Craft
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.