Hi Mark,
there's indeed no query language at the moment. All the operations you can do with relations right now are searches, lookups and linear scans, and any logic that in a database would be implement in SQL or relational algebra in Cell has to be implemented using the functional language.
I do plan to include at least bits and pieces of a query language at some point, but I'm going to model it after Datalog rather than relational algebra. Not only non-trivial queries are normally much easier to express in Datalog, but relational algebra is (as far as I can tell) specifically designed for the particular flavor of the relational model used in relational databases, and wouldn't work well in Cell, where relations can (at the moment) be at most ternary, and are meant to encode a single attribute or relationship. "Wide" relations of the type used in SQL may make sense for databases, but it seems to me that Datalog and atomic relations integrate much better with a general purpose programming language.
The motivation is also different. Since whatever logic you can implement with a query can already be implemented anyway with the functional language (although in a more clumsy form, of course), a query language in and of itself is not much of a priority for me at the moment: it's a lot of work for limited gains. What I would like to have, instead, is materialized views that are updated incrementally (and efficiently) as the underlying stored relations change, because without that one would be forced (for performance reason) to introduce redundancy in the schemas more often than I'd like (there's a (rather convoluted) example of that in the "Why relations are better than objects" page, in the "Declarative query languages" paragraph).
I've to admit that until I read your email, I was one of the C++ programmers who were completely unaware of the copy-and-swap idiom. It's very different though from the deferred updates model used in Cell. For example, the issue with the Game automaton described in
www.cell-lang.net/updates.html would not appear with copy-and-swap, because every update of the state of the copy would be still visible to the code that follows. With copy-and-swap, if I understand it correctly, the update appears to be atomic to the clients of the class, but methods of the latter would still see all the intermediate states. And then there's of course the fact that any non-trivial update to the state of an application typically involves updating several objects, so the object graph itself would end up going through a number of intermediate states even if each object is updated atomically. The approach used in Cell is, in a sense, more radical, and its consequences, both good and bad, more drastic.
The papers listed at the link you provided are indeed very interesting. In fact, both papers in the "I’ve Seen the Future, Brother: It is Murder" section, "Out of the Tar Pit" and "Dynamo: Amazon’s Highly Available Key-value Store" have influenced the design of Cell. I got from the latter the idea of using a user-provided function to reconcile divergent replicas of an automaton (or, more precisely, to reconcile their diverging message histories) that will be so crucial in Cell's future network architecture (
https://github.com/cell-lang/network-model). "Time, Clocks, and the Ordering of Events in a Distributed System" also looks very interesting, and might actually be relevant for the network architecture. I'll read it soon.
I'm a bit surprised you managed to find the website through a post that's nearly one year old. That was my first post ever about Cell, and unfortunately the only one that ever managed to attract any attention on Hacker News. I tried to post again there every time I released something new, but subsequent posts always went completely unnoticed.
Thanks for the link and for getting in touch.
Regards,
Giovanni