Considerations on Codecrafting
About
  • Mar 26, 2025

    Why You Need Subtyping

  • Mar 1, 2025

    The problem with type aliases

  • Feb 14, 2025

    Designing type inference for high quality type errors

  • Dec 21, 2024

    Four limitations of Rust's borrow checker

  • Jun 7, 2024

    The Inconceivable Types of Rust: How to Make Self-Borrows Safe

  • Mar 3, 2024

    What are GADTs and why do they make type inference sad?

  • Jan 17, 2024

    Identifying Rust's collect::<Vec<_>>() memory leak footgun

  • Aug 28, 2023

    How I came second out of 999 in the Salem Center prediction market tournament without knowing anything about prediction markets, and what I learned along the way - Part 2

  • Aug 1, 2023

    How I came second out of 999 in the Salem Center prediction market tournament without knowing anything about prediction markets, and what I learned along the way - Part 1

  • May 15, 2023

    Tokio, FuturesUnordered, and the Thundering Herd Problem

  • Mar 5, 2023

    Fixing the Next 10,000 Aliasing Bugs

  • Jul 24, 2022

    Fixing the Next Thousand Deadlocks: Why Buffered Streams Are Broken and How To Make Them Safer

  • Jun 25, 2022

    An Unfortunate Experience with Rust

  • Apr 25, 2022

    When Type Annotations Are Code Too

  • Oct 3, 2021

    Implicit Overflow Considered Harmful (and how to fix it)

  • Aug 9, 2021

    When Zero Cost Abstractions Aren't Zero Cost

  • May 5, 2021

    How I Hacked Google App Engine: Anatomy of a Java Bytecode Exploit

  • Feb 3, 2021

    An experiment in automatic syntax error correction

  • Oct 17, 2020

    Subtype Inference by Example Part 15: Monomorphic Type Annotations

  • Oct 10, 2020

    Subtype Inference by Example Part 14: Type Annotations— What are they good for?

  • Oct 3, 2020

    Subtype Inference by Example Part 13: Conditional Flow Constraints, Presence Polymorphism, and Type Level Computation

  • Sep 26, 2020

    Subtype Inference by Example Part 12: Flow Typing and Mixed Comparison Operators

  • Sep 19, 2020

    Subtype Inference by Example Part 11: The Value Restriction and Polymorphic Recursion

  • Sep 5, 2020

    Subtype Inference by Example Part 10: Let Polymorphism

  • Aug 29, 2020

    Subtype Inference by Example Part 9: Match Wildcards, Record Extension and Row Polymorphism

  • Aug 22, 2020

    Subtype Inference by Example Part 8: Mutability

  • Aug 15, 2020

    Subtype Inference by Example Part 7: Spanned Error Messages

  • Aug 8, 2020

    Subtype Inference by Example Part 6: Numeric Types and Operators

  • Aug 1, 2020

    Subtype Inference by Example Part 5: Incremental Reachability

  • Jul 25, 2020

    Subtype Inference by Example Part 4: The Typechecker Core

  • Jul 18, 2020

    Subtype Inference by Example Part 3: The Typechecker Frontend

  • Jul 11, 2020

    Subtype Inference by Example Part 2: Parsing and Biunification

  • Jul 4, 2020

    Subtype Inference by Example Part 1: Introducing CubiML

  • Apr 1, 2020

    Improving compile speed: the dark arts

  • Dec 17, 2018

    Solution to the besquare crypto challenge

  • Jan 17, 2018

    Ref patterns, destructuring, and invisible borrows

  • Dec 29, 2017

    How ES6 classes really work and how to build your own

  • Jul 26, 2017

    Solving the Traveling Pacman Problem

  • Jul 22, 2017

    Rust is self driving C++

  • Mar 2, 2017

    Generating 64 bit hash collisions to DOS Python

  • Feb 19, 2017

    How copying an int made my code 11 times faster

  • Feb 11, 2017

    Optimizing Rc memory usage in Rust

  • Jan 22, 2017

    Parallelizing Enjarify in Go and Rust

  • Jan 7, 2017

    Rust makes implicit invariants explicit

  • Sep 19, 2016

    My experience rewriting Enjarify in Rust