Our great sponsors
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
I came across this repo where someone actually took the time to convert Frink's unit data to F# (which also supports units of measure) and I got to wondering if Frink's inspired it.
https://github.com/avestura/FsFrink
BTW, I'd love to see more mainstream languages consider features like units of measure. I understand the tech-debt it would likely-incur, but I think it would be a fun mental exercise to really go through the different languages and ask how one might add units of measure.
For example, in F#, the units are erased when they're compiled, so there is no runtime support for units. But I could imagine a dynamic/weaker typed language implementing it with runtime support where units are implemented like atomic symbols that are paired with numbers. Maybe each compound unit could be represented with a unique symbol that's created at runtime.
Personally, I don't think languages explore enough with interesting literals. Combining units with non-numeric types like strings might make interpolation a little more interesting.
It seems to me that Haskell would be a great language for such a thing, ensuring correctness at compile time through the type system, e.g. using the units package https://hackage.haskell.org/package/units https://github.com/goldfirere/units/tree/master/units
It even has nice features like: "The laws of nature have dimensions, and they hold true regardless of the units used. For example, the gravitational force between two bodies is (gravitational constant) * (mass 1) * (mass 2) / (distance between body 1 and 2)^2, regardless of whether the distance is given in meters or feet or centimeters. In other words, every law of nature is unit-polymorphic."
"The units package supports unit-polymorphic programs ..."
I found this one, but I haven't tested it:
https://github.com/eternal-flame-AD/unitdc-rs
I ran across it because I wanted to know if dc, the old Unix rpn calculator, could do units.
Rust as well. There are at least a few libraries to do it, but I'll link the one I wrote:
https://crates.io/crates/dimensioned