>
And all the "just use this thing that does exactly the same thing with a different name because I want indexing/length but also want to insist people don't call them that" is frankly pointless.Array index syntax over variable width data is problematic: either deceptively expensive -- O(n) for what looks like an O(1) operation -- or wrong. I suspect in that we agree.
As for the alternative, I'm talking about Tom Christiansen's argument here: https://bugs.python.org/msg142041
To paraphrase Tom's examples, this usage of array indexes is more idiomatic...
s = "for finding the biggest of all the strings"
x_at = s.index("big")
y_at = s.index("the", x_at)
some = s[x_at:y_at]
print("GOT", some)
... than this, which the Python community would never adopt:
import re
s = "for finding the biggest of all the strings"
some = re.search("(big.*?)the", s).group(1)
print("GOT", some)
The first involves more logical actions indexing into the string. If those operations are both O(1) and correct, then that's not a serious problem, which is what justifies the Python 3.3+ design.
However, in terms of language design for handling Unicode strings, I prefer the tradeoffs of the second idiom: a single O(n) operation which is relatively easy to anticipate and plan for, rather than unpredictable memory blowups.