Cellpond: Spatial programming without escape
12 points by james
12 points by james
Lu is extremely underrated, all her work is worth checking out.
Cellpond is fascinating, and I got a lot of strange ideas watching the video.
Since Cellpond is Turing complete, it is theoretically possible to replace the Javascript implementation with a self-hosted implementation. What would that look like? What I see is a large Cellpond "pond" representing the entire state of the Cellpond UI. The trick is to find an encoding that maps the contents of this implementation pond onto what you see and feel while interacting with the UI.
What are the properties of this encoding? It would be cool if you could just zoom in on the UI and the finally see the UI elements resolve into the atomic elements of the implementation pond. However, I don't know if that is feasible. I can't picture how that would work. It's easier to imagine that there is some two-way abstract mapping between the implementation pond and the UI, representing inputs and outputs and transformations between the two. Maybe mouse inputs are represented by cell colour changes on the left side of the implementation pond, and outputs (to the screen) are represented by cell colour changes on the right side of the pond.
A straightforward implementation of this idea would likely lead to a Turing tarpit: a huge pond, a huge number of rules, and a steep cognitive cliff to climb to understand how the code works. This kind of situation would negate some of the key benefits of Cellpond, those involving the direct visual correspondence between the code and what the program is doing while running.
Is this problem fixable? Maybe we add some abstraction mechanisms to Cellpond to make the self-hosted implementation much smaller and easier to reason about. Or maybe the needed changes are so profound that we need a different direct-manipulation spatial programming system for the Cellpond implementation.
One thing I picked up from the presentation is that there are a lot of related programming systems out there, which I know nothing about. Maybe the things I'm talking about already exist in some form. Just to clarify: I'm aware of box-and-wire visual programming, and block-based visual programming (like Scratch), but these just seem like a thin layer of visual syntax over a traditional programming language. Box-and-wire systems can have dataflow semantics, which is a bit different, but still feels very linguistic and close to traditional programming. Cellpond is interesting because it points to a way of programming that is profoundly visual, where the linguistic elements are very much de-emphasized. Could Cellpond be implemented in this kind of direct-manipulation spatial programming language, not in a Turing-tarpit way, but in a better-than-javascript way?