The Curious Engineer

All blogs / Rust

matklad

matklad.github.io

matklad's Arts&Crafts

RustZigDev tools / editors / IDEsSoftware / engineering practiceCompilers

Posts
207 from 12 Mar 2017 to 29 Oct 2026
Posting
weekly (43 in the last year)
Kind
personal blog
Feed
https://matklad.github.io/feed.xml

2026 30

  1. Avoid Public Functions Calling Other Public Functions
  2. On Git Refs
  3. Benchmark In Milliseconds
  4. Finding Bugs
  5. Static Allocation, Constant Work
  6. Cancelation Terminology
  7. Rust Glancer
  8. Better Batteries
  9. Printing Lists
  10. Zig's Io.Threaded is Neat
  11. Memory Safety's Hardest Problem
  12. CSS: Unavoidable Bad Parts
  13. TIL: Symlinking NixOS Dotfiles
  14. Always Be Blaming
  15. Catch Flakes On Main
  16. Learning Software Architecture
  17. Steering Zig Fmt
  18. Minimal Viable Zig Error Contexts
  19. 256 Lines or Less: Test Case Minimization
  20. Consensus Board Game
  21. JJ LSP Follow Up
  22. Against Query Based Compilers
  23. Wrapping Code Comments
  24. Diagnostics Factory
  25. Justifying text-wrap: pretty
  26. Programming Aphorisms
  27. CI In a Box
  28. make.ts
  29. Considering Strictly Monotonic Time
  30. Vibecoding #2

2025 39

  1. Memory Safety Is ...
  2. The Second Great Error Model Convergence
  3. Parsing Advances
  4. Static Allocation For Compilers
  5. Newtype Index Pattern In Zig
  6. Do Not Optimize Away
  7. Mechanical Habits
  8. Size Matters
  9. TigerBeetle Blog
  10. Readonly Characters Are a Big Deal
  11. Error ABI
  12. Error Codes for Control Flow
  13. On Async Mutexes
  14. Look Out For Bugs
  15. Vibe Coding Terminal Editor
  16. Ads Are a Positional Good
  17. Links
  18. Retry Loop Retry
  19. Reserve First
  20. Zig's Lovely Syntax
  21. Partially Matching Zig Enums
  22. font-size-adjust Is Useful
  23. Inverse Triangle Inequality
  24. RSS Server Side Reader
  25. Open Source Can't Coordinate
  26. Profiling Challenge Results
  27. Scalar Select Anti-Pattern
  28. Performance Profile Visualization Challenge
  29. Against Horizontal Scroll
  30. A Fun Zig Program
  31. Things Zig comptime Won't Do
  32. Underusing Snapshot Testing
  33. Random Numbers Included
  34. Deno Simple Server Side Rendering
  35. Tariffs
  36. A Debugger is a REPL is a Debugger
  37. Use Long Options in Scripts
  38. Comptime Zig ORM
  39. MacOS for KDE Users

2024 22

  1. What Is a dependency?
  2. Minimal Version Selection Revisited
  3. Majjit LSP
  4. SemVer Is Not About You
  5. A Missing IDE Feature
  6. Two Workflow Tips
  7. On Ousterhout's Dichotomy
  8. The Watermelon Operator
  9. What is io_uring?
  10. Try to Fix It One Level Deeper
  11. The Fundamental Law Of Software Dependencies
  12. STD Doesn't Have to Abstract OS IO
  13. Primitive Recursive Functions For A Working Programmer
  14. How I Use Git Worktrees
  15. Properly Testing Concurrent Data Structures
  16. Regular, Recursive, Restricted
  17. Basic Things
  18. Zig defer Patterns
  19. Kafka versus Nabokov
  20. Window: Live, Constant Time Grep
  21. Write Less
  22. Of Rats and Ratchets

2023 39

  1. O(1) Build File
  2. Git Things
  3. CI Dream
  4. Retry Loop
  5. Non-Send Futures When?
  6. IronBeetle
  7. Push Ifs Up And Fors Down
  8. Data Oriented Blogging
  9. Unified Versus Split Diff
  10. Unless Explicitly Specified Otherwise, Open Source Software With Users Carries Moral Obligations
  11. LSP could have been better
  12. UNIX Structured Concurrency
  13. What is an Invariant?
  14. Comparative Analysis
  15. TypeScript is Surprisingly OK for Compilers
  16. Role Of Algorithms
  17. Types and the Zig Programming Language
  18. Fantastic Learning Resources
  19. On Modularity of Lexical Analysis
  20. Three Different Cuts
  21. GitHub Merge Queue
  22. The Worst Zig Version Manager
  23. Resilient LL Parsing Tutorial
  24. Zig Language Server And Cancellation
  25. Value Oriented Programming Needs Implicits?
  26. Data Oriented Parallel Value Interner
  27. Reasonable Bootstrap
  28. Can You Trust a Compiler to Optimize Your Code?
  29. UB Might Be a Wrong Term for Newer Languages
  30. Rust Is a Scalable Language
  31. Zig And Rust
  32. An Engine for an Editor
  33. Why SAT Is Hard
  34. Three-State Stability
  35. <3 Deno
  36. How a Zig IDE Could Work
  37. Rust's Ugly Syntax
  38. Next Rust Compiler
  39. On Random Numbers

2022 17

  1. Ray Tracer Construction Kit
  2. If a Tree Falls in a Forest, Does It Overflow the Stack?
  3. Accessibility: px or rem?
  4. Elements Of a Great Markup Language
  5. GitHub Actions Permissions
  6. Why Linux Troubleshooting Advice Sucks
  7. Hard Mode Rust
  8. From Paxos to BFT
  9. Almost Rules
  10. Unit and Integration Tests
  11. Notes on GATs
  12. Caches In Rust
  13. Binary Privacy
  14. Builder Lite
  15. Why LSP?
  16. Self Modifying Code
  17. RPATH, or why lld doesn't work on NixOS

2021 20

  1. Notes On Module System
  2. Generate All the Things
  3. One Hundred Thousand Lines of Rust
  4. Fast Rust Builds
  5. Large Rust Workspaces
  6. ; echo Shell Injection
  7. It's Not Always ICache
  8. Inline In Rust
  9. How to Test
  10. Design Pattern: Kitchen Sink
  11. Concurrent Expression Problem
  12. Async Benchmarks Index
  13. Goroutines Are Not Significantly Smaller Than Threads
  14. Delete Cargo Integration Tests
  15. Another Generic Dilemma
  16. matklad @ NEAR
  17. For the Love of Macros
  18. A Better Rust Profiler
  19. ARCHITECTURE.md
  20. Two Kinds of Code Review

2020 19

  1. Call Site Dependency Injection
  2. Notes On Lock Poisoning
  3. Why an IDE?
  4. Notes on Paxos
  5. Study of std::io::Error
  6. Fast Thread Locals In Rust
  7. Why Not Rust?
  8. Your Language Sucks, It Doesn't Matter
  9. Rust in 2021
  10. Code Smell: Concrete Abstraction
  11. Who Builds the Builder?
  12. Things I Have Learned About Life
  13. Two Beautiful Rust Programs
  14. From Pratt to Dijkstra
  15. Simple but Powerful Pratt Parsing
  16. Fast and Simple Rust Interner
  17. Why is Rust the Most Loved Programming Language?
  18. Mutexes Are Faster Than Spinlocks
  19. Spinlocks Considered Harmful

2019 8

  1. A Better Shell
  2. rust-analyzer Blog
  3. Join Your Threads
  4. Unsafe as a Human-Assisted Type System
  5. Perils of Constructors
  6. Linux Desktop Tips
  7. Consider Using Asciidoctor for Your Next Presentation
  8. Rust Course Retrospective

2018 9

  1. Exceptions vs Structured Concurrency
  2. A Trick For Test Maintenance
  3. Modern Parser Generator
  4. Newtype Index Pattern
  5. Typed Key Pattern
  6. Encapsulating Lifetime of the Field
  7. Effective Pull Requests
  8. Stopping a Rust Worker
  9. Make your own make

2017 4

  1. Dynamic types in LLDB
  2. NixOS Notes
  3. Min of Three Part 2
  4. Min of Three