On Wed, Sep 25, 2019 at 12:58 PM Lassi Kortela <xxxxxx@lassi.io> wrote:
 
And the reason the text and binary formats should have 100% equal data
models, is simplicity for users - the proper aim of abstraction. Rich
Hickey had a point about Clojure, that it often sits between external
systems, and users should be able to get some data from an external
system, frob only part of it, and pass on the rest to some other system.
Without being concerned about the contents of the data they are not
frobbing. He said that he doesn't like static typing because it's
obsessed with dictating the type of all data, including data that's just
along for the ride and that his code doesn't care about. 

While protocol buffers have their faults, this is one of the things that their designers worked hard at, and which I admire.  Protocol buffers can contain fields that my program doesn't recognize, but my program can manipulate the parts that it understands and pass those and the rest along to another program that might understand different parts.  For example, I can write a program that doesn't understand anything at all about the protocol buffers it is receiving, but can store them on disk and retrieve them when a program that does understand them requests them.