F# has a feature kinda like this: https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/units-of-measure
Thought the same, plus you have the massive .NET Ecosystem.
This is a cool idea. There are other programming languages that have libraries that expose similar behavior. For instance, Rust has the uom crate, Haskell has the units package, and C++ has the header only library SI.
But there is something to be said about it being built in.
The web page says other libraries implement units whereas they implement dimensions. 1 cm and 1 inch has the same dimension, namely length, and you are able to add them together and get a correct result. seems nice. I don’t know if it’ll have any practical benefit but I like it.
I can’t talk about the other libraries but the uom crate does the same thing.
The dimensions are encoded as a vector of generics, allowing you to get the correct unit even when dividing a distance by time for example.
It’s quite the clever use of Rusts type system.
For sure. It’d be nice to have the units in a separate namespace but at least Numbat won’t let you override identifiers already defined in the system of measure. I use Pint on Python - I usually keep the units in an identifier named
u
so they can’t get accidentally overridden. That means either usingu.km
for single units oru('g/cm^3')
for composite units. It’d be great if the language could separate units e.g. as[
or `` but getting a compact syntax to distinguish the units namespace without colliding with other language features would be tricky. I remember F# having a good syntax but didn’t dive that deep since it’s not used widely in my field. ]
Wish I had this in engineering undergrad! Very cool.
I’m currently in engineering undergrad and this looks like it’ll be a lifesaver. Wolfram Alpha can do some pretty good work with units sometimes. But a lot of the time it’ll do weird stuff like refuse to interpret “V” as “volt”, so you have to type out the full name of every single unit. This language should handle that a million times better.
I’ve always thought Frink (frinklang.org) looked pretty cool. It’s been around forever. I’ve never used it though.
There exist a bunch of libraries designed for kotlin using its extension methods and properties system to produce the same, like this one : https://github.com/vsirotin/si-units
Fascinating idea, that was an interesting read! Don’t think I’d ever seen something like that done before.
Really cool! Reminds me a bit of the Numi calculator too
I do a lot of this stuff with the HP48 Units menu (albeit at this point via an emulator on my phone).
I would have loved to use that when I was studying physics
This looks like a lot of fun to use, I loved the example from What If, so many units!
Reminds me of Mathcad and Calca