Strict types is a formal notation for defining and serializing generalized algebraic data types (GADT) in a deterministic and confined way. It is developed with type theory in mind.
In simple terms, strict types are protocol buffers and gRPC for functional programming (or, for rust devs, functional-style serde).
Strict Types are:
- schema-based (with the schema being strict encoding notation),
- semantic, i.e. defines types not just as they are layed out in memory, but also depending on their meaning,
- deterministic, i.e. produces the same result for a given type,
- portabile, i.e. can run on ahy hardware architecture and OS, including low-performant embedded systems,
- confined, i.e. provides guarantees and static analysis on a maximum size of the typed data,
- formally verifiabile.
Strict Types include:
- Strict Encoding - set of libraries for serializing / deserializing data types in binary formats (a protobuf analog);
- Strict RPC, which is a gRPC analog based on strict encoding;
- Strict REST, which is an HTML REST JSON analog, based on Strict RPC (instead of HTML) and Strict Encoding (instead of JSON).
Strict Types is WIP. Currently it is used by a number of projects including AluVM, RGB smart contracts, Farcaster, Cyphernet and others.
Whitepaper |
Yellowpaper |
Compiler |
Disassembler |
Standard type library (STL) |
Utilities