Transit – A format for conveying values between different languages
I really think the future is schema-based.<p>The evolution of technologies goes something like this:<p>1. Generation 1 is statically typed / schemaful because it's principled and and offers performance benefits.<p>2. Everyone recoils in horror at how complicated and over-designed generation 1 is.  Generation 2 is dynamically typed / schemaless, and conventional wisdom becomes that this is generally more programmer-friendly.<p>3. The drawbacks of schemaless become more clear (annoying runtime errors, misspelled field names, harder to statically analyze the program/system/etc).  Meanwhile the static typing people have figured out how offer the benefits of static typing without making it feel so complicated.<p>We see this with programming languages:<p>1. C++<p>2. Ruby/Python/PHP/etc.<p>3. Swift, Dart, Go, Rust to some extent, as well as the general trend of inferred types and optional type annotations<p>Or messaging formats:<p>1. CORBA, ASN.1, XML Schema, SOAP<p>2. JSON<p>3. Protocol Buffers, Cap'n Proto, Avro, Thrift<p>Or databases:<p>1. SQL<p>2. NoSQL<p>3. well, sort of a return to SQL to some extent, it wasn't that bad to begin with given the right tooling.<p>If you are allergic to the idea of schemas, I would be curious to ask:<p>1. isn't most of your data "de facto" schemaful anyway?  Like when you send an API call with JSON, isn't there a standard set of keys that the server is expecting?  Isn't it nicer to actually write down this set of keys and their expected types in a way that a machine can understand, instead of it just being documentation on a web page?<p>2. Is it the schema <i>itself</i> that you are opposed to, or the pain that clunky schema-based technologies have imposed on you?  If importing your schema types was as simple as importing any other library function in your native language, are you still opposed to it?