Couldn't you look at slime/swank as a sort of object protocol?  They
already communicate through a sexy protocol of some sort (or maybe it
was sex-p, I dunno).

Could we perhaps get different swank backends to talk to each other
and get clojure/CL interop that way?

That was off-topic, I know.

Chris

On Dec 19, 9:44 pm, Mon Key <s...@derbycityprints.com> wrote:
> Hans Hubner's BKNR framework for CL explores this in a very
> interesting way - while relying on CLOS meta-object protocol the ideas
> could prob. be extended to Clojure. With some ABCL interaction this
> would make CL -> Clojure || Clojure -> CL interop possible at the JVM
> level with persistence...
>
> Someone call me when i can pull my head out of the pipe :)
>
> s_P
>
> On Dec 18, 8:10 pm, r <nbs.pub...@gmail.com> wrote:
>
> > On Thu, Dec 18, 2008 at 11:06 PM, Chouser <chou...@gmail.com> wrote:
>
> > > I've pondered a couple approaches, though only enough to find
> > > problems.
>
> > > One approach would work act like a Clojure collection, with structural
> > > sharing on-disk.  This would be great because it would have
> > > multi-versioning and transaction features built right in.  It would
> > > also have the potential to cache some data in memory while managing
> > > reads and writes to disk.
>
> > > But Clojure's persistent collections rely on garbage collection --
> > > when old versions of the collection are no longer referenced, the JVM
> > > cleans them up automatically.  How would this work on disk?  How would
> > > you define "no longer referenced"?
>
> > [1. just to confirm I understand you correctly: is this a
> > "transparent" case where each newly constructed data structure is
> > immediately written to disk?]
>
> > I can see another problem here: assuming we have multiple "active"
> > versions of such structure at the time of closing the application,
> > which of them should we restore when the application restarts? Do we
> > need explicit "save"&"restore" commands to mark the data we want
> > anyway? Or is it better to automatically keep track of "heads" per
> > (named) thread? Or use a (transparent) Ref?
>
> > Another issue is the efficiency of the GC itself. Whatever scheme we
> > use, Clojure is going to use GC a lot. This may cause strong
> > fragmentation of data on disk (not to say about performance penalty).
>
> > > Another approach would be at the Ref or Agent level, where watchers
> > > could be hooked in.  (Watchers are currently only for agents, but are
> > > planned for refs as well.)  Watchers are functions that are called
> > > when their underlying mutable object has a change committed, so they'd
> > > be able to sync the disk up with new in-memory value.  But this means
> > > the whole collection would have to be in-memory.  Also the watcher
> > > gets no hint as to *what* in the collection changed.
>
> > > So for now it seems we'll have to make do with "normal" mechansims
> > > like SQL libraries.
>
> > [2. is this an "opaque" case where data sit in memory and only when we
> > switch the Ref the on-disk representation is updated?]
>
> > Hiding the whole data structure behind the Ref and syncing data only
> > when it changes would solve both problems mentioned above. The cost is
> > that the data would not longer be updated incrementally so the whole
> > structure would have to be flushed to the disk. This wouldn't be very
> > efficient but would work with existing database back-ends.
>
> > Perhaps it would be better to use a combination of 1. and 2., i.e. not
> > only to hide data structures behind a Ref and commit changes to disk
> > only when the Ref changes (as in 2.) but also to use a journal for
> > tracking "modifications" to data so that only incremental changes have
> > be done. Such journal could be translated (and optimized) into a bunch
> > of INSERT&DELETE commands.
>
> > Another question: what kind of data structures? List, vector and hash
> > or maybe a new specialized type (a table)? Performance characteristics
> > are going to be very different from in-memory data so maybe it makes
> > sense for the whole mechanism to be opaque.
>
> > -r.
--~--~---------~--~----~------------~-------~--~----~
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
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