#units-of-measurement #operation #numbers #macro #object #uncertainty #si-units #meaningless #forbidding

bin+lib rs-measures

A library of Rust macros to encapsulate numbers in measures, provided with units of measurement, allowing any meaningful operation, but statically forbidding meaningless operations with them

6 releases (breaking)

new 0.4.1 Nov 3, 2025
0.4.0 Jan 30, 2024
0.3.0 Jan 22, 2024
0.2.0 Jan 16, 2024
0.0.0 Jan 8, 2024

#88 in Value formatting


Used in units-relation

MIT/Apache

165KB
3.5K SLoC

rs-measures

Crates.io Docs.rs CI Coverage Status

Remark: Since the end of October 2025, this repo is in maintenance mode, because another similar crate is recommended instead of it: Measures-rs. That repo is definitely better for several reasons, among which:

  • It uses only declarative macros, instead of procedural macros.
  • It adds optional approximate measures, i.e. measures with an uncertainty. The operations with such measures propagate the uncertainty to the results.

Description

This repository contains the source code and the documentation of two Rust-language crates: rs-measures and units-relation.

Their purpose is to improve the readability and correctness of applications using numeric values having units of measurement. These can be the ones used in physics or in geometry, but also the ones commonly used in industry.

This purpose is achieved by encapsulating such numbers into objects whose type represents their unit of measurement, and providing for such types only the operations which make sense.

The documentation is in these files:

  • Motivation: It describes the advantages of using these crates instead of other crates or naked numbers.
  • Tutorial: It is a step-by-step course on the use of these crates.
  • Architecture: It explains the design choices of the crates.

There are several examples:

  • full: Very long print of the provided examples of units of measures, and of the results of any supported operation.
  • bench, bench2: Simple check of speed, compared with naked numbers or with the crate nalgebra.
  • base, mks, si, unit: Translation for Rs-measures of the examples included in the crate uom version 0.35.0.
  • nbody-measures: It is put beside example nbody-naked. The latter is a benchmark program not using any external libraries, nor units of measurement, taken from The Computer Language Benchmarks Game. The former is a translation to a version using this library. At the beginning of both files, it is explained how to use them. In a specific setting, it appears that nbody-measures takes 11% more time than nbody-naked.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

See CONTRIBUTING.md.

No runtime deps