On Aug 10, 8:19 pm, "Kyle R. Burton" <kyle.bur...@gmail.com> wrote:
> > Does all this work with cycles, Java arrays, etc.?
>
> It will work with anything that implements the Serializable interface
> in Java.  Arrays do implement that interface, as do all the
> primitives.  With respect to cycles, I'd suspect it does, but would
> test it.  If you have a repl handy it should be pretty easy to test
> those functions out on your data structures.
>
> What class has the cycle?  Is it a standard collection?
>

Cycles are a special case of substructure sharing. Let's talk about
that instead.

(def common [1 2 3 4 5])
(def a [6 common])
(def b [7 common])
(def c [a b])

If you are serializing c, I want "common" to get copied only once.

I don't know JVM too well, but I think no efficient user-level
solution is possible. Why? To take care of substructure sharing, you
need to remember a set of shareable values that have already been
serialized, and do "reference equality" comparisons when new new
substructures are serialized.

This comparison and a set implementation can easily be done with
pointers (because you have "<"), but there are no pointers in the JVM,
and no "reference inequality", so you must use linear seeks, making
the time complexity of serialization quadratic, where in C/C++ it
could be O(N log N)
--~--~---------~--~----~------------~-------~--~----~
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