On Saturday, 20 June 2020 at 21:11:57 UTC, tastyminerals wrote:
I am not sure that this is a question about D or a more general
one. I have watched this nice presentation "Speed Is Found In
The Minds of People" by Andrei:
https://www.youtube.com/watch?v=FJJTYQYB1JQ&feature=youtu.be?t=2596 and on 43:20 he says that "push_heap" is slow because of structured loops and finite for (throughout the presentation Andrei shows algorithm examples with infinite loops). I wonder why is that? Is it because the finite loop needs to keep track of the number of iterations it performs? Wouldn't the compiler optimize it better than the infinite one because it knows the number of iterations the for loop needs?
I think the Answer depended from the Task.
I think Alexandrescu is joking. :)
"Always* Use Infinite Loops. (*Except in most cases)" :)
For code:
di = "String";
needle = "A";
ascan = di.ptr;
for( int cx = di.length; cx != 0; cx--, scan++ )
{
if ( *scan == neelde )
goto found;
}
return;
found:
// Found!
in best case generated instructions will be like this:
CLD ;Scan string in forward
direction
MOV AL,'A' ;Scan for 'A'
LEA DI, STRING ;Address to start scanning at
MOV CX,100 ;Scanning 100 bytes
REPNE SCASB ; ...and scan it
JE found ;
JMP exit ;
found:
DEC DI ;Back up DI to point to the
'A'
...var CX translated to register CX.
...pointer translated to register DI.
...needle translated to register AX.
All in registers!
What asm-code generaged for C-code showed by Alexandrescu ?