@sshannin ha pubblicato un URL dal blog di Raymond Chen, ma non funziona più. Il blog ha cambiato il suo software interno, quindi gli URL sono cambiati.
Dopo aver strisciato tra i vecchi post nel nuovo blog, l'ho trovato qui .
Citazione dal blog:
Perché il terminatore di riga è CR + LF?
Questo protocollo risale ai tempi delle telescriventi. CR sta per "ritorno a capo" - il carattere di controllo CR ha riportato la testina di stampa ("carrello") alla colonna 0 senza far avanzare la carta. LF sta per "linefeed" - il carattere di controllo LF fa avanzare la carta di una riga senza spostare la testina di stampa. Quindi, se si desidera riportare la testina di stampa alla colonna zero (pronta per stampare la riga successiva) e far avanzare la carta (in modo che stampi su carta nuova), sono necessari sia CR che LF.
Se vai ai vari documenti del protocollo Internet, come RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP) o RFC 2616 (HTTP), vedrai che tutti specificano CR + LF come sequenza di terminazione di linea. Quindi la vera domanda non è "Perché CP / M, MS-DOS e Win32 usano CR + LF come terminatore di riga?" ma piuttosto "Perché altre persone hanno scelto di differire da questi documenti standard e hanno utilizzato un altro terminatore di riga?"
Unix ha adottato LF semplice come sequenza di terminazione della riga. Se guardi le opzioni di stty, vedrai che l'opzione onlcr specifica se un LF deve essere cambiato in CR + LF. Se sbagli questa impostazione, ottieni il testo a gradini, dove
each
line
begins
dove si era interrotta la riga precedente. Quindi anche unix, se lasciato in modalità raw, richiede CR + LF per terminare le linee. Il CR implicito prima di LF è un'invenzione unix, probabilmente come economia, poiché salva un byte per riga.
L'ascendenza unix del linguaggio C ha portato questa convenzione nello standard del linguaggio C, che richiede solo "\ n" (che codifica LF) per terminare le righe, facendo gravare sulle librerie di runtime l'onere di convertire i dati dei file grezzi in righe logiche.
Il linguaggio C ha anche introdotto il termine "newline" per esprimere il concetto di "terminatore di riga generico". Mi è stato detto che il comitato ASCII ha cambiato il nome del carattere 0x0A in "newline" intorno al 1996, quindi il livello di confusione è stato aumentato ancora di più.
Ecco un'altra discussione sull'argomento, da una prospettiva unix
Ho modificato questo secondo collegamento in un'istantanea in The Wayback Machine, poiché la pagina effettiva non è più disponibile.
Spero che questo risponda alla tua domanda.