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
    N

    Niko Matsakis

    smallcultfollowing.com · Personal blog · on HN since 2012

    Niko Matsakis, a Rust language designer, writes the Babysteps blog on borrow checking, traits, language design, and his Dada language.

    Visit blogRSSHN submissions
    Languages & CompilersProgramming
    What HN says

    HN commenters cite it as the authoritative source on Rust internals like Polonius, unwinding and destructors, and treat him as the borrow checker's author.

    Stats for nerds
    221HN people shared it
    263linked in comments
    3.9Kstory points
    Aug 2026last shared
    2022people per year2026

    Top posts on HN

    1. 1
      Towards a Rust Foundation
      4 people · 235 points · first shared 2020 · 81 comments on HN
    2. 2
      The borrow checker within
      7 people · 232 points · first shared 2024 · 36 comments on HN
    3. 3
      What it feels like when Rust saves your bacon
      4 people · 210 points · first shared 2022 · 184 comments on HN
    4. 4
      An Experimental New Type Inference Scheme for Rust
      4 people · 185 points · first shared 2014 · 11 comments on HN
    5. 5
      Never patterns, exhaustive matching, and uninhabited types in Rust
      1 person · 161 points · first shared 2018 · 76 comments on HN
    6. 6
      Why async fn in traits are hard
      3 people · 144 points · first shared 2019 · 119 comments on HN
    7. 7
      LALRPOP, an LR(1) parser generator for Rust
      3 people · 142 points · first shared 2015 · 26 comments on HN
    8. 8
      Non-Lexical Lifetimes in Rust
      7 people · 141 points · first shared 2016 · 58 comments on HN
    9. 9
      Rust async-await status report 2
      2 people · 138 points · first shared 2019 · 90 comments on HN
    10. 10
      Allocators in Rust
      3 people · 130 points · first shared 2014 · 19 comments on HN

    What HN people wrote when they linked it

    • charcircuitDec 2022

      >redux, react are heavily influenced by concepts from functional programming

      Functional programming concepts don't require learning category theory

      >rust has novel concepts from type theory

      Type theory isn't category theory. Rust's borrow checker was not inspired by affine types.

      https://smallcultfollowing.com/babysteps//blog/2012/02/15/regions-lite-dot-dot-dot-ish/

      >data engineering in the cloud age leverages a lot of algebraic concepts to achieve massive data throughput

      This doesn't requite category theory and those are basic concepts from algebra that you can learn outside of the context of algebra.

      >We have parser combinators, lambdas, stronger typing, map and flatmap

      These don't require category theory either.

    • withoutboats2Nov 2022

      Before writing a completely asinine comment like this, you might consider that I, having been paid real American dollars to design this language, might know more than you about the relationship between GATs and HKTs and the design of Rust as a whole. Your comment evinces a total ignorance of the type theoretical issues that actually informed our decision on this issue.

      Fortunately, Niko Matsakis blogged about our design discussions at the time. You can read more here and in the linked predecessor posts (at the time we were calling GATs "ATCs") https://smallcultfollowing.com/babysteps/blog/2016/11/04/associated-type-constructors-part-3-what-higher-kinded-types-might-look-like/

    • kccqzyDec 2022

      Sorry to disappoint you but if Rust had adopted higher-kinded types they wouldn't need to write a function `try_for_each` because it would just be a generic fold-and-collect-effect function that works for all effects not just Try:

      traverse_ :: Foldable t => (a -> ExceptT e IO b) -> t a -> ExceptT e IO ()

      Of course I'm not saying Rust should have this (there are good reasons why this isn't a good fit for Rust, see http://smallcultfollowing.com/babysteps/blog/2016/11/09/associated-type-constructors-part-4-unifying-atc-and-hkt/) but it really caught my eye that you called `try_for_each` obscure; it could have been an everyday function if it had a bit more expressiveness.

    • legerdemainMar 2024

      I am confused by your responses because the "reborrowing" mechanism in the Rust compiler is pretty widely discussed.

      https://smallcultfollowing.com/babysteps/blog/2013/11/20/parameter-coercion-in-rust/

      https://haibane-tenshi.github.io/rust-reborrowing/

      https://stackoverflow.com/questions/62960584/do-mutable-references-have-move-semantics

      Meanwhile, you are insisting on reasoning about Rust from first principles and making lists of links to documentation that is, at best, tangentially relevant.

      For example, the fact that `&T` implements Deref is not relevant here. Applying Deref::deref to a &T returns a &T. For most intents, it's a no-op.

    • SkiFire13Oct 2025

      There haven't been any serious proposals yet, but some ideas have been floating around from time to time. For example this blog post has some ideas that might allow them https://smallcultfollowing.com/babysteps/blog/2024/03/04/borrow-checking-without-lifetimes/

      The hardest problems I think is that this requires a fundamental change to the language that something might be already borrowed just by existing. It also likely needs to introduce a notion of "stable" places that will not move when you move a prefix of them, e.g. to allow moving a `Box` holding self-referential data. In other words, there's a lot of bikeshedding to do.

    • steveklabnikSep 2025

      > It's important to remember Rust's borrow checker was computationally infeasible 15 years ago.

      The core of the borrow checker was being formulated in 2012[1], which is 13 years ago. No infeasibility then. And it's based on ideas that are much older, going back to the 90s.

      Plus, you are vastly overestimating the expense of borrow checking, it is very fast, and not the reason for Rust's compile times being slow. You absolutely could have done borrow checking much earlier, even with less computing power available.

      1: https://smallcultfollowing.com/babysteps/blog/2012/11/18/imagine-never-hearing-the-phrase-aliasable/

    Related

    Rust Blogblog.rust-lang.org533 people

    Announcing Rust 1.0

    Rust Blog
    Company · last shared 2026
    without.boatswithout.boats80 people

    Pin

    without.boats
    Personal · last shared 2026
    Manish Goregaokarmanishearth.github.io97 people

    Picking Apart the Crashing iOS String

    Manish Goregaokar
    Personal · last shared 2026
    Ralf Jungralfj.de99 people

    There is no memory safety without thread safety

    Ralf Jung
    Personal · last shared 2026
    matkladmatklad.github.io237 people

    Architecture.md

    matklad
    Personal · last shared 2026
    Nick Cameronncameron.org65 people

    Rust in 2022

    Nick Cameron
    Personal · last shared 2026
    Yoshua Wuytsblog.yoshuawuyts.com65 people

    State Machines in Rust

    Yoshua Wuyts
    Personal · last shared 2026
    Aaron Turonaturon.github.io49 people

    Zero-cost futures in Rust

    Aaron Turon
    Personal · last shared 2025