Tuple Space (2014)
wiki.c2.com
wiki.c2.com
https://arxiv.org/pdf/1612.02979.pdf
> SUMMARY
> Among the paradigms for parallel and distributed computing, the one popularized with Linda, and based on tuple spaces, is one of the least used, despite the fact of being intuitive, easy to understand and to use. A tuple space is a repository, where processes can add, withdraw or read tuples by means of atomic operations. Tuples may contain different values, and processes can inspect their content via pattern matching. The lack of a reference implementation for this paradigm has prevented its widespread. In this paper, first we perform an extensive analysis of a number of actual implementations of the tuple space paradigm and summarise their main features. Then, we select four such implementations and compare their performances on four different case studies that aim at stressing different aspects of computing such as communication, data manipulation, and cpu usage. After reasoning on strengths and weaknesses of the four implementations, we conclude with some recommendations for future work towards building an effective implementation of the tuple space paradigm.
I tried to get Java Jini, specifically JavaSpaces which was inspired by Linda, up and running a long time ago as a hobby project, but it seemed like it had been long-neglected even then and my limited knowledge of the JVM world left me stranded.
Specifically, it had no way to "extend" its consistency model out to consumers of its messages, and so if consumers were also producers, then this distributed system as a whole could enter into a state where parts of it are lying to itself!
Otherwise, there were some really fun things you could do with it. For example, we could have per-client databases that would bring themselves up-to-date given the differential outputs of the server database. This would let you engage in a kind of manual sharding of data.
It is difficult to express the degree of my frustration with C2 being rewritten from a gunmetal HTML page that worked everywhere into an inaccessible heavyweight SPA mess with a frankly bizarre UI.
I agree it was a mistake to move the existing c2 content into it. Maybe a better try was to start a new wiki of some kind. But the temptation to leverage the existing site to launch Federated Wiki is understandable.
I do share your frustration with clever shit over basic usability. Flipside is, I guess, Cunningham isn't your average guy. But I think lesser mortals are still allowed to disagree.
Anyway, thanks for actually complaining instead of just moaning and doing nothing like so many others on the web.
If you don't follow any links (or you open them in new tabs) it does pretty much look like it always has.
It works like the Wikipedia mouse-over popups. (Besides that you need to click.)
That's actually quite convenient.
The only real issue is that it does strange things to the browser back button. (Seems like a bug to not pop stuff form the history stack when closing the "popups".)
Among some usual suspect transports (http2, mqtt, android binder), they listed DDS.
And now I can't even remember the problem they solve or any potential use cases. Weird.
Similar concept behind message queue based systems, service oriented architecture, and many, many others. Though more pull-based than push-based. You wouldn't explicitly launch a process, you have a process that sits around waiting to for a tuple to show up and then takes/copies it and does the work.
In David Gelernter's original work, it's not just data. In Linda, it's possible to put Objects in, which are little executable (`eval` in Linda terms) which a processor can manipulate through whatever interface the tuple type exposes.
Also, what's to stop another processor "finding" the Object before the intended recipient?
2. In TupleWorld, there's no concept of "the" intended recipient. The tuple's properties determine what kind of processor would match. If those properties happen to only match a single processor, you'd get that 1:1 mapping you want, but that's missing the point of tuple spaces.
Perhaps this is attempting to solve a problem I've not come across. While it sounds interesting, I'm not sure I see the benefit? (Probably me just being short-sighted).
https://dl.acm.org/doi/10.1145/63334.63337 (free access)
By having the producer gradually update the responses to all possible queries to a tuple space, completely on its own schedule, there is not even temporal coupling between it and the consumer.
Lose a processor or a message and it's just lost. Try to address that with copy-put-take and you now have duplicates. Try to address that and you now have byzantine failures with no resolution or supporting tooling. So it's wonderfully simple until you need to do something outside of a single process and then it's useless.
Internet-friendly stuff generally has a hard requirement on being fault tolerant.
Is NoSQL close enough, so MongoDB etc displaced tuple spaces?