RFC: Units of measurement for D (Phobos?)
ZombineDev via Digitalmars-d
digitalmars-d at puremagic.com
Wed Mar 16 10:12:42 PDT 2016
On Wednesday, 16 March 2016 at 14:19:56 UTC, Nordlöw wrote:
> On Wednesday, 16 March 2016 at 13:57:51 UTC, ZombineDev wrote:
>> BTW, is there overlap between a unit system library and
>> Andrei's BigO system? Maybe it would be useful if the later
>> can be expressed with the former.
>
> Interesting. Could you elaborate? What units should be involved?
>
> Andralex?
I think it started here:
http://forum.dlang.org/post/n3sdm1$1fba$1@digitalmars.com
See also:
http://forum.dlang.org/post/n3t8f8$2ii6$1@digitalmars.com
http://forum.dlang.org/post/n4s66a$i9u$1@digitalmars.com
https://issues.dlang.org/show_bug.cgi?id=15464
The two dimensions are time and space (memory). They are not
expressed in absolute units of measurement, but show approximate
rate of growth as the size of the input grows. Andrei's proposal
defines an algebra over them. A system of units is also an
algebra, so I wondering if we can somehow generalize the essence
of both ideas.
BTW, after rereading the links above, I came up with a related
idea:
When you have a large existing codebase it may be too much work
to change all types to be strongly typed like this:
==============================
// before:
struct Car
{
double relativeSpeed(Car other); // measured in km/h
double relativeDistance(Car other); // measured in km
}
// after:
alias KMpH = kilo!Metre / Second(3600);
struct Car
{
KMpH!double relativeSpeed(Car other);
kilo!(Metre!(double)) relativeDistance(Car other);
}
==============================
Sometimes a more gradual approach may be useful:
==============================
// before:
struct Car
{
double relativeSpeed(Car other); // km/h
double relativeDistance(Car other); // km
}
// after:
alias KMpH = kilo!Metre / Second(3600);
struct Car
{
double relativeSpeed(Car other) @Unit!KMpH;
double relativeDistance(Car other) @Unit!(kilo!Metre);
}
==============================
More information about the Digitalmars-d
mailing list