I am very new to Clojure so please forgive me if there is an obvious answer 
that I have missed.  I'm trying to understand the effect of interop with 
Java objects, specifically on the polluting nature of non-values in a 
system.  If I need to interop with a Java library, and that library will 
have mutable objects, how do I shield the rest of my program from that?  I 
can think of a few solutions but they all seem terrible.

1. Copy all the data from the mutable Java object to a Clojure structure 
that is a value.  This seems incredibly wasteful and in my case probably 
totally unmanageable due to the GC pressure it would create (I'm working on 
a game with lots of rapidly mutating Java objects).

2. Create a value-like wrapper that provides a read only interface.  This 
doesn't really cause a memory issue, but now you have a "value'ish" thing 
floating around that while not modifiable by you can up and change at any 
moment.

3. Create a wrapper that memoizes data into true values but only as it's 
accessed.  In my case I have an update window that demarcates time into 
discreet slices.  At the end of the frame I could indicate to my "value" 
that the underlying Java object can no longer be trusted to be the same so 
all future attempts to access non-memoized values should fail.  This works 
as long as you access the same fields/methods off the Java object down the 
road.

Of course all of these solutions have issues with object graphs and needing 
to walk the whole graph to fully convert it into a value. So is it worth 
trying to do anything along this path or is this a fool's errand and I 
should find some other code organization way to run caution tape all over 
the place shouting "careful here, this is dangerous highly volitile stuff!"?

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