I would say trust but verify

Is there a nice way to verify things like this (e.g. “is there branching in 
this method?”) for people like me who don’t understand the output of 
code_llvm (or anything else remotely assembler-like…)?

…unless, of course, Jeff happens to be sleeping

I thought Jeff didn’t actually sleep, but fixed Julia issues 24/7…

// T

On Tuesday, August 26, 2014 10:54:22 PM UTC+2, Stefan Karpinski wrote:

I would say trust but verify – there's always a chance that inference 
> doesn't for some reason eliminate the branches. If that's the case, please 
> file an issue (it will probably be fixed on master as soon as you hit the 
> "New Issue" button; unless, of course, Jeff happens to be sleeping).
>
>
> On Tue, Aug 26, 2014 at 4:49 PM, Michael Grant <[email protected] 
> <javascript:>> wrote:
>
>> Thanks to both of you (and if others still wish to share experiences, 
>> please, don't hestiate). Your "guiding principle" does indeed simplify my 
>> thought process here. Indeed, the reason I asked in the first place is that 
>> I have some code where conciseness demands the use of if statements; to 
>> parametrize would require an undue amount of duplicated code. It's good to 
>> know I can trust that the unused branches will be eliminated at compile 
>> time.
>>
>> On Tuesday, August 26, 2014 3:41:13 PM UTC-5, Iain Dunning wrote:
>>>
>>> My guiding principle of Julia type stuff is the following: a version of 
>>> a function is compiled for every type combination it is called with. 
>>> Knowing that, all types become "crystallized" and propagate through, 
>>> eliminating ifs and simplifying things.
>>> However, its been my experience with compilers in many langauges that 
>>> there are often limits to how much is decided at compile time, normally due 
>>> to a heuristic tradeoff between compilation time and run time of the 
>>> function.
>>>
>>> For that reason, I try and use dispatch as I think it is cleaner than 
>>> the ifs, even if they go away in the end. But I think people are needlessly 
>>> afraid of using eltype because it seems like it'd be a run time check 
>>> (Python people would definitely assume this).
>>>
>>> Best example I know is:
>>> https://github.com/IainNZ/GraphLayout.jl/blob/master/src/spring.jl#L42
>>>
>>> if adj_matrix[i,j] != zero(eltype(adj_matrix)) || adj_matrix[j,i] != 
>>> zero(eltype(adj_matrix))
>>>
>>> which compiles down to
>>>
>>> if adj_matrix[i,j] != 0.0 || adj_matrix[j,i] != 0.0
>>>
>>> or 
>>>
>>> if adj_matrix[i,j] != false || adj_matrix[j,i] != false
>>>
>>> etc. I don't think people are used to this.
>>>
>>> Anyway, thats my 1c.
>>>
>>> On Tuesday, August 26, 2014 4:32:15 PM UTC-4, Stefan Karpinski wrote:
>>>
>>> It's kind of a toss up. These days, as you've noticed, they tend to 
>>> produce identical results, which is nice. Once upon a time, the type 
>>> parameter versions tended to produce better code, but that's not the case 
>>> mostly anymore. So whichever is easier and clearer, I guess? If you need 
>>> the type parameter for dispatch, then I guess I'd favor using it.
>>>
>>>
>  ​

Reply via email to