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.