Cleanly merge git repositories

I describe how I did a clean, four-way merge of git repositories.

December 8, 2022

Operator constraints in Go

I describe four ways to express constraints for operators in generic Go code and the trade-offs involved.

May 23, 2022

Calculating type sets is harder than you think

I try to explain why the problem of calculating the exact contents of a type set in Go is harder than it might seem on the surface.

May 16, 2022

Parametric context

Go’s Context.Value is controversial because of a lack of type-safety. I design a solution for that based on the new generics design draft.

July 20, 2020

A bird's eye view of Go

I provide a very high-level overview of what Go-the-language means vs. Go-the-ecosystem vs. Go-an-implementation. I also try to provide specific references to what documentation is most useful for what purpose.

June 12, 2019

Using roughtime as a "cryptographic notary"

Roughtime can be (ab)used for Trusted Timestamping. I wrote a simple tool as a PoC

October 10, 2018

Scrapping contracts

I describe a way to simplify the generics design. The ideas are not particularly novel and have been expressed to various degrees by other people as well. I hope to provide a more complete view of the design though.

September 5, 2018

Why doesn't Go have variance in its type system?

I explain what co-, contra- and invariance are and what the implications for Go’s type system would be. In particular, why it’s impossible to have variance in slices.

June 3, 2018

Persistent datastructures with Go

I present a couple of patterns that help modelling persistent datastructures in Go. I also apply them to three examples.

February 25, 2018

What even is error handling?

I philosophize about error handling, what it actually means and how to characterize Go’s approach to it.

January 21, 2018