> The ASCII standard has nothing to say about backspace overstriking
It seems impossible to get ANSI copies of old standards (even for money) but the ECMA (1973) printing says:
3.2 Diacritical Signs
(Positions: 2/2, 2/7, 2/12, 5/14, 6/0, 7/14)
In the 7-bit character set, some printing symbols may be
designed to permit their use for the composition of acce‐
nted letters when necessary for general interchange of
information. A sequence of three characters, comprising
a letter, BACKSPACE and one of these symbols, is needed
for this composition; the symbol is then regarded as a diacrit‐
ical sign. It should be noted that these symbols take
on their diacritical significance only when they precede or
follow the character BACKSPACE; for example, the symbol
corresponding to the code combination 2/7 normally has the
significance of APOSTROPHE, but becomes the diacritical
sign ACUTE ACCENT when preceded or followed by the character
BACKSPACE.
This is precisely the reason ASCII 1967 replaced ← with _ and ↑ with ^ (explicitly still “circumflex accent” in Unicode) and added ` (“grave accent”, likewise).
ANSI made this optional in the 1986 revision, in §2.1.2 — “The use of BS for forming composite characters is not required.” — with a note that it would likely be removed from a future revision (but there never was another one).
> In a more common example, ASCII has nothing to say about how you move the cursor to the start of a new line.
It does; it just says something slightly unfortunate about code 0x0A.
CR Carriage Return
A format effector which moves the active position
to the first character position *on the same line*.
LF Line Feed
A format effector which advances the active position
to the *same character position* of the next line.
[Italics added] But then it says:
The Format Effectors are intended for equipment in
which horizontal and vertical movements are effected
separately. If equipment requires the action of
CARRIAGE RETURN to be comhined with a vertical movement,
the Format Effector for that vertical movement
may be used to effect the combined movement. For example,
if NEW LINE (symbol NL, equivalent to CR + LF)
is required, FE2 shall be used to represent it. This
substitution requires agreement between the sender and
the recipient of the data.
The use of these combined functions may be restricted
for international transmission on general switched telecommunication
networks (telegraph and telephone networks).
So CR LF will unambiguously get you the first position on the next line. The code for LF is allowed to be replaced by NL by “agreement”, but CR can't move to the next line.
That's fair, and thanks for digging up those actual standards - they are indeed not easy to find these days. I think though that tends to be the standard speaking to the intended usage of the ASCII codes, more than it does to an attempt to standardize behavior of all input and output devices. It's more a suggestion that some equipment might choose to use backspace for diacritics, and some might separately effect X and Y movement, but others might not. Certainly in practice terminals have always exposed their different capabilities by giving special terminal code meanings to ASCII sequences, and, when terminal capability negotiation was not an option (e.g. in specifying a file format or defining how to separate SMTP headers) ASCII users have made their own standards for these things (I guess this is the sort of 'agreement' the standard alludes to).
Yes, the ‘dual use’ characters were define at the request of European delegations and the language makes it clear that it was expected that English-language terminals would continue to have " look like " and not ¨ and so on. ASCII was defined before video terminals were developed, so no one thought overstriking was remarkable. As it turned out, non-English European language versions ended up not generally using overstrikes anyway, but redefined the ‘national use’ characters #$@[\]{|} instead, which unfortunately did lead to ambiguity.
ANSI made this optional in the 1986 revision, in §2.1.2 — “The use of BS for forming composite characters is not required.” — with a note that it would likely be removed from a future revision (but there never was another one).
It does; it just says something slightly unfortunate about code 0x0A. [Italics added] But then it says: So CR LF will unambiguously get you the first position on the next line. The code for LF is allowed to be replaced by NL by “agreement”, but CR can't move to the next line.