The Mischievous Case-Insensitive Hash

In a comment to the previous article on a case insensitive hash code, Stefan Glienke pointed to an approach used in Spring4D’s comparers, which is a delightful hack.

Rather than converting the string to a “proper lower case”, it converts the string to an “approximate lower case” using an “or $20”, which happens to be good enough for a hash on string identifiers.

To figure the trick, one needs to check the ASCII Table. (more…)

The Curiouser and Curiouser Case of Case-Insensitive Tweaks

Recent commits to the DWScript repository doubled the compiler performance when compiling many small scripts, like happens in the unit tests suites.

This started from a first profiling run where the memory allocations around the UnicodeLowerCase function came out as top bottlenecks.

Thing is, Pascal being a case-insensitive language, there are lots of case-insensitive comparisons, lookups, searches and hashes, and turns out a key hash code was computed with code like

(more…)

DWScript update for Delphi 12

DWScript has been updated for Delphi 12 support, there are only minor changes required and they are in the DWScript repository.

On a side note, the Delphi 12 IDE definitely feels more snappy when navigating code or invoking code insight (ctrl+space) on large projects (more than 2 MLOC), which is nice!

SamplingProfiler 23.8.21

SamplingProfiler 23.8.21 is now available. This version is all about cosmetic fixes:

  • Display Delphi internal version number for unknown Delphi versions instead of defaulting to ‘XE2’
  • Replaced old directory browser in search paths dialog
  • Minor HDPI fixes

Also the zip only includes the 64bit version now (which should work with 32bit executables).