Releases: upkie/palimpsest
v2.1.0
This release enables serialization of std::vector<double>
and std::vector<EigenType>
for all Eigen (vector, matrix, quaternion) types. The former deserializes to Eigen::VectorXd
, a choice being made as type information is lost when serializing. The latter deserialize to std::vector<Eigen::VectorXd>
for now.
Added
- CICD: Add changelog check
- CICD: Unit tests for vectors and vectors-of-vectors serialization
- Serialization of
std::vector<Eigen::VectorXd>
- Serialization of
std::vector<double>
deserializing toEigen::VectorXd
- Type check arrays at deserialization based on first element
- WIP: Serialization of
std::vector
's of other Eigen types - Writer for vectors of strings
Changed
- Raise a TypeError when trying to serialize an unknown type
v2.0.0
This is version 2 of palimpsest, a C++ library with a dictionary type similar to Python's dict
, and fast. This new version simplifies the former split between extend
and update
into a single update
function with the same semantics as in Python.
Breaking changes
- Remove
extend
function - Remove
insert_initializer
function - The
update
function now inserts keys that are not already present
Added
- Bazel: Find clang-format on various operating systems
Changed
- Add underscore suffix to private functions
- Bazel: Separate coverage, linting and testing jobs
- Bazel: Update Bazelisk script
- Compile in optimized rather than fast-build mode by default
- Remove Makefile from examples directory
v1.1.0
This release adds CMake as a second build option alongside Bazel, as well as various under-the-hood CI improvements.
Added
- CMake workflow alongside Bazel in CI
- Lint-only test config
- Report unit test coverage
- Unit tests for
mpack::Writer
- Unit tests for
mpack::read
functions
Fixed
- Bazel: Label
build_file
attributes for downstream dependencies
v1.0.0
This is the initial release of palimpsest, a small C++ library that provides a Dictionary
type meant for fast value updates and serialization. It is called palimpsest because these dictionaries are designed for frequent rewritings (values change fast) on the same support (keys change slow).
Overview
The two main assumptions in palimpsest dictionaries are that:
- Keys are strings.
- Values hold either a sub-dictionary or a type that can be unambiguously serialized.
Numbers, strings and tensors can be readily serialized, so we can straightforwardly write structures world descriptions in games or kinematic trees in robotics that can then be serialized between C++ and Python processes. Check out the README example for more concrete details.
Features and non-features
All design decisions have their pros and cons, and the ones in palimpsest are rooted in the robotics applications that prompted its development. Take a look at the features and non-features below to decide if it is also a fit for your use case.
Features
- Prioritizes speed (over user-friendliness)
- References to sub-dictionaries or values help avoid key lookups
- Built for fast dictionary exchange with Python
- Built-in support for Eigen
- Serialize to and deserialize from MessagePack
- Print dictionaries to standard output as JSON
- Extensible to new types (as long as they deserialize unambiguously)
Non-features
- (Prioritizes speed) over user-friendliness
- Array values are mostly limited to Eigen tensors (matrix, quaternion, vector)
- Copy constructors are disabled
- (Extensible to new types) as long as they deserialize unambiguously
- WIP: key collisions are pretty much left up to the user
- WIP: shallow and deep copies are not implemented yet
Check out the README and documentation for installation instructions and further details.