On Thursday, 20 February 2025 at 03:54:28 UTC, Jonathan M Davis wrote:
On Wednesday, February 19, 2025 7:48:48 PM MST Jonathan M Davis via Digitalmars-d-learn wrote:
So you should probably either just make your code operate on ranges of dchar

Thank You for the deep explanation!

This thing checks is a range of characters starts with a small set of keywords and returns the index+1 of the particular keyword. It does not fetches a whole identifier, it lookus up every character in a tree. The tree is generated as compile time template functions: every branch is translated to a switch/case statement, and there comes the hardcore optimization by LDC.

Yesterday, at one point I already decided to transition my code from chat to dchar.

My actual use case is also presents a complicated range of dchar-s.

And I just don't constraint the range type with isInputRange(R, immutable dchar). It generates a nasty error message and if popFront and empty is not supported it will show it anyways.


On the performance side of 8bit vs 32bit:
It has now 4x more data to work with with. (Mostly because "cmp ax, im8" operation was replaced by "cmp eax, im32". So the early I can convert down to 8 bit is the better.) The keywords I looking for at the beginning of the 'string' are only 8bit ascii characters, "#define", "#ifdef", and so on. Because of the dchar it must ensure that the high 24 bits are zero as well. But this thing only runs for 1msec (8bit version .5ms) so it will stay in the dchar form, which - as now I learned - was the preferred usage at this moment.

I have better understanding now, Thx!

Reply via email to