Coder Social home page Coder Social logo

Add Dimension type to Unit trait about uom HOT 4 OPEN

ttencate avatar ttencate commented on July 17, 2024
Add Dimension type to Unit trait

from uom.

Comments (4)

iliekturtles avatar iliekturtles commented on July 17, 2024

This would possibly be handled by #91, but I'm going to leave open as a separate request for the time being.

from uom.

iliekturtles avatar iliekturtles commented on July 17, 2024

Back in 2019 I had big plans to solidify the current uom into a 1.0 release. Based on current limitations (#91) I had also started working through a new API that would eventually become 2.0. You can see my efforts in the dev-macros branch (I was also looking at moving to procedural macros). One of things the new API does do is make Dimension and associated type of Unit.

uom/src/lib.rs

Lines 272 to 275 in 020e421

pub trait Unit {
type D: Dimension + ?Sized;
type K: ?Sized;
}

Besides being really busy, part of the reason I haven't made progress is that the limitation of what is in that branch is that the output type needs to be specified for any multiply or divide operations. I'm also not sure if procedural macros is the appropriate way forward or if some kind of pre-compile codegen is more appropriate.

from uom.

ttencate avatar ttencate commented on July 17, 2024

Not sure I understand. I tried writing my own similar library that carried a unit along with each value, but ran into a similar limitation. There is no way to know at compile time that kilometer divided by hour makes the unit type kilometer_per_hour. But the way uom works, multiply/divide just works on base units, right? At least D is just computed from the inputs; I don't know what K is in the above snippet.

from uom.

iliekturtles avatar iliekturtles commented on July 17, 2024

Yes, uom normalizes values down to the 7 base units (defaults can be overridden by ISQ!). K distinguishes the quantity's kind. A notable example is thermodynamic temperature/temperature interval (ratio/angle is another example). Both quantities have the same dimension but different kinds and you don't want to mistakenly add the two together.

uom/src/si/mod.rs

Lines 22 to 44 in 7c4b27b

quantities: ISQ {
/// Length, one of the base quantities in the ISQ, denoted by the symbol L. The base unit
/// for length is meter in the SI.
length: meter, L;
/// Mass, one of the base quantities in the ISQ, denoted by the symbol M. The base unit
/// for mass is kilogram in the SI.
mass: kilogram, M;
/// Time, one of the base quantities in the ISQ, denoted by the symbol T. The base unit
/// for time is second in the SI.
time: second, T;
/// Electric current, one of the base quantities in the ISQ, denoted by the symbol I. The
/// base unit for electric current is ampere in the SI.
electric_current: ampere, I;
/// Thermodynamic temperature, one of the base quantities in the ISQ, denoted by the symbol
/// Th (Θ). The base unit for thermodynamic temperature is kelvin in the SI.
thermodynamic_temperature: kelvin, Th;
/// Amount of substance, one of the base quantities in the ISQ, denoted by the symbol N.
/// The base unit for amount of substance is mole in the SI.
amount_of_substance: mole, N;
/// Luminous intensity, one of the base quantities in the ISQ, denoted by the symbol J. The
/// base unit for luminous intensity is candela in the SI.
luminous_intensity: candela, J;
}

from uom.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.