Hi,

I am a third year computer science PhD student at the University of 
Chicago, and am interested in submitting a proposal for the typed 
transients project. I am very interested, in general, about presistency, 
transience, and the interaction between the two models for operating on 
data. Persistency is actually influence some of my current work on 
eliminating race conditions on data structures common in scientific 
computing (ghost nodes and other regions allocated to overlapping 
processors in distributed memory programs, etc). I've poked around in the 
Clojure source code to get some inspiration for my own implementations 
(I've done some work on that in C++ and in Nim), and of course have read 
the canonical set of blog posts 
<http://hypirion.com/musings/understanding-persistent-vector-pt-1> on the 
implementation of persistent vectors in Clojure. (Which, if I recall 
correctly, Rich Hickey actually cited in on of his papers on Clojure!)

I would be happy to work on typing transient data structures in 
core.clojure, and to work out a means of typing transient that interacts 
efficiently and elegantly with other types, especially persistent data 
structures. I'm working on a proposal for this now and can send it in a 
couple hours, but I wonder if there's a good way of identifying the lowest 
hanging fruit for typing a crucial transient data structure in the core 
Clojure codebase where I could do a sort of trial run? It would help 
immensely I think with coming up with a laundry list of tasks for 
performing this, instead of it being more of a casual perusal of the code.

One endgame for this work that I'm interested in is automatic 
parallelization, which Clojure's persistent data structures, in my opinion, 
do inspirationally well. Something I'm very interested in is applying the 
shared memory concurrency model to a distributed memory environment. 
Persistency has natural distributed memory implications with regard to 
especially parallelism, because modifications to the "same" value that are 
made, at the same logical time, in different, distributed places in memory, 
can potentially be reconciled when the values are eventually synced 
(perhaps even lazily). Transients could be used in the distributed 
locations, and syncing could be done using persistent logic. My thoughts on 
this are a bit more fleshed out than as presented here, but I see real 
potential for nearly free (from a syntactic point of view) distributed 
memory parallelism. I've read about avout <http://avout.io> but I'm a bit 
disappointed by their somewhat unleveraged use of persistency and 
transience, and about their seeming lack of support for data structures.

I know that this endgame is a bit separate from the goal of typing 
transients, but I believe that the extra information gained from typing 
transients could lend itself to a more painless implementation of something 
like the above. So, I have a few questions:

   1. would a very simple distributed memory parallelism implementation 
   that relies on persistence and transients be desirable as a test-case for 
   this project? The desire for distributed memory parallelism could itself be 
   inferred through a type annotation.
   2. would a project that leverages persistent/transients for race-free 
   distributed memory parallelism be desirable in general, separate from this 
   project?
      - do you agree that there may be some viability here?
   3. for this particular project proposal: is there a simple example of an 
   instance of a transient data structure in the core Clojure codebase upon 
   which I can base an itemized procedure for carrying out this proposal?
   4. is it within the scope of this project to also type persistency that 
   may be missing in the core Clojure codebase, or to convert non-transient 
   data stuctures that may benefit from transience?

Thanks! Hope to hear back soon (and sorry for the late correspondence about 
this)!
Sean Laguna

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