Readit News logoReadit News
shadaj commented on Distributed systems programming has stalled   shadaj.me/writing/distrib... · Posted by u/shadaj
lachlan_gray · 10 months ago
This could be a fun example to work with :p

https://en.m.wikipedia.org/wiki/Shakespeare_Programming_Lang...

shadaj · 10 months ago
You might enjoy my first ever blog post from ~10 years ago, when I first learned about distributed systems: https://www.shadaj.me/writing/romeo-juliet-and-reactive-prog...
shadaj commented on Distributed systems programming has stalled   shadaj.me/writing/distrib... · Posted by u/shadaj
gklitt · 10 months ago
This is outside my area of expertise, but the post sounds like it’s asking for “choreographic programming”, where you can write an algorithm in a single function while reasoning explicitly about how it gets distributed:

https://en.m.wikipedia.org/wiki/Choreographic_programming

I’m curious to what extent the work in that area meets the need.

shadaj · 10 months ago
You caught me! That's what my next post is about :)
shadaj commented on Distributed systems programming has stalled   shadaj.me/writing/distrib... · Posted by u/shadaj
dingnuts · 10 months ago
>The static-location model seems like the right place to start, since it is at least capable of expressing all the types of distributed systems we might want to implement, even if the programming model offers us little help in reasoning about the distribution. We were missing two things that the arbitrary-location model offered:

> Writing logic that spans several machines right next to each other, in a single function

> Surfacing semantic information on distributed behavior such as message reordering, retries, and serialization formats across network boundaries

Aren't these features offered by Erlang?

shadaj · 10 months ago
Erlang (is great but) is still much closer to the static-location (Actors) paradigm than what I’m aspiring for. For example, if you have stateful calculations, they are typically implemented as isolated (static-location) loops that aren’t textually co-located with the message senders.
shadaj commented on Distributed systems programming has stalled   shadaj.me/writing/distrib... · Posted by u/shadaj
rectang · 10 months ago
Ten years ago, I had lunch with Patricia Shanahan, who worked for Sun on multi-core CPUs several decades ago (before taking a post-career turn volunteering at the ASF which is where I met her). There was a striking similarity between the problems that Sun had been concerned with back then and the problems of the distributed systems that power so much the world today.

Some time has passed since then — and yet, most people still develop software using sequential programming models, thinking about concurrency occasionally.

It is a durable paradigm. There has been no revolution of the sort that the author of this post yearns for. If "Distributed Systems Programming Has Stalled", it stalled a long time ago, and perhaps for good reasons.

shadaj · 10 months ago
Stay tuned for the next blog post for one potential answer :) My PhD has been focused on this gap!
shadaj commented on Hydro: Distributed Programming Framework for Rust   hydro.run/docs/hydro/... · Posted by u/ardel95
Keyframe · a year ago
looks really cool and I can see a few ways how to use it, especially deploy part which seems unique. Looking forward to more fleshed-out documentation, especially seemingly crucial Streams and Singletons and Optionals part.
shadaj · a year ago
You caught us in our docs-writing week :) In the meantime, the Rustdoc for streams are fairly complete: https://hydro.run/rustdoc/hydro_lang/stream/struct.Stream
shadaj commented on Hydro: Distributed Programming Framework for Rust   hydro.run/docs/hydro/... · Posted by u/ardel95
tel · a year ago
Reading a bit about it from the Flo paper

- Describe a dataflow graph just like Timely - Comes from a more "semantic dataflow" kind of heritage (frp, composition, flow-of-flows, algebraic operators, proof-oriented) as opposed to the more operationally minded background of Timely - Has a (very) different notion of "progress" than Timely, focused instead of ensuring the compositions are generative in light of potentially unbounded streaming inputs - In fact, Flo doesn't really have any notion of "timeliness", no timestamping at all - Supports nested looping like Timely, though via a very different mechanism. The basic algebra is extremely non-cyclic, but the nested streams/graphs formalism allows for iteration.

The paper also makes a direct comparison with DBSP, which as I understand it, is also part of the Timely/Naiad heritage. Similar to Timely, the authors suggest that Flo could be a unifying semantic framework for several other similar systems (Flink, LVars, DBSP).

So I'd say that the authors of Flo are aware of Naiad/Timely and took inspiration of nested iterative graphs, but little else.

shadaj · a year ago
Flo lead-author here! This is spot on :) Flo aims to be a bit less opinionated than Timely in how the runtime should behave, so in particular we don't support the type of "time-traveling" computation that Timely needs when you have iterative computations on datasets with retractions.

This is also one of the core differences of Timely compared to DBSP, which uses a flat representation (z-sets) to store retractions rather than using versioned elements. This allows retractions to be propagated as just negative item counts which fits into the Flo model (and therefore Hydro).

shadaj commented on Hydro: Distributed Programming Framework for Rust   hydro.run/docs/hydro/... · Posted by u/ardel95
the_duke · a year ago
So each "process" is deployed as a separate binary, so presumably run as a separate process?

If so, this seems somewhat problematic in terms of increased overhead.

How is fast communication achieved? Some fast shared memory IPC mechanism?

Also, I don't see anything about integration with async? For better or worse, the overwhelming majority of code dealing with networking has migrated to async. You won't find good non-async libraries for many things that need networking.

shadaj · a year ago
Currently, Hydro is focused on networked applications, where most parallelism is across machines rather than within them. So there is some extra overhead if you want single-machine parallelism. It's something we definitely want to address in the future, via shared memory as you mentioned.

At POPL 2025 (last week!), an undergraduate working on Hydro presented a compiler that automatically compiles blocks of async-await code into Hydro dataflow. You can check out that (WIP, undocumented) compiler here: https://github.com/hydro-project/HydraulicLift

shadaj commented on Hydro: Distributed Programming Framework for Rust   hydro.run/docs/hydro/... · Posted by u/ardel95
IshKebab · a year ago
This could do with some real-world application examples so I can understand where you might want to apply it.
shadaj · a year ago
These code examples aren't fully documented yet (which is why we've not linked them in the documentation), but you can take a look at a (more-real) implementation of Paxos here: https://github.com/hydro-project/hydro/blob/main/hydro_test/.... We're also working on building more complex applications like a key-value store.

u/shadaj

KarmaCake day133December 13, 2016
About
PhD student researching programming languages for distributed systems at UC Berkeley

https://shadaj.me

View Original