Yep, exactly. My point is all that is about pointer arithmetic, even though most higher-level languages don't provide you with pointer arithmetic (and their arrays may have nonzero memory offsets anyway).

Pascal, Julia, R, Lua use more natural 1-based, where you call the first element first.

But the first element is first whatever index you choose. Why 1, rather than, say, 99, or -3?

(You should ideally be able to choose any of these options, and others - e.g., 5, 7, -200, 14,771,589,734,598,742,923,574,835, etc. - because they all make exactly as much logical sense as 1 does and any of them is as elegant a choice as 1 is. But if you get no choice, it absolutely has to be 0, because it's the only non-arbitrary option. No other number guarantees to do nothing to the value you add it to!)