rain 🌦️
@sunshowers.io
2.3K followers 320 following 2.6K posts
(gender)queer transsexual / they/them / eng @oxide.computer / atheist and scientific humanist / 🦀 #rustlang / https://sunshowers.io also on mastodon: @[email protected] / https://hachyderm.io/@rain
Posts Media Videos Starter Packs
Pinned
sunshowers.io
New blog post: Cancelling async #rustlang!

This is a written version of my talk at #RustConf 2025, where I talk about the joys and sorrows of future cancellations in Rust, with lessons from our work at @oxide.computer. Includes a video of the talk as well. Check it out!
Cancelling async Rust ꞏ sunshowers
Correctness in the face of cancellations: a written version of my talk at RustConf 2025.
sunshowers.io
sunshowers.io
it upset a lot of people!
sunshowers.io
jj has a bunch of improvements to make multiple parallel changes easier to manage, such as jj parallelize: jj-vcs.github.io/jj/latest/cl...
CLI reference - Jujutsu docs
jj-vcs.github.io
sunshowers.io
and in fact part of the motivation for git5/fig (and later jj) was to not have the disjoint file limitation
sunshowers.io
* the internal dev system at google is not based on perforce
* what you're talking about is the pre-git5/fig model with disjoint files. neither fig (currently deployed) nor jj (which will eventually replace fig at Google) have this limitation
sunshowers.io
is that "attaboy" except gender swapped?
sunshowers.io
most of the commits in my stack were of that kind. Trust me I helped build out a lot of these workflows at FB which also has small atomic commits, I'm quite aware of the details here
sunshowers.io
I actually worked very hard to move as much out of that commit as possible, in order to derisk it and let bisect work. It really is a stack of 41 atomic commits
sunshowers.io
the 26 commits there are not independent, they were the result of me running `spr diff` 26 times -- they were 26 different versions of the same revision. The final commit itself is atomic (as large as it is, it is the smallest possible atomic commit that passed CI -- the overall work was 20k+ loc)
sunshowers.io
My talk made it to /r/rustjerk! Honored
via Claude:

Reddit post titled 'Days without being outjerked by [a title] in the main sub: 0' showing a screenshot of another post about 'Cancelling async Rust'. The screenshot displays a RustConf 2025 conference slide featuring a speaker (me) with purple/pink hair at a podium. The slide's title reads 'Cancelling async Rust' by Rain (they/she) for RustConf 2025. The slide includes the RustConf logo, the Rust Foundation mascot Ferris the crab, and text indicating this is 'The original annual Rust programming language conference' with a link to rustconf.com. The post has 115 upvotes and 39 comments.
sunshowers.io
note I made 41 separate PRs
sunshowers.io
(updated the doc link, thanks!)
sunshowers.io
I use a stacked PR workflow + squashes with spr, so each commit in the stack is tested. Landed a 41 commit series at work recently that way
sunshowers.io
*every tool* built on top of the VCS needs to handle non-unique merge bases, or consider them out of scope
sunshowers.io
from the channels link you posted:

> There is no simple way to merge all changes from one channel into another.

first-class merge conflicts help, but the fundamental issue of non-unique merge bases remains. keep in mind that the VCS itself is a small part of the story -- there's a whole ecosystem!
sunshowers.io
I'm not sure what "linearizing [...] is unreliable" means -- Google and FB use linear histories and it's pretty reliable at that scale
sunshowers.io
lots of folks use merges rather than rebases locally -- partly induced by github, which doesn't play well with force pushes. I use amends and rebases locally but github.com/sunshowers/spr to turn it into new commits + merges
GitHub - sunshowers/spr: Fork of spacedentist/spr with support for Jujutsu (jj) and commit signing
Fork of spacedentist/spr with support for Jujutsu (jj) and commit signing - sunshowers/spr
github.com
sunshowers.io
So it's true that the issue is with bidirectional merges -- but well, in merge-based local workflows people generally merge upstreams into their local work. having a linear history on main means people can use merge-based workflows locally and not run into criss-cross merges
sunshowers.io
yeah, there's no clear theory behind them
sunshowers.io
Been meaning to put this somewhere for a while — a real, solid technical reason linear VCS history is better than one full of merges, going beyond taste and subjective preference

lobste.rs/c/cix1sm
> git works best when it has the full merge history available

I used to work on source control. This is actually not true, because (among other things) having a full merge history leads to the likelihood of what are known as criss-cross merges: situations where there isn't a single nearest common ancestor/merge base between two commits. (Merge bases are a crucial piece of information for many source control algorithms.) Criss-cross merges are a pain to deal with, both within the version control system itself and within tools written on top of the VCS. As a result, many tools simply consider criss-cross merges to be outside of their design parameters.

In contrast, a linear history can never have criss-cross merges, greatly simplifying many algorithms.

In general, linear history is friendlier for both tools and humans.

edit: to give an example, a tool I helped build for work needs to load files from the merge base of a commit so it can ensure that "blessed" files don't change in nontrivial ways. The tool simply (and correctly) considers criss-cross merges to be out of scope: https://github.com/oxidecomputer/dropshot-api-manager/blob/bb71488cfa2f642b232ef619bbb3d2c287c8e336/crates/dropshot-api-manager/src/git.rs#L22

Opting into a history full of merges means imposing a burden on the entire ecosystem.
sunshowers.io
a pound of feathers weighs more than a pound of gold, but an ounce of gold weighs more than an ounce of feathers 🙃
Reposted by rain 🌦️
lastpositivist.bsky.social
In what might actually be a first for the Sanguinary Utnapishtim, @etvpod.bsky.social has actually used the Guest Post thing to outline his actual philosophical opinions... in more murdery form. He's also done me the ultimate honour of inventing a new slur.

sherdenpact.neocities.org/GuestPostLuck
Sherden Pact
sherdenpact.neocities.org
sunshowers.io
some people I respect have this position—but look, pain is a real phenomenon, and the reduction of pain is good
sjshancoxli.liberalcurrents.com
"'good' is a social construct therefore the question 'are humans good' is incoherent"

how the fuck is this guy this famous
sunshowers.io
reminder: the primary goal of most enterprises is to produce goods and services for its customers. the primary goal of meta is to evaluate its employees

Erik Meijer
@headinthebox
"... Guido van Rossum: I honestly think the importance of the GIL removal project has been overstated. It serves the needs of the largest users (e.g. Meta) while complicating things for potential contributors to the CPython code base (proving that new code does not introduce concurrency bugs is hard) ...". [0]

It does not even sever the needs of Meta; the actual reason was simply to do something impressive sounding ("until now every previous attempt failed miserably") allowed a few engineers at Meta to claim "industry wide impact" during their performance review.
sunshowers.io
ahh misread! sorry