I don’t doubt that all of those things in the article were true back then, but that was eight years ago. Wow.
With that said, convincing a compiler to elide bounds checks (especially Java's JIT compiler) is a hugely frustrating (and for some algorithms futile) task.
It could be an argument that bounds checks make up a small percentage of total application performance. However, I've profiled production Java servers where >50% of the CPU was encryption/compression. JDK implementations of those algorithms are heavily impacted by (and commonly fail to elide) bounds checks.
Performance matters!
Adding explicit checks does work to a certain degree but it can change with the compiler, and it requires to keep checking the generated assembly - not fun (no unsafe, either but still)
Especially in Java, because "the assembly" can change as the JIT evolves. What is optimized today may not be tomorrow.
>What is optimized today may not be tomorrow.
Exactly. (Also most developers will have exceptionally hard time maintaining such code)
[0]: https://web.archive.org/web/20120328222841/http://cliffc.org...
I should play around this with this using a couple RISC-V cores.
> Performance matters!
https://www.youtube.com/watch?v=r-TLSBdHe1A by Emery Berger
Another, yesbut, encryption and compression are and will handled by on die accelerators.
If you write a micro-benchmark for only bounds-checks, you'd see the larger difference more inline with the "125%"
(with bounds checks) "Telling the Rust allocator to avoid zeroing the memory when allocating for Brotli improves the speed to 224 MB/s."
(without bounds checks) "Activating unsafe mode results in another gain, bringing the total speed up to 249MB/s, bringing Brotli to within 82% of the C code."
224MB/s -> 249MB/s (11% Brotli compression perf difference just by eliminating bounds checks)