Top all-time · #451
Nathaniel J. Smith
Personal blog · vorpus.orgprogrammingsystems
Nathaniel J. Smith's personal blog at vorpus.org covers programming and systems. Since 2016, 126 different Hacker News readers have linked it 170 times, most often “Notes on structured concurrency, or: Go statement considered harmful”. No feed was found, so read it on the site itself.
Sometimes recommended · 13 of 40 sampled comments recommend it?
Why HN links it
HN readers link this blog mainly for its structured concurrency essay, which commenters cite in discussions of async and Python, and for posts on Trio, cancellation and timeouts.
- Recommended for · 13 comments
- Called a damn good read and one of the best explanations of async bugs; the Trio posts are called very readable and compelling.
Summarised by Claude from a sample of 40 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
Home page of Nathaniel J. Smith, research scientist at UC Berkeley who studies how people use and understand language.
Most-linked posts?
- Notes on structured concurrency, or: Go statement considered harmful65 people · 87 mentions · first linked 2018-04-25
- I'm not collaborating with Kenneth Reitz21 people · 23 mentions · first linked 2019-05-04
- Timeouts and cancellation for humans (2018)15 people · 16 mentions · first linked 2018-01-11
- Some thoughts on asynchronous Python API design in a post-async/await world14 people · 14 mentions · first linked 2016-11-06
- Why does calloc exist?4 people · 4 mentions · first linked 2016-12-05
- Notes on structured concurrency, or: Go statement considered harmful3 people · 3 mentions · first linked 2019-05-28
- /blog/notes-on-structured-concurrency-or-go-statement-considered-harmful3 people · 3 mentions · first linked 2019-07-11
- Async that guarantees the function is finished2 people · 2 mentions · first linked 2020-05-24
What Hacker News says?
TaskGroup in asyncio has been promised at least as far back as Python 3.8 [1]. They're still not in the draft "What's new in python 3.11" [2] and searching the web didn't return any official statements. I believe they're planned but don't believe they'll arrive any time soon. If you want to use structured concurrency now, IMO the best bet is to use Trio directly. Reading posts by the author makes it clear that every…
Comment linking /blog/control-c-handling-in-python-and-trio/
on “A viable solution for Python concurrency”Submitted Why does calloc exist? as a story · 553 points
HN discussionCurio's spiritual successor is Trio [1], which was written by one of the main Curio contributors and is more actively maintained (and, at this point, much more widely used). Like Curio, it's much easier to use than asyncio, although ideas from it are gradually being incorporated back into asyncio e.g. asyncio.run() was inspired by curio.run()/trio.run(). I have used Trio in real projects and I thoroughly recommend i…
Comment linking /blog/some-thoughts-on-asynchronous-api-design-in-a-post-asyncawait-world/
on “A viable solution for Python concurrency”Submitted Why does calloc exist? (2016) as a story · 303 points
HN discussionThe video (or blog post) below is one of the best explanations I've seen about what subtle bugs are easy to make with asyncio, why it's easy to make them, and how the trio library addresses them. But yes, consider alternatives before you pick asyncio as your approach! Talk: https://www.youtube.com/watch?v=oLkfnc_UMcE Blog post: https://vorpus.org/blog/notes-on-structured-concurrency-or-g...
Comment linking /blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/
on “A viable solution for Python concurrency”Submitted Notes on structured concurrency, or: Go statement considered harmful as a story · 301 points
HN discussion> This is why Golang uses goroutines. This is why Javascript made async/await. This is why project loom exists. This is why erlang uses erlang processes. JavaScript async/await is different from the others. It requires two colors of functions [1], and it conflates how the code is written with how it's executed, so it has the same problem you were talking about at the start of your comment. Also, JavaScript async/awa…
Comment linking /blog/some-thoughts-on-asynchronous-api-design-in-a-post-asyncawait-world/
on “How io_uring and eBPF Will Revolutionize Programming in Linux”Submitted Some thoughts on asynchronous Python API design in a post-async/await world as a story · 301 points
HN discussionIt's convuluted, it's not structured concurrency ( https://vorpus.org/blog/notes-on-structured-concurrency-or-g... ), fundamentally despite being async/await a lot of networking code is based on callbacks anyway (see: asyncio.Protocol), and I've had a lot of trouble debugging code that spawn tasks because asyncio code has zero obligation to care about any of the tasks it spawns.
Comment linking /blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/
on “Django 3”Submitted I'm not collaborating with Kenneth Reitz as a story · 269 points
HN discussionThe context here is that TaskGroup + except* enable "structured concurrency" https://vorpus.org/blog/notes-on-structured-concurrency-or-g...
Comment linking /blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/
on “Python 3.11.0 final”Submitted Go Statement Considered Harmful (2018) as a story · 176 points
HN discussionhttps://vorpus.org/blog I was particularly influenced by this post. https://vorpus.org/blog/notes-on-structured-concurrency-or-g...
Comment linking /blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/
on “Ask HN: What are good solo developer blogs that you enjoy reading?”Submitted Notes on structured concurrency, or: Go statement considered harmful (2018) as a story · 157 points
HN discussion> First, Rust prefers unique ownership and acyclic data structures. You can make cyclic structures work if you use RefCell and Rc and Weak, but you're giving up the static guarantees that the borrow checker gives you in favor of a bunch of dynamic checks for 'is this in use' and 'is this still alive', One way to get around that is to instead of doing it like the very structureless async way actually impose lifetime…
Comment linking /blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/
on “Why asynchronous Rust doesn't work”Submitted Timeouts and cancellation for humans (2018) as a story · 134 points
HN discussionWell... maybe the people who have stopped working on it due to the mysterious disappearance of 30,000 fundraised dollars, selling paid support but "delegat[ing] the actual work to unpaid volunteers", and a pattern of other issues from other community members who have not spoken up about them. https://vorpus.org/blog/why-im-not-collaborating-with-kennet... https://news.ycombinator.com/item?id=19826680
Comment linking /blog/why-im-not-collaborating-with-kenneth-reitz/
on “Uv: Running a script with dependencies”Submitted Control-C handling in Python and Trio as a story · 51 points
HN discussionWow, this is really helpful and timely! I'm building a new language with async/await and had to make a lot of these decisions, but I didn't have this organized of a framework to ground myself in. I'm happy to see it clearly that I choose mostly Trio with a bit of JavaScript. My language (Zena's) async docs page: https://zena-lang.dev/guide/async/ I think I might do a pass and try to call out the decision points more…
Comment linking /blog/timeouts-and-cancellation-for-humans/
on “A Design Space Exploration of Async/Await”Submitted Some thoughts on asynchronous API design in a post-async/await world (2016) as a story · 46 points
HN discussionWith all the alleged drama surrounding the requests module and the promised async support, I am pleased there is a drama-free alternative. https://vorpus.org/blog/why-im-not-collaborating-with-kennet...
Comment linking /blog/why-im-not-collaborating-with-kenneth-reitz/
on “Httpx: A next-generation HTTP client for Python”Submitted Some thoughts on asynchronous API design in a post-async/await world (2016) as a story · 12 points
HN discussionRelevant blog and discussion: https://vorpus.org/blog/why-im-not-collaborating-with-kennet... https://news.ycombinator.com/item?id=19826680
Comment linking /blog/why-im-not-collaborating-with-kenneth-reitz/
on “Httpx: A next-generation HTTP client for Python”Submitted Notes on structured concurrency, or: Go statement considered harmful (2018) as a story · 6 points
HN discussionI'll disagree with you there. Structured concurrency is the easiest concurrency model there is: https://vorpus.org/blog/notes-on-structured-concurrency-or-g...
Comment linking /blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/
on “Thoughts on Go vs. Rust vs. Zig”Submitted Timeouts and cancellation for humans as a story · 5 points
HN discussionI was pretty badly turned off by Kenneth Reitz and the way he handled conflict with Pipenv. I disliked how instead of listening to feed back or being constructive he just gave off a kind of fuck you attitude. There were real and critical issues with pipenv that he would not budge on and it truly felt like he was in the minority. I know, its his project he can do what he wants but in the context it did not make sense…
Comment linking /blog/why-im-not-collaborating-with-kenneth-reitz/
on “If this project is dead, just tell us”Submitted Notes on structured concurrency, or: Go statement considered harmful as a story · 4 points
HN discussion> the maintainer's having written another popular project. Potentially relevant: https://vorpus.org/blog/why-im-not-collaborating-with-kennet...
Comment linking /blog/why-im-not-collaborating-with-kenneth-reitz/
on “If this project is dead, just tell us”Submitted Why does calloc exist? (2016) as a story · 4 points
HN discussion