Null references redux
Don
nospam at nospam.com
Thu Oct 1 01:00:25 PDT 2009
Jeremie Pelletier wrote:
> Don wrote:
>> Jeremie Pelletier wrote:
>>> Yigal Chripun wrote:
>>>> On 29/09/2009 16:41, Jeremie Pelletier wrote:
>>>>
>>>>> What I argued about was your view on today's software being too big
>>>>> and
>>>>> complex to bother optimize it.
>>>>>
>>>>
>>>> that is not what I said.
>>>> I was saying that hand optimized code needs to be kept at minimum
>>>> and only for visible bottlenecks, because the risk of introducing
>>>> low-level unsafe code is bigger in more complex and bigger software.
>>>
>>> What's wrong with taking a risk? If you know what you're doing where
>>> is the risk, and if now how will you learn? If you write your
>>> software correctly, you could add countless assembly optimizations
>>> and never compromise the security of the entire thing, because these
>>> optimizations are isolated, so if it crashes there you have only a
>>> narrow area to debug within.
>>>
>>> There are some parts where hand optimizing is almost useless, like
>>> network I/O since latency is already so high having a faster code
>>> won't make a difference.
>>>
>>> And sometimes the optimization doesn't even need assembly, it just
>>> requires using a different high level construct or a different
>>> algorithm. The first optimization is to get the most efficient data
>>> structures with the most efficient algorithms for a given task, and
>>> THEN if you can't optimize it more you dig into assembly.
>>>
>>> People seem to think assembly is something magical and incredibly
>>> hard, it's not.
>>>
>>> Jeremie
>>
>> Also, if you're using asm on something other than a small, simple
>> loop, you're probably doing something badly wrong. Therefore, it
>> should always be localised, and easy to test thoroughly. I don't think
>> local extreme optimisation is a big risk.
>
> That's also how I do it once I find the ideal algorithm, I've never had
> any problems or seen any risk with this technique, I did see some good
> performance gains however.
>
>> Greater risks come from using more complicated algorithms. Brute-force
>> algorithms are always the easiest ones to get right <g>.
>
> I'm not sure I agree with that. Those algorithms are pretty isolated and
> really easy to write unittests for so I don't see where the risk is when
> writing more complex algorithms, it's obviously harder, but not riskier.
By "riskier" I mean "more chance of containing an error".
I'm partly basing this on my recent experience with writing BigInt. The
low-level asm routines are easy to get right, and it's easy to tell when
you've go them wrong. They do brute-force stuff, like schoolbook O(n^2)
multiplication, and importantly, _there are no special cases_ because it
needs to be fast.
But the higher-level O(n^1.3) multiplication algorithms are full of
special cases, and that's where the bugs are.
More information about the Digitalmars-d
mailing list