Concurrency is hard.
Sure, lots of programming is hard. But concurrency is hard both because it’s complicated and because you know it’s complicated. When things go wrong, you can easily come up with explanations for why two processes are interfering with each other. When they stop going wrong, you can easily believe those explanations were true.
Tinderbox Six has lots of interesting concurrency. It matters a lot for performance. It’s very tricky. And backstage, we’ve been working through a real morass, trying to identify exactly why agent updates and sorting and reindexing interfere with each other. These are all things that used to interrupt your Tinderbox work. They don’t do that anymore. And, this week, I don’t sleep much either.
It turns out that Tinderbox Value objects are notionally immutable but aren’t actually immutable; the values for some attributes have cached internal state, and that makes their immutability treacherous. Don’t do that. (When I made that mistake, multi-core PCs didn’t exist. Now we have ’em in our phones.)
Someday I’ll rip that out. But for now, we’ve identified the problem and isolated the issues and sanity has returned.