Stuff I Wrote About Coding

2023

Oct 19 Does Go Have Subtyping?
Aug 04 Representing Heterogeneous Data
Jan 03 Type Checking If Expressions

2016

Jun 16 Long Names Are Long

2015

Sep 08 The Hardest Program I’ve Ever Written
Sep 07 What the Hero Sees: Field-of-View for Roguelikes
Feb 01 What Color is Your Function?

2014

Dec 21 Rooms and Mazes: A Procedural Dungeon Generator
Jul 15 A Turn-Based Game Loop
Jul 05 Dropping Loot

2013

Dec 08 Baby’s First Garbage Collector
Aug 26 What is “Open Recursion”?
Jul 18 JavaScript Isn’t Scheme
Apr 23 Playing with Generics in TypeScript 0.9.0
Apr 17 Well Done: A Sentinel Value
Feb 24 Iteration Inside and Out, Part 2
Jan 13 Iteration Inside and Out

2012

Dec 19 The Impoliteness of Overriding Methods
Jun 12 Multimethods, Global Scope, and Monkey-Patching
Jan 24 Higher Order Macros in C++

2011

Oct 29 A Proposal for Null-Safety in Dart
Oct 21 Wrapping My Head Around Optional Typing
Oct 12 Semicolons are a Shibboleth
Jun 06 Magpie Wants You!
Apr 21 Multimethods, Multiple Inheritance, Multiawesome!
Mar 19 Pratt Parsers: Expression Parsing Made Easy
Feb 21 Multiple Inheritance in JavaScript
Feb 13 Extending Syntax from Within a Language
Jan 16 Pattern Matching in a Dynamic OOP Language

2010

Dec 31 Rethinking User-Defined Operators
Dec 14 The Trouble with Constructors
Nov 26 The Biology of Sloppy Code
Nov 08 Refining Exceptions and Error Codes
Oct 29 Bootstrapping a Type System
Oct 21 The Language I Wish Go Was
Oct 01 Solving the Expression Problem
Sep 28 Ruby Blocks, Python’s “with”, and Magpie’s Test Suite
Sep 18 Future-Proofing, Uniform Access, and Masquerades
Sep 01 A Type Checking Conundrum!
Aug 31 Type Checking a Dynamic Language
Aug 23 “void”, “null”, “Maybe” and “nothing”
Aug 01 Class in the Front, Proto in the Back
Jul 24 Killing Primitive Loops and Conditionals
Jul 23 What I Learned at the Emerging Languages Camp
Jul 18 Jasic: A Complete Interpreter in One Java File
Jul 13 Fibers: Coroutines in Finch
Jul 07 Meltwater: A Color Theme for XCode
Jul 02 New Syntax for Binding Methods in Finch
Jun 25 Methods on the Ether: Or Creating Your Own Control Structures for Fun and Profit
Jun 11 Amaranth, an Open Source Roguelike in C#
Feb 17 New Chapter Up: Component
Jan 25 New Game Programming Patterns Chapters Up!

2009

Dec 26 Conditional Binding with “let” in Magpie
Oct 12 The Book
Jul 02 Closures and the Command Pattern
Jun 05 Naming Things in Code
May 15 Loops in Magpie
May 13 ML-Style Pattern Matching in C#
May 05 One and Only One
Apr 26 Stupid Magpie Tricks (Or: Yes, I’m Making a Programming Language Like Everyone Else)
Jan 03 Debunking C# vs C++ Performance

2008

Dec 28 Fixing Ambiguities in Grammars
Nov 23 “Constrained Compound” Design Pattern
Nov 17 Using an Iterator as a Game Loop
Apr 24 Incremental Development for Games (Is Hard)
Apr 10 A C# Feature Request: Extension Classes
Apr 08 What’s the Opposite of “Nullable”?
Mar 05 Checking Flags in C# Enums
Feb 26 Avoiding Overload Hell in C#
Feb 09 C# Extension Methods: Not Just for Breakfast