Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    A

    Aaron Turon

    aturon.github.io · Personal blog · on HN since 2015

    Aaron Turon, a Rust core team member, writes about Rust language design, futures, async, concurrency, and Cargo.

    Visit blogHN submissions
    Languages & CompilersProgrammingSystems & Performance
    What HN says

    HN commenters point to his posts as an excellent description of async borrowing and as an authority on lock-free and concurrent programming in Rust.

    Stats for nerds
    49HN people shared it
    19linked in comments
    1.7Kstory points
    Aug 2025last shared
    2015people per year2025

    Top posts on HN

    1. 1
      Zero-cost futures in Rust
      11 people · 930 points · first shared 2016 · 337 comments on HN
    2. 2
      The Rust Platform
      3 people · 362 points · first shared 2016 · 250 comments on HN
    3. 3
      Lock freedom without garbage collection in Rust
      11 people · 235 points · first shared 2015 · 90 comments on HN
    4. 4
      Closing out an incredible week in Rust
      1 person · 92 points · first shared 2018 · 7 comments on HN
    5. 5
      Designing futures for Rust
      7 people · 33 points · first shared 2016 · Discussion on HN
    6. 6
      Resurrecting impl Trait
      2 people · 11 points · first shared 2015 · 3 comments on HN
    7. 7
      Version selection in Cargo
      2 people · 9 points · first shared 2018 · Discussion on HN
    8. 8
      Sound and ergonomic specialization for Rust
      1 person · 5 points · first shared 2018 · Discussion on HN
    9. 9
      Borrowing in async code – Aaron Turon
      4 people · 3 points · first shared 2018 · Discussion on HN
    10. 10
      Retooling the Rust Libs Team for 2018
      1 person · 3 points · first shared 2018 · Discussion on HN

    What HN people wrote when they linked it

    • kibwenAug 2025

      > The fundamental problem is that rust async was developed when epoll was dominant (and almost no one in the Rust circles cared about IOCP)

      No, this is a mistaken retelling of history. The Rust developers were not ignorant of IOCP, nor were they zealous about any specific async model. They went looking for a model that fit with Rust's ethos, and completion didn't fit. Aaron Turon has an illuminating post from 2016 explaining their reasoning: https://aturon.github.io/tech/2016/09/07/futures-design/

      See the section "Defining futures":

      There’s a very standard way to describe futures, which we found in every existing futures implementation we inspected: as a function that subscribes a callback for notification that the future is complete.

      Note: In the async I/O world, this kind of interface is sometimes referred to as completion-based, because events are signaled on completion of operations; Windows’s IOCP is based on this model.

      [...] Unfortunately, this approach nevertheless forces allocation at almost every point of future composition, and often imposes dynamic dispatch, despite our best efforts to avoid such overhead.

      [...] TL;DR, we were unable to make the “standard” future abstraction provide zero-cost composition of futures, and we know of no “standard” implementation that does so.

      [...] After much soul-searching, we arrived at a new “demand-driven” definition of futures.

      I'm not sure where this meme came from where people seem to think that the Rust devs rejected…

    • dupedAug 2025

      > You simply can not do it with state machines polled in user code

      That's not really true. The only guarantees in Rust futures are that they are polled() once and must have their Waker's wake() called before they are polled again. A completion based future submits the request on first poll and calls wake() on completion. That's kind of the interesting design of futures in Rust - they support polling and completion.

      The real conundrum is that the futures are not really portable across executors. For io_using for example, the executor's event loop is tightly coupled with submission and completion. And due to instability of a few features (async trait, return impl trait in trait, etc) there is not really a standard way to write executor independent async code (you can, some big crates do, but it's not necessarily trivial).

      Combine that with the fact that container runtimes disable io_uring by default and most people are deploying async web servers in Docker containers, it's easy to see why development has stalled.

      It's also unfair to mischaracterize design goals and ideas from 2016 with how the ecosystem evolved over the last decade, particularly after futures were stabilized before other language items and major executors became popular. If you look at the RFCs and blog posts back then (eg: https://aturon.github.io/tech/2016/09/07/futures-design/) you can see why readiness was chosen over completion, and how completion can be represented with readiness. He even calls out…

    • simagMay 2019

      Kudos!

      When Rust 1.0 was announced I had a look. I was very surprised because that language was very different from my previous look, when Rust still had GC and green threads (and a syntax with mystic sigils).

      Rust 1.0 looked like it could be a good language, but coming from mainstream languages with a richer ecosystem -- such as Java/Scala or C# --, Rust lacked many common libs. For instance, a high-level approach to non-blocking IO, which is something I need when writing servers. There were other issues -- lexical lifetimes often meant one needed to jump through hoops to please the borrow checker. I thought Rust would need a lot more time to mature enough to be a serious contender in my PL list. The next year, the Zero-Cost Futures post[1] by Aaron Turon showed up in my news feed. It seemed interesting, but it was only a plan. A few months later Tokio was born and, again, it seemed interesting. But there's no way it was ready, was there? I went back to business as usual. I kept hearing about Rust, but I had no intention to use it in the immediate future.

      Last year, I was offered a full-time Rust job out of the blue (because of my experience in building distributed systems; I had to learn Rust as a part of the job). I was interested because, in general, I was looking for a change -- but I also wanted to make sure I wouldn't spend energy on a language that wouldn't be relevant in 10 years (at least, according to my intuition). I've had job offers in other emerging…

    • withoutboats3Sep 2023

      Rust chose to drop the green thread library so that it could have no runtime, supporting valuable use cases for Rust like embedding a Rust library into a C binary, which we cared about. Go is not really usable for this (technically it's possible, but it's ridiculous for exactly this reason). So those sorts of users are getting a lot of benefit from Rust not having a green threading runtime. As are any users who are not using async for whatever reason.

      However, async Rust is not using stackless coroutines for this reason - it's using stackless coroutines because they achieve a better performance profile than stackful coroutines. You can read all about it on Aaron Turon's blog from 2016, when the futures library was first released:

      http://aturon.github.io/blog/2016/08/11/futures/

      http://aturon.github.io/blog/2016/09/07/futures-design/

      It is not the case that people using async Rust are getting the "worst of both worlds." They are getting better performance by default and far greater control over their runtime than they would be using a stackful coroutine feature like Go provides. The trade off is that it's a lot more complicated and has a bunch of additional moving parts they have to learn about and understand. There's no free lunch.

    • mleonhardSep 2021

      Large organizations are full processes for balancing power between internal groups. As Rust Foundation, Amazon, and other companies become more involved, friction will happen more frequently. The Rust Foundation will need processes for balancing power between the companies and various groups inside the companies.

      PR pieces are usually full of deception. I expect that Rust Foundation will end up with a process for approving Rust-related PR from supporting organizations. They will pay someone to do that work.

      So far, Rust has been run by people who behave reasonably. I'm confident that they will resolve this issue. They will resolve it with open discussion, expressing and acknowledging different opinions and needs, explaining tradeoffs, and progressing steadily to consensus.

      Here's a great talk by previous Rust head Ashley Williams about Rust's decision-making process: https://www.youtube.com/watch?v=JLstJFvdl4s&t=1808s

      Some articles about it:

      - http://aturon.github.io/tech/2018/05/25/listening-part-1/#the-great-int-debate-and-the-no-new-rationale-rule

      - http://smallcultfollowing.com/babysteps/blog/2020/12/30/the-more-things-change/#on-pluralism-and-the-rust-organization

      - https://rust-lang.github.io/rfcs/

    • staticassertionAug 2019

      > Async+Await+Futures isn't needed at all

      Define "needed" ? Code with async/await is radically simpler compared to without - this is not just basic sugar but really, really important due to rust's borrow semantics There is code I have written that required Rc/RefCell ceremony to get around the borrowchecker that will be completely handled by async/await.

      You can read more about this here:

      https://aturon.github.io/tech/2018/04/24/async-borrowing/

      > performs worse than a basic epoll loop

      There are open issues and afaik all of these are solvable problems with known/ theorized solutions.

      > is more confusing, and less able to handle complex flow

      Sorry, that's absolutely just not the case Even if "confusing" is subjective, you can not tell me that writing complex loops/ control flow is easier in futures than in async/await. Just look at the examples here:

      https://docs.rs/dtolnay/0.0.4/dtolnay/macro._01__await_a_minute.html

    Related

    without.boatswithout.boats80 people

    Pin

    without.boats
    Personal · last shared 2026
    Rust Blogblog.rust-lang.org533 people

    Announcing Rust 1.0

    Rust Blog
    Company · last shared 2026
    Niko Matsakissmallcultfollowing.com221 people

    Towards a Rust Foundation

    Niko Matsakis
    Personal · last shared 2026
    Alexis Beingessnercglab.ca/~abeinges61 people

    Rust, Generics, and Collections

    Alexis Beingessner
    Personal · last shared 2024
    Patrick Waltonpcwalton.github.io53 people

    Pathfinder, a fast GPU-based font rasterizer in Rust

    Patrick Walton
    Personal · last shared 2025
    Nick Cameronncameron.org65 people

    Rust in 2022

    Nick Cameron
    Personal · last shared 2026
    Steve Klabnikwords.steveklabnik.com284 people

    A Sad Day for Rust

    Steve Klabnik
    Personal · last shared 2026
    Keegan McAllistermainisusuallyafunction.blogspot.com52 people

    151-byte static Linux binary in Rust

    Keegan McAllister
    Personal · last shared 2023