Jake, It would be helpful to know more clearly what is the "this" that you are experimenting with "ways to achieve this"? I took a glance at your code, and one thing that is happening is you have left some low-hanging abstraction on the table. That constrains Julia's ability to simplify through organized multidispatch. I will give it more than a glance overnight -- pretend it all works perfectly, show me what you want to do with it then.
On Wednesday, February 17, 2016 at 3:59:15 PM UTC-5, Jake Rosoman wrote: > > Oh yup I thought that was the case but wanted to check. > > I've started experimenting with ways to achieve this but I am getting > massive amounts of code generated compared to Unitful. I just uploaded > uploaded my work so far at https://GitHub.com/jkroso/units.jl. If anyone > could help explain the difference in code gen that would be great and I'll > try contribute back to Unitful > On Thu, 18 Feb 2016 at 7:02 AM Andrew Keller <[email protected] > <javascript:>> wrote: > >> Hi Jake, >> >> I agree with Jeffrey's response mostly, but want to clarify that Unitful >> is not strictly focused on the SI system. You'll see that you can use units >> of acre-feet, very much not an SI unit, which could be useful if you happen >> to manage a water reservoir in the United States, I guess. >> >> If you were instead asking whether or not you could write methods that >> dispatch on the dimensions of a unit, the current answer is no, although >> maybe that could change eventually. >> >> Best, >> Andrew >> >> On Wednesday, February 17, 2016 at 3:25:37 AM UTC-8, Jeffrey Sarnoff >> wrote: >>> >>> Jake, >>> >>> Julia's type system is well suited to do just that. Unitful is focused >>> on units in SI system, things like Meters, Kilograms and Joules. >>> >>> One approach to abstract units like size, where size may be relative to >>> the number of pixels on a screen or the width of a page, >>> is define your own type, a kind of size relative to something. In your >>> example, s is not a unit of measure (strictly speaking); >>> s is a quantity interpreted in terms of some absolute or relative unit >>> of measure -- 5 pixels, 1/4 page. Because pixels and pages >>> are not always the same number of, say, millimeters, using SI units for >>> that abstraction likely is not what you want. >>> >>> If you want more guidance, please give some more context. >>> >>> On Wednesday, February 17, 2016 at 4:43:13 AM UTC-5, Jake Rosoman wrote: >>>> >>>> Is it possible to talk about abstract types of units like size. e.g >>>> `drawline(s::Size) = ...`? >>>> >>>> On Saturday, February 13, 2016 at 9:23:22 AM UTC+13, Andrew Keller >>>> wrote: >>>>> >>>>> I'm happy to share a package I wrote for using physical units in >>>>> Julia, Unitful.jl <https://www.github.com/ajkeller34/Unitful.jl>. >>>>> Much credit and gratitude is due to Keno Fischer for the SIUnits.jl >>>>> <https://www.github.com/keno/SIUnits.jl> package which served as my >>>>> inspiration. This is a work in progress, but I think perhaps a >>>>> serviceable >>>>> one depending on what you're doing. >>>>> >>>>> Like SIUnits.jl, this package encodes units in the type signature to >>>>> avoid run-time performance penalties. From there, the implementations >>>>> diverge. The package is targeted to Julia 0.5 / master, as there are some >>>>> limitations with how promote_op is used in Julia 0.4 (#13803) >>>>> <https://github.com/JuliaLang/julia/pull/13803>. I decided it wasn't >>>>> worth targeting 0.4 if the behavior would be inconsistent. >>>>> >>>>> Some highlights include: >>>>> >>>>> - Non-SI units are treated on the same footing as SI units, with >>>>> only a few exceptions (unit conversion method). Use whatever weird >>>>> units you want. >>>>> - Support for units like micron / (meter Kelvin), where some of >>>>> the units could cancel out but you don't necessarily want them to. >>>>> - Support for LinSpace and other Range types. Probably there are >>>>> still some glitches to be found, though. >>>>> - Support for rational exponents of units. >>>>> - Some tests (see these for usage examples). >>>>> >>>>> Please see the documentation for a comprehensive discussion, including >>>>> issues / to do list, as well as how to add your own units, etc. >>>>> Comments and feedback are welcome. >>>>> >>>>> Best, >>>>> Andrew Keller >>>>> >>>>
