food for thought - swift 5 released - bottom types, string interpolation, and stuff.

Patrick Schluter Patrick.Schluter at bbox.fr
Fri Apr 12 10:52:00 UTC 2019


On Friday, 12 April 2019 at 06:52:39 UTC, aliak wrote:
> On Friday, 12 April 2019 at 02:13:12 UTC, Walter Bright wrote:
>> On 4/11/2019 6:24 PM, Timon Gehr wrote:
>>>>    bool isOdd(int i) { return i & 1; }
>>>>
>>>> Filling the standard library with trivia is not a good idea.
>>> 
>>> Yes, if it is used often enough across many projects, adding 
>>> functions with a simple implementation can be a very good 
>>> idea. The main point is to standardize the function name and 
>>> avoid duplicated equivalent code in everyone's personal util 
>>> libraries.
>>
>> That would make sense if there was some application-specific 
>> higher level meaning to oddness, such as maybe the low bit 
>> being used as a flag. But there isn't when it is named "isOdd".
>>
>
> I've used n % 2 == 0 millions of times in GUI logic. Applying 
> properties to things that are row'ed-out. Games is another one 
> - very common. Fuzzy matching another one. isOdd would've made 
> the call site a lot more clear.
>
>>
>>>> Not knowing about a common operator is not a reason to add 
>>>> library functions.
>>> No, but there can be other reasons.
>>
>> That was the reason given. I'm open to hearing a better one.
>
> Using n & 1 has always been a hack for oddness. It says nothing 
> about what your code is doing. The average programmer would 
> look at it and have to think about what's happening there.
>
> I do understand what you mean about being a bit suspicious 
> about isOdd though when seeing it in code. But I think the same 
> would apply to abs if we had not grown up with it being in 
> math.h. We'd be doing "n>0?n:-n" or "(n+(n>>31))^(n>>31)" - or 
> the more saner would write their own. And then when someone 
> comes and tries to add abs to a standard library functions one 
> could also say "not knowing about [a] common operator[s] is not 
> a reason to add a library functions".

funny you mention abs(). My current job was enabled because the 
project leader was impressed with my optimisation skill. The 
first change I made in the code base (in the Levenshtein routine) 
was to replace the call to abs() by a macro doing nothing more 
fancy than "n>0?n:-n". The gain in performance was so massive, it 
completely floored me at that time. People underestimate the cost 
of a call, especially into a dynamic library (it is an indirect 
jump via the GOT), if it is in the hot loop it can be a massive 
cycle waster.


>
> But after all this time working on products as low level as 
> drivers to as high level as web apps, the three things that 
> have been the most important have been readability, 
> maintainability, and correctness.




More information about the Digitalmars-d mailing list