2025
Jul 13
|
Setting Up an SDL3 Mac App in XCode 16
|
code
game-dev
macos
|
May 30
|
Consider Knitting
|
art
knitting
|
May 26
|
Access Control Syntax
|
code
language
vgs
|
2023
Oct 19
|
Does Go Have Subtyping?
|
code
go
language
vgs
|
Aug 04
|
Representing Heterogeneous Data
|
code
language
vgs
|
Jan 03
|
Type Checking If Expressions
|
code
language
vgs
|
2022
Feb 13
|
Stupid Dog
|
personal
|
2021
Jul 29
|
640 Pages in 15 Months
|
book
design
language
personal
|
2020
Apr 05
|
Crafting “Crafting Interpreters”
|
book
design
language
personal
|
2018
May 19
|
40 Songs
|
music
personal
|
2016
Jun 16
|
Long Names Are Long
|
code
dart
|
2015
Sep 08
|
The Hardest Program I’ve Ever Written
|
code
dart
|
Sep 07
|
What the Hero Sees: Field-of-View for Roguelikes
|
code
game
roguelike
|
Feb 01
|
What Color is Your Function?
|
code
dart
go
javascript
language
lua
|
2014
Dec 21
|
Rooms and Mazes: A Procedural Dungeon Generator
|
code
dart
game-dev
roguelike
|
Nov 20
|
How My Book Launch Went
|
book
design
game-dev
game-patterns
|
Nov 03
|
Zero to 353 Pages: Bringing My Web Book to Print and E-book
|
book
design
game-dev
game-patterns
|
Jul 15
|
A Turn-Based Game Loop
|
code
dart
game-dev
roguelike
|
Jul 05
|
Dropping Loot
|
code
dart
game-dev
roguelike
|
Apr 22
|
Zero to 95,688: How I wrote Game Programming Patterns
|
book
game-dev
game-patterns
|
Mar 02
|
Nostalgia Rathole
|
ai
music
personal
|
2013
Dec 08
|
Baby’s First Garbage Collector
|
c
code
language
|
Aug 26
|
What is “Open Recursion”?
|
code
dart
language
|
Jul 18
|
JavaScript Isn’t Scheme
|
code
js
language
scheme
|
Apr 23
|
Playing with Generics in TypeScript 0.9.0
|
code
dart
language
typescript
|
Apr 17
|
Well Done: A Sentinel Value
|
code
go
language
magpie
|
Feb 24
|
Iteration Inside and Out, Part 2
|
code
dart
go
language
lua
magpie
python
ruby
|
Jan 13
|
Iteration Inside and Out
|
code
dart
language
magpie
ruby
|
2012
Dec 19
|
The Impoliteness of Overriding Methods
|
beta
code
language
oop
|
Jun 12
|
Multimethods, Global Scope, and Monkey-Patching
|
code
language
magpie
|
Jan 24
|
Higher Order Macros in C++
|
c
code
cpp
|
2011
Oct 29
|
A Proposal for Null-Safety in Dart
|
code
dart
language
|
Oct 21
|
Wrapping My Head Around Optional Typing
|
code
dart
language
|
Oct 12
|
Semicolons are a Shibboleth
|
code
dart
|
Sep 17
|
Time for a New Blog
|
blog
|
Jun 06
|
Magpie Wants You!
|
code
language
magpie
oscon
|
Apr 21
|
Multimethods, Multiple Inheritance, Multiawesome!
|
code
cpp
java
js
language
magpie
|
Mar 19
|
Pratt Parsers: Expression Parsing Made Easy
|
code
java
js
language
magpie
parsing
|
Feb 21
|
Multiple Inheritance in JavaScript
|
code
javascript
language
|
Feb 13
|
Extending Syntax from Within a Language
|
code
java
language
magpie
parsing
|
Jan 16
|
Pattern Matching in a Dynamic OOP Language
|
c
code
js
language
magpie
|
2010
Dec 31
|
Rethinking User-Defined Operators
|
code
cpp
go
java
language
magpie
parsing
|
Dec 14
|
The Trouble with Constructors
|
code
language
magpie
|
Nov 26
|
The Biology of Sloppy Code
|
code
|
Nov 08
|
Refining Exceptions and Error Codes
|
code
language
magpie
|
Oct 29
|
Bootstrapping a Type System
|
code
java
language
magpie
|
Oct 21
|
The Language I Wish Go Was
|
code
go
language
|
Oct 01
|
Solving the Expression Problem
|
code
java
language
magpie
|
Sep 28
|
Ruby Blocks, Python’s “with”, and Magpie’s Test Suite
|
code
language
magpie
python
ruby
|
Sep 18
|
Future-Proofing, Uniform Access, and Masquerades
|
c-sharp
code
java
language
magpie
|
Sep 01
|
A Type Checking Conundrum!
|
code
language
magpie
|
Aug 31
|
Type Checking a Dynamic Language
|
code
java
language
magpie
python
|
Aug 23
|
“void”, “null”, “Maybe” and “nothing”
|
code
java
language
magpie
|
Aug 01
|
Class in the Front, Proto in the Back
|
code
java
language
magpie
|
Jul 24
|
Killing Primitive Loops and Conditionals
|
code
finch
language
|
Jul 23
|
What I Learned at the Emerging Languages Camp
|
code
language
parsing
|
Jul 18
|
Jasic: A Complete Interpreter in One Java File
|
code
jasic
language
parsing
|
Jul 13
|
Fibers: Coroutines in Finch
|
code
cpp
finch
game-dev
language
|
Jul 07
|
Meltwater: A Color Theme for XCode
|
code
design
|
Jul 02
|
New Syntax for Binding Methods in Finch
|
code
|
Jun 25
|
Methods on the Ether: Or Creating Your Own Control Structures for Fun and Profit
|
code
finch
language
|
Jun 11
|
Amaranth, an Open Source Roguelike in C#
|
c-sharp
code
game-dev
roguelike
|
Feb 17
|
New Chapter Up: Component
|
code
cpp
game-dev
game-patterns
|
Jan 25
|
New Game Programming Patterns Chapters Up!
|
code
cpp
game-patterns
|
2009
Dec 26
|
Conditional Binding with “let” in Magpie
|
code
language
magpie
|
Oct 12
|
The Book
|
code
cpp
game-dev
game-patterns
|
Jul 02
|
Closures and the Command Pattern
|
c-sharp
code
design
|
Jun 05
|
Naming Things in Code
|
code
language
|
May 15
|
Loops in Magpie
|
c-sharp
code
language
magpie
|
May 13
|
ML-Style Pattern Matching in C#
|
c-sharp
code
f-sharp
language
|
May 05
|
One and Only One
|
code
language
magpie
|
Apr 26
|
Stupid Magpie Tricks (Or: Yes, I’m Making a Programming Language Like Everyone Else)
|
code
language
magpie
|
Jan 03
|
Debunking C# vs C++ Performance
|
c-sharp
code
cpp
optimization
|
2008
Dec 28
|
Fixing Ambiguities in Grammars
|
code
f-sharp
language
parsing
|
Nov 28
|
Outsourced Blog Comments
|
blog
|
Nov 23
|
“Constrained Compound” Design Pattern
|
c-sharp
code
design
|
Nov 17
|
Using an Iterator as a Game Loop
|
c-sharp
code
game-dev
roguelike
|
May 12
|
Visualizing the Democratic Primary
|
politics
visualization
|
Apr 24
|
Incremental Development for Games (Is Hard)
|
code
game-dev
|
Apr 10
|
A C# Feature Request: Extension Classes
|
c-sharp
code
|
Apr 08
|
What’s the Opposite of “Nullable”?
|
c-sharp
code
|
Mar 05
|
Checking Flags in C# Enums
|
c-sharp
code
|
Feb 26
|
Avoiding Overload Hell in C#
|
c-sharp
code
|
Feb 09
|
C# Extension Methods: Not Just for Breakfast
|
c-sharp
code
|