If you are a
geek like me, you are sure to have spent endless hours
communing with the sacred
ASCII table of characters.
ASCII has been extended in various ways, but the standard ASCII character set carries values from 0 through 127.
Most people spend their time among the
printable ASCII characters: ASCII 32, the space, to ASCII 126, the tilde ("~"). If you get more sophisticated you may use some of the
control characters: ASCII 01 to ASCII 31.
But most people ignore the character at the end of the list: ASCII 127, also known as the DEL (or RUBOUT) character. They rarely wonder where this little artifact came from.
I was told the answer by a CS professor in college.
ASCII was invented back in the days of
paper tape: These were endless rolls of tape with rows of places to punch holes. The tape was read into a machine that interpreted the presence of a hole as a 1 and the absence of a hole as a 0. The holes were added up as a
binary number, which was interpreted as a character.
Now, if you were a programmer in those days, you would code your
FORTRAN,
COBOL, or
PL/1 program, or do data entry, by punching holes in paper tape. You punch holes all day, and of course you would be halfway into your program when you would suddenly discover that you'd punched a wrong character. Once you've punched a hole in a piece of paper tape, there's no un-punching.
Did you start all over?
Heavens no. The ASCII 127 existed for just such a situation.
Each row on a piece of paper tape had seven possible places to punch a hole. Notice that 127, in binary, is seven "1"'s. If you discovered an error, you would punch out every hole in the row
1. This would instruct the tape reader to "skip" that row. Once the tape reader encountered a row that wasn't all holes, it would interpret it as a character and send it to the computer.
Now that you know the secrets of the Universe, I must go on a bit of a rant: I have noticed that some programs were coded by people that think an ASCII 127, because they see "DEL" in the table, interpret it as another kind of backspace.
It is not. ASCII 127 means "skip me".
1Let's hope you discovered your error soon after making it, because otherwise, you'd be punching out a lot of 127's.