All Posts on baby steps
smallcultfollowing.com/babysteps/blog
Recent content in All Posts on baby steps
- Posts
- 362 from 2 Dec 2011 to 30 Oct 2026
- Posting
- monthly (19 in the last year)
- Kind
- personal blog
- Feed
- https://smallcultfollowing.com/babysteps/blog/index.xml
2026 15
- 'Trust but verify'; or, 'the correctness ratchet'
- What agents mean for Rust (and vice versa)
- Why 'externalized' proofs of cyclic trait impls does not work
- Cylic trait implementations: motivation
- Battery packs: Let's talk about crates, baby
- Only Bounds
- Symposium: community-oriented agentic development
- Maximally minimal view types, a follow-up
- Maximally minimal view types
- How Dada enables internal references
- What it means that Ubuntu is using Rust
- Sharing in Dada
- Dada: moves and mutation
- Hello, Dada!
- Fun With Dada
2025 23
- Move Expressions
- Just call clone (or alias)
- But then again...maybe alias?
- Bikeshedding `Handle` and other follow-up thoughts
- Explicit capture clauses
- Move, Destruct, Forget, and Rust
- We need (at least) ergonomic, explicit handles
- SymmACP: extending Zed's ACP to support Composable Agents
- The Handle trait
- Symposium: exploring new AI workflows
- Rust, Python, and TypeScript: the new trifecta
- You won't believe what this AI said after deleting a database (but you might relate)
- Using Rust to build Aurora DSQL
- Rust turns 10
- Dyn you have idea for `dyn`?
- Dyn async traits, part 10: Box box box
- Rust in 2025: Language interop and the extensible compiler
- Rust in 2025
- Rust in 2025: Targeting foundational software
- View types redux and abstract fields
- Rust 2024 Is Coming
- How I learned to stop worrying and love the LLM
- Preview crates
2024 11
- MinPin: yet another pin proposal
- The `Overwrite` trait and `Pin`
- Making overwrite opt-in #crazyideas
- More thoughts on claiming
- Claiming, auto and otherwise
- The borrow checker within
- Unwind considered harmful?
- Sized, DynSized, and Unsized
- Ownership in Rust
- Borrow checking without lifetimes
- What I'd like to see for Async Rust in 2024 ๐
2023 22
- Being Rusty: Discovering Rust's design axioms
- Project Goals
- Idea: "Using Rust", a living document
- Eurorust reflections
- Easing tradeoffs with profiles
- Polonius revisited, part 2
- Empathy in open source: be gentle with each other
- Polonius revisited, part 1
- New Layout, and now using Hugo!
- Stability without stressing the !@#! out
- Higher-ranked projections (send bound problem, part 4)
- Giving, lending, and async closures
- Fix my blog, please
- Thoughts on async closures
- Must move types
- โmust moveโ
- Temporary lifetimes
- To async trait or just to trait
- Trait transformers (send bounds, part 3)
- Return type notation (send bounds, part 2)
- Async trait send bounds, part 1: intro
- Rust in 2023: Growing up
2022 14
- Rust 2024...the year of everywhere?
- Dyn async traits, part 9: call-site selection
- What I meant by the "soul of Rust"
- Dyn async traits, part 8: the soul of Rust
- Come contribute to Salsa 2022!
- Many modes: a GATs pattern
- What it feels like when Rust saves your bacon
- Async cancellation: a case study of pub-sub in mini-redis
- Coherence and crate-level where-clauses
- Implied bounds and perfect derive
- dyn*: can we make dyn sized?
- Dare to ask for more #rust2024
- Panics vs cancellation, part 1
- Dyn async traits, part 7: a design emerges?
2021 29
- Rustc Reading Club, Take 2
- CTCFT 2021-11-22 Agenda
- View types for Rust
- Rustc Reading Club
- Dyn async traits, part 6
- Dyn async traits, part 5
- CTCFT 2021-10-18 Agenda
- Dyn async traits, part 4
- Dyn async traits, part 3
- Dyn async traits, part 2
- Dyn async traits, part 1
- Rustacean Principles, continued
- CTCFT 2021-09-20 Agenda
- Rustacean Principles
- Next CTCFT Meeting: 2021-09-20
- CTCFT 2021-07-19 Agenda
- CTCFT Social Hour
- CTCFT 2021-06-21 Agenda
- Edition: the song
- CTCFTFTW
- [AiC] Vision Docs!
- Async Vision Doc Writing Sessions VII
- Async Vision Doc Writing Sessions VI
- Async Vision Doc Writing Sessions V
- Async Vision Doc Writing Sessions IV
- My "shiny future"
- Async Vision Doc Writing Sessions III
- Async Vision Doc Writing Sessions II
- Async Vision Doc Writing Sessions
2020 11
- The more things change...
- Looking back on 2020
- Rotating the compiler team leads
- Async Interview #8: Stjepan Glavina
- Async interviews: my take thus far
- Library-ification and analyzing Rust
- Async Interview #7: Withoutboats
- Async Interview #6: Eliza Weisman
- Async Interview #5: Steven Fackler
- Async Interview #4: Florian Gilcher
- Towards a Rust foundation
2019 22
- Async Interview #3: Carl Lerche
- Async Interview #2: cramertj, part 3
- Async Interview #2: cramertj, part 2
- Async Interview #2: cramertj
- AiC: Improving the pre-RFC process
- Rust 2020
- Async Interview #1: Alex and Nick talk about async I/O and WebAssembly
- Announcing the Async Interviews
- why async fn in traits are hard
- AiC: Shepherds 3.0
- AiC: Unbounded queues and lang design
- Async-await status report #2
- AiC: Language-design team meta working group
- AiC: Collaborative summary documents
- AiC: Adventures in consensus
- More than coders
- Async-await status report
- Rust lang team working groups
- Salsa: Incremental recompilation
- Polonius and the case of the hereditary harrop predicate
- Polonius and region errors
- Rust in 2019: Focus on sustainability
2018 20
- After NLL: Moving from borrowed data and the sentinel pattern
- Splash 2018 Mid-Week Report
- After NLL: Interprocedural conflicts
- MIR-based borrowck is almost here
- October Office Hour Slots
- Office Hours #1: Cyclic services
- Office Hours #0: Debugging with GDB
- Rust office hours
- Rust pattern: Iterating an over a Rc >
- Never patterns, exhaustive matching, and uninhabited types (oh my!)
- Proposal for a staged RFC process
- MIR-based borrow check (NLL) status update
- An alias-based formulation of the borrow checker
- Rust pattern: Precise closure capture clauses
- Rust pattern: Rooting an Rc handle
- Maximally minimal specialization: always applicable impls
- In Rust, ordinary vectors are values
- An on-demand SLG solver for chalk
- #Rust2018
- Lessons from the impl period
2017 16
- Chalk meets SLG
- Cyclic queries in chalk
- Non-lexical lifetimes: draft RFC and prototype available
- Query structure in chalk
- gnome-class: Integrating Rust and the GNOME object system
- Unification in Chalk, part 2
- Rayon 0.7 released
- Unification in Chalk, part 1
- The Lane Table algorithm
- Nested method calls via two-phase borrowing
- Non-lexical lifetimes using liveness and location
- Project idea: datalog output from rustc
- Compiler design sprint summary
- Unsafe code and shared references
- Lowering Rust traits to logic
- Assigning blame to unsafe code
2016 21
- Parallel iterators, part 3: Consumers
- Associated type constructors, part 4: Unifying ATC and HKT
- Associated type constructors, part 3: What higher-kinded types might look like
- Associated type constructors, part 2: family traits
- Associated type constructors, part 1: basic concepts and introduction
- Switching to Jekyll
- Supporting blanket impls in specialization
- Observational equivalence and unsafe code
- Announcing intorust.com
- Distinguishing reuse from override
- Intersection Impls
- Thoughts on trusting types and unsafe code
- 'Tootsie Pop' Followup
- The 'Tootsie Pop' model for unsafe code
- Unsafe abstractions
- Non-lexical lifetimes: adding the outlives relation
- Non-lexical lifetimes based on liveness
- Non-lexical lifetimes: introduction
- Nice errors in LALRPOP
- Parallel Iterators Part 2: Producers
- Parallel Iterators Part 1: Foundations
2015 10
- Rayon: data parallelism in Rust
- Virtual Structs Part 4: Extended Enums And Thin Traits
- LALRPOP
- Virtual Structs Part 3: Bringing Enums and Structs Together
- Virtual Structs Part 2: Classes strike back
- Virtual Structs Part 1: Where Rust's enum shines
- A few more remarks on reference-counting and leaks
- On reference-counting and leaks
- Modeling graphs in Rust using vector indices
- Little Orphan Impls
2014 16
- Purging proc
- Allocators in Rust
- Multi- and conditional dispatch in traits
- Attribute and macro syntax
- An experimental new type inference scheme for Rust
- Implied bounds
- Follow up to Focusing on Ownership
- Focusing on ownership
- Parallel pipelines for JS
- Value types in JavaScript
- Typed Objects Status Report
- Rust RFC: Opt-in builtin traits
- Rust RFC: Stronger guarantees for mutable borrows
- Closures and the borrow checker
- Rvalue lifetimes in Rust
- DST, Take 5
2013 48
- Structural arrays in Typed Objects
- Thoughts on DST, Part 4
- Thoughts on DST, Part 3
- Thoughts on DST, Part 2
- Thoughts on DST, Part 1
- part 2
- Optimizing SIMD, part 2
- Optimizing SIMD
- Parameter coercion in Rust
- Treating vectors like any other container
- Optimizing complex typed object assignments
- Intermingled parameter lists, take 2
- PJS Roadmap
- Intermingled parameter lists
- Iterators yielding mutable references, take 2
- Single inheritance
- Iterators yielding mutable references
- Typed object handles
- Fn types in Rust, take 3
- Type specifications in Parallel JS
- Integrating binary data and type inference in SpiderMonkey
- Rust presentation at Northeastern
- On the connection between memory management and data-race freedom
- Data Parallelism in Rust
- Reducing DST Annotation
- More on fns
- Removing procs
- Integrating binary data and PJs
- Procedures, continued
- Mutable fn alternatives
- Recurring closures and dynamically sized types
- Dynamically sized types, revisited
- Parallelizable JavaScript Subset
- The Case of the Recurring Closure
- Nested lifetimes
- A tour of the Parallel JS implementation (Part 2)
- Associated items continued
- Associated items
- Guaranteeing parallel execution
- A tour of the Parallel JS implementation (Part 1)
- Parallel JS lands
- Splitting the PJs API
- Interfacing with C functions in Rust
- Destructors and finalizers in Rust
- Revised for loop protocol
- Lifetime notation redux
- The case FOR deterministic results
- Deterministic or not?
2012 64
- Lifetime notation
- Improving our parallel intrinsic
- Self-hosted Parallel JS
- Imagine never hearing the phrase 'aliasable, mutable' again
- Restrict pointers
- Purity in Parallel JavaScript
- Function and object types
- Extending the definition of purity in Rust
- Rivertrail
- Termination of trait matching
- A postscript on traits and impls
- Refining traits and impls
- Moves based on type
- Type system for borrowing permissions
- Rvalue lifetimes
- Datasort refinements
- Type inference in Spidermonkey
- Generalizing inherited mutability
- Yet another tutorial on borrowed pointers
- About that 'tutorial'...
- Borrowed pointer tutorial
- Concurrent maps
- Fn types
- Borrowed Pointer Tutorial
- Hotpar
- Unifying patterns in alts and lets
- Mutability
- Mutability idea retracted
- Simple effect system
- Moving mutability into the type
- approach to mutability I recently discussed
- Vectors, slices, and functions, oh my!
- Iface types
- Fn types
- Borrowing errors
- Borrowing
- In favor of types of unknown size
- Permission regions for race-free parallelism
- References
- Vectors, strings, and slices
- On types and type schemes
- Syntax matters...?
- DOA: Don't overabstract
- Declared vs duckish typing
- Rust's object system
- For loops
- Servo design
- Avoiding region explosion in Rust
- Progress on inlining
- Serialization without type information via impls
- Regions tradeoffs
- Versioning considered OK
- CCI and versioning
- Returning refs
- Regions-lite...ish
- my previous post
- Using futures in the task API
- Task API
- Auto-serialization in Rust
- Breaking out is hard to do
- Cross-crate inlining
- Update
- Proposed JS parallelism vs actors
- Parallel Javascript
2011 16
- Composing blocks
- Block sugar in expressions
- Tone and criticism
- Dynamic race detection
- Implementing unique closures
- Const vs Mutable
- Partially ordered unique closures
- Challengines implementing unique closures
- Pure blocks
- Why not modes?
- Sendable functions
- Rust usability problems
- Coroutines for Rust
- Statement-level parallelism
- Rust without implicit copies
- Why case classes are better than variant types