On Thu, Jun 11, 2020 at 04:13:34PM +0000, duck_tape via Digitalmars-d-learn wrote: [...] > Currently my D version is a few seconds slower than the Crystal > version. putting it very solid in third place overall. I'm not really > sure where it's falling behind crystal since `-release` removes bounds > checking. I have not looked at the assembly between the two, but I > suspect that Crystal inlines the callback and D does not.
To encourage inlining, you could make it an alias parameter instead of a delegate, something like this: void overlap(alias cb)(SType start, SType stop) { ... } ... bed[chr].overlap!callback(st0, en0); This doesn't guarantee inlining, though. And no guarantee it will actually improve performance. > I also think there is room for improvement in the IO, as I'm just > using the defaults. I wouldn't spend too much time optimizing I/O without profiling it first, to check that it's actually a bottleneck. If I/O turns out to be a real bottleneck, you could try using std.mmfile.MmFile to mmap the input directly into the program's address space, which should give you a speed boost. T -- An imaginary friend squared is a real enemy.