#category-theory #encoding #syntax-tree #gadt #strict-encoding #memory-layout #ubideco

bin+lib strict_types

Strict types: confined generalized algebraic data types (GADT)

23 releases (13 stable)

new 2.7.0-beta.3 Apr 18, 2024
2.7.0-beta.2 Mar 12, 2024
2.7.0-beta.1 Feb 15, 2024
1.6.3 Oct 9, 2023
1.0.0-rc.1 Mar 28, 2023

#1076 in Math

Download history 1124/week @ 2023-12-23 569/week @ 2023-12-30 312/week @ 2024-01-06 308/week @ 2024-01-13 378/week @ 2024-01-20 548/week @ 2024-01-27 459/week @ 2024-02-03 537/week @ 2024-02-10 320/week @ 2024-02-17 1420/week @ 2024-02-24 1172/week @ 2024-03-02 1431/week @ 2024-03-09 1216/week @ 2024-03-16 1396/week @ 2024-03-23 655/week @ 2024-03-30 381/week @ 2024-04-06

3,917 downloads per month
Used in 24 crates (13 directly)

Apache-2.0

260KB
6K SLoC

Strict types AST and typelib implementation

Protobufs for functional programming

This is a set of libraries for working with abstract syntax trees and libraries of strict types – type system made with category theory which ensures provable properties and bounds for the in-memory and serialized type representation.

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.

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.

To learn more about strict encoding read the spec.

Strict types works with type definitions. It allows:

  • static analysis of data types, like
    • defining semantic type ids;
    • specifying exact memory layout;
    • type equivalence in terms of semantics and memory layout;
    • size of serialized data
  • composing types into type libraries;
  • versioning type libraries basing on the semantic types;

The library allows to generate & compile strict type libraries (STL) from rust types implementing StrictEncoding trait -- and ensures that the deserialization with StrictDecode follows the same memory and semantic layout.

Strict Types Library

The library is able to reflect on itself, producing replica of its rust data types in strict types system.

Strict types library id: stl:9KALDYR8Nyjq4FdMW6kYoL7vdkWnqPqNuFnmE9qHpNjZ#lagoon-rodent-option

Import this lib by putting in the file header import lagoon_rodent_option_9KALDYR8Nyjq4FdMW6kYoL7vdkWnqPqNuFnmE9qHpNjZ as StrictTypes

Source code can be found in [stl/StrictTypes.sty] file.

Contributing

CONTRIBUTING.md

License

The libraries are distributed on the terms of Apache 2.0 license.

Dependencies

~6MB
~135K SLoC