I wanted to give an update on the development of the uom library I am working on. In my first version I had strongly typed quantities likes DoubleLength and DecimalLength, which was my best idea at the time for fully typed quantities. In the meantime I changed the actual implementation to use dynamic proxies which greatly simplifies the necessary code and is amazingly fast (although there is some overhead compared to concrete classes, ~ 1.6 times slower).
Furthermore it is now possible to express the units in different systems of units, e.g. ESU-CGS, EMU-CGS or Gaussian. This affects the dimension and base units for each unit. The practical use is probably quite limited, but the units tool (https://www.gnu.org/software/units/) has a similar functionality, and its useful to verify the dimensional analysis code. The system of units to be used has to be chosen before runtime in a configuration file, as changing the system at runtime would lead to all kind of incompatibilities, which is acceptable imho.
I am still working on formatters and complete commonly used units, especially for the imperial / us customary systems.
The API of the Quantity and Unit classes should be stable. It made the most sense for me, but I am looking forward to feedback its possible that have made some misconceptions.
I am also planning to make first snapshot releases to nexus so that you can play around with it without the need to assemble it first. If you are interested, please let me know. The coordinates will be tech.neidhart.uom.
Thanks for feedback!