Pretty sure this will cause lots of GC churn. Maybe messages need to have a `Zero` method too?