Skip to content

Releases: upkie/palimpsest

v2.1.0

24 May 16:38
e4e1934
Compare
Choose a tag to compare

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 to Eigen::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

09 Oct 16:41
Compare
Choose a tag to compare

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

04 Oct 17:50
ecc61ae
Compare
Choose a tag to compare

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

25 Apr 09:24
279a311
Compare
Choose a tag to compare

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.