Top all-time · #8591
jacko.io
Personal blog · jacko.ioprogrammingsystems
jacko.io is a personal blog at jacko.io about programming and systems. Since 2021, 9 different Hacker News readers have linked it 33 times, most often “Never Snooze a Future”. It is still writing: the last post was on 2026-10-19, and you can follow it by feed.
Too few sampled comments (3) to say how often HN recommends it.?
Why HN links it
The linked posts cover static search trees compared with binary search and a surprising enum size optimization in the Rust compiler. The comments only discuss Rust's lack of a formal spec and whether graphs are hard to write in Rust.
Summarised by Claude from a sample of 3 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
Most-linked posts?
- Never Snooze a Future5 people · 5 mentions · first linked 2026-03-02
- Safety and Soundness in Rust3 people · 6 mentions · first linked 2023-03-05
- Object Soup Is Made of Indexes (Rust)2 people · 11 mentions · first linked 2023-10-23
- Async Rust in Three Parts2 people · 4 mentions · first linked 2024-10-23
- Smart Pointers Can't Solve Use-After-Free in C++2 people · 3 mentions · first linked 2025-02-24
What Hacker News says?
I often hear this and am confused; not only are things like 'object soup'[0] possible and straightforward (putting things in collections and referring to them by indices), I never concretely hear why a graph or doubly-linked list becomes uniquely difficult to implement in Rust (and would genuinely be curious to learn why you feel this way). If you needed such data structures anyway, they're either in the standard li…
Comment linking /object_soup.html
on “Static search trees: faster than binary search”Submitted Async Rust in Three Parts as a story · 162 points
HN discussionRust futures are "just" structs with a poll() method. The poll() method is a function like any other, so it can have local variables on the stack as usual, but anything it wants to save between calls needs to be a field of the struct instead of a stack local. The magic of async/await is that the compiler figures out which of your async function's variables need to be fields on that struct, and it generated the struc…
Comment linking /async_intro.html
on “Futurelock: A subtle risk in async Rust”Submitted How to Pronounce Chinese Names a Little Better as a story · 23 points
HN discussion> This seems like a contradiction to me. How can future1 acquire the Mutex in the first place, if it cannot run? The word "given" is really odd to me. `future1` did run for a bit, and it got far enough to acquire the mutex. (As the article mentioned, technically it took a position in a queue that means it will get the mutex, but that's morally the same thing here.) Then it was "paused". I put "paused" in scare quote…
Comment linking /async_intro.html
on “Futurelock: A subtle risk in async Rust”Submitted Two Attacks on Naive Tree Hashes as a story · 6 points
HN discussionC-with-sanitizers is miles ahead of what C used to be, but just a couple weeks ago I ran into a dangling pointer bug that ASan doesn't catch. (Sidenote 5 here: https://jacko.io/smart_pointers.html ) It seems like one of the big downsides of sanitizers is that they can't instrument other people's code, in this case the C standard library.
Comment linking /smart_pointers.html
on “I stopped everything and started writing C again”Submitted Smart Pointers Can't Solve Use-After-Free in C++ as a story · 5 points
HN discussion> It's true that Rust UB can only arise from unsafe blocks, but it is not limited to unsafe blocks. This is correct, and it's hard to teach, and I agree that a lot of folks get it wrong. (Here's my attempt: https://jacko.io/safety_and_soundness.html .) But I think this comment is understating how big of a difference this makes: 1. Rust has a large, powerful safe subset, which includes lots of real-world programs. Un…
Comment linking /safety_and_soundness.html
on “Translating All C to Rust (TRACTOR)”Submitted Never Snooze a Future as a story · 3 points
HN discussion> Predictable response: "But they can only occur in unsafe regions which you can grep for" and my response to that: "so?" The situation is both worse than this and better than this. Consider the .set_len() method on Rust's Vec. It's unsafe, because you could just .set_len(1_000_000) and then the Vec would happily let you try to read the nonexistent millionth element and segfault. However, if you could edit the stand…
Comment linking /safety_and_soundness.html
on “Hacktical C: practical hacker's guide to the C programming language”Submitted Async Rust in Three Parts as a story · 2 points
HN discussionIndexes: https://jacko.io/object_soup.html
Comment linking /object_soup.html
on “Zig feels more practical than Rust for real-world CLI tools”Submitted Never Snooze a Future as a story · 2 points
HN discussionMy recommendation is that you do whatever you feel like with ownership when you first write the code, but then if something forces you to come back and change how ownership works, seriously consider switching to https://jacko.io/object_soup.html .
Comment linking /object_soup.html
on “Four limitations of Rust's borrow checker”Submitted Never Snooze a Future as a story · 2 points
HN discussionIn my experience there are two versions of "fighting the borrow checker". The first is where the language has tools it needs you to use that you might not've seen before, like enums, Option::take, Arc/Mutex, channels, etc. The second is where you need to stop using references/lifetimes and start using indexes: https://jacko.io/object_soup.html
Comment linking /object_soup.html
on “Four limitations of Rust's borrow checker”Submitted Safety and Soundness in Rust as a story · 2 points
HN discussion> It just feels wrong to go around hiding everything that's going on from the borrow checker and moving the errors to runtime. But maybe that's what you need to do to prototype things in Rust without a lot of pain? There's some truth to that, but I think the real problem is when some part of the state of your program looks like a graph with loops and cycles (not a tree). It's possible that it only looks that way dur…
Comment linking /object_soup.html
on “Stop making me memorize the borrow checker”Submitted Never Snooze a Future as a story · 1 points
HN discussionI don't love Rc as a cure for borrow checker woes. When Rust programs need cyclic, graph-y things like back references, I almost always suggest moving to indexes: https://jacko.io/object_soup.html . You can get fancy and reach for a SlotMap or a whole ECS, but a lot of simple cases can get away with just Vec. (And even complex cases can use HashMap if performance isn't critical.)
Comment linking /object_soup.html
on “Stop making me memorize the borrow checker”Submitted Never snooze a future in async Rust as a story · 1 points
HN discussionEDIT: > While not as formalized as C/C++, Rust's "spec" exists in the reference, nomicon, RFCs and documentation. I believe that there is a desire for a spec, but enough resources exist that the community can continue without one with no major negative side-effects (unless you want to re-implement the compiler from scratch, I suppose). Thank you, I was unaware that this is a thing. > This post probably answers a lot…
Comment linking /safety_and_soundness.html
on “A surprising enum size optimization in the Rust compiler”Submitted Smart Pointers Can't Solve Use-After-Free as a story · 1 points
HN discussion> What does "undefined behavior" mean without a spec? While not as formalized as C/C++, Rust's "spec" exists in the reference, nomicon, RFCs and documentation. I believe that there is a desire for a spec, but enough resources exist that the community can continue without one with no major negative side-effects (unless you want to re-implement the compiler from scratch, I suppose). The compiler may exploit "lack of U…
Comment linking /safety_and_soundness.html
on “A surprising enum size optimization in the Rust compiler”Submitted Object Soup Is Made of Indexes (Rust) as a story · 1 points
HN discussionIt's "easy" to do it right but also very common to do it wrong: https://jacko.io/tree_hashing.html
Comment linking /tree_hashing.html
on “A webshell and a normal file that have the same MD5”What you're talking about is what I was referring to as "safe APIs that are lying to you and are actually unsound". I've written more about safety and soundness here: https://jacko.io/safety_and_soundness.html
Comment linking /safety_and_soundness.html
on “Converting the Kernel to C++”I think a game is a good example, or anything that's kind of like a game in that it's modeling a world that's changing over time. Objects come and go, and they "target" each other or "require" each other or whatever sort of relationships the program wants to express. Those relationships end up forming a graph that might contain cycles. I just put up a blog post about this actually :) https://jacko.io/object_soup.htm…
Comment linking /object_soup.html
on “Was Rust Worth It?”Oh I just put up a blog post about this on Monday :) https://jacko.io/object_soup.html Agreed that I wish more beginner Rust books had a section about this. The pattern is quite simple, but it's hard for beginners who get stuck to realize that they need it.
Comment linking /object_soup.html
on “Was Rust Worth It?”