In this unit-land, is length always quantity * unit_of_length? or also may 
it be proportion * reference_distance (1/4 of the current line length)?
Or -- shall we seek an avenue that somehow is both without being either?

On Wednesday, February 17, 2016 at 5:10:15 PM UTC-5, Jake Rosoman wrote:
>
> Oops thanks for being patient. By "this" I meant "dispatch on abstract 
> units/dimensions". The motivation is to be able to write a function which 
> takes a length without caring what the specific unit of that length is. Be 
> it feet or cm etc. This is to make the intent of the function clearer and 
> enable polymorphism. For example:
>
> direction = 0radians
> move(r::Angle) = direction += r
> move(l::Length) = translate(direction, l)
>
> Also speed could be defined as Ratio{d<:size, t<:time}. Which would be 
> hard to do using unitful as is
> On Thu, 18 Feb 2016 at 10:25 AM Jeffrey Sarnoff <[email protected] 
> <javascript:>> wrote:
>
>> 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]> 
>>> 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
>>>>>>>
>>>>>>

Reply via email to