4 ms·
> Your understanding of how bounds checking works in modern languages and compilers is not up to date. One I am familiar with is Swift - which does exactly thi
by monkeyelite 1y ago
> Your understanding of how bounds checking works in modern languages and compilers is not up to date.
One I am familiar with is Swift - which does exactly this because it’s a library feature of Array.
Which languages will always be able to determine through function calls, indirect addressing, etc whether it needs to bounds check or not?
And how will I know if it succeeded or whether something silently failed?
> if you have an image processing algorithm that is literally reading every single pixel one-by-one to perform a 2-instruction operation and calculating bounds check on every access in the year 2025, you're doing a lot of things very wrong
I agree. And note this is an example of a scenario you can encounter in other forms.
> Do you have any examples at all? Or is this just speculation?
Yes. Java and python are not competitive for graphics and audio processing.
- MonkeyClub 1y ago> Java and python Java and Python are not on the same body of water, let alone the same boat. You can see some comparisons here: https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/python.html https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
- monkeyelite 1y agoYes. And why is that?
- Aurornis 1y agoInterpreted languages and garbage collection. Bounds checking barely registers as a factor.
- monkeyelite 1y agoYou can write Java that uses arrays that are allocated once - will it have loops as fast as C? Why not? And furthermore I don’t suspect you’re proposing we should be using C + bounds checking (that’s already a Gcc flag?). But rather bounds checking is one of many safety features. The whole pitch of Java is exactly what OP said - let’s just pay 10-30% cost to get these nice portability and memory benefits over C++, and it didn’t work that way especially as memory speeds have diverged from CPU.
- Aurornis 1y ago> Yes. Java and python are not competitive for graphics and audio processing. Because Python is an interpreted language and Java has garbage collection, not because they have bounds checking. Using a language like Rust the bounds checking overhead compared to C code is usually minimal, like 0-5%. The compiler can even optimize away many bounds checks (safely) if you structure your code properly, such as with iterators. Here's an example article : https://shnatsel.medium.com/how-to-avoid-bounds-checks-in-rust-without-unsafe-f65e618b4c1e https://shnatsel.medium.com/how-to-avoid-bounds-checks-in-ru... Make sure you read the note about how the author was mistaken about the 15% speedup from bounds checking. The actual bounds check change was much less, like a couple percent. You can even structure your code so that the bounds check disappears altogether when the compiler can confirm safety at compile time.