salto - ¿Por qué Windows usa CR LF?
newline character (6)
@sshannin publicó una URL del blog de Raymond Chen, pero ya no funciona. El blog ha cambiado su software interno, por lo que las URL han cambiado.
Después de rastrear las publicaciones antiguas en el nuevo blog, lo encontré here .
Cita del blog:
¿Por qué es el terminador de línea CR + LF?
Este protocolo se remonta a los días de los teletipos. CR significa "retorno de carro": el carácter de control de CR devolvió el cabezal de impresión ("carro") a la columna 0 sin avanzar el papel. LF significa "avance de línea": el personaje de control LF avanzó una línea en el papel sin mover el cabezal de impresión. Por lo tanto, si desea devolver el cabezal de impresión a la columna cero (lista para imprimir la siguiente línea) y avanzar el papel (para que se imprima en papel nuevo), necesita CR y LF.
Si va a los diversos documentos del protocolo de Internet, como RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP) o RFC 2616 (HTTP), verá que todos especifican CR + LF como el secuencia de terminación de línea. Entonces, la verdadera pregunta no es "¿Por qué CP / M, MS-DOS y Win32 usan CR + LF como terminador de línea?", Sino "¿Por qué otras personas optaron por diferir de estos documentos estándares y usar algún otro terminador de línea? ? "
Unix adoptó LF simple como la secuencia de terminación de línea. Si mira las opciones stty, verá que la opción onlcr especifica si un LF debe cambiarse a CR + LF. Si obtienes esta configuración incorrecta, obtienes texto de paso de escalera, donde
cada
línea
comienza
donde quedó la línea anterior. Entonces, incluso unix, cuando se deja en modo raw, requiere que CR + LF termine las líneas. La CR implícita antes de LF es una invención de Unix, probablemente como una economía, ya que ahorra un byte por línea.
El ancestro Unix del lenguaje C llevó esta convención al estándar de lenguaje C, que requiere solo "/ n" (que codifica LF) para terminar líneas, poniendo la carga en las bibliotecas de tiempo de ejecución para convertir datos de archivo sin formato en líneas lógicas.
El lenguaje C también introdujo el término "nueva línea" para expresar el concepto de "terminador de línea genérico". Me dijeron que el comité ASCII cambió el nombre del personaje 0x0A por "línea nueva" alrededor de 1996, por lo que el nivel de confusión se ha elevado aún más.
Aquí hay otra discusión del tema, desde una perspectiva de Unix
Cambié este segundo enlace a una instantánea en The Wayback Machine, ya que la página real ya no está disponible.
Espero que esto responda tu pregunta.
Entiendo la diferencia entre los dos, así que no hay necesidad de entrar en eso, pero me pregunto cuál es el razonamiento detrás de por qué Windows usa CR y LF para indicar un salto de línea. Parece que el método Linux (solo con LF) tiene mucho más sentido, ahorra espacio y es más fácil de analizar.
De la Wikipedia :
La secuencia CR + LF era de uso común en muchos sistemas informáticos tempranos que habían adoptado máquinas de teletipo, normalmente un ASR33, como dispositivo de consola, porque esta secuencia era necesaria para ubicar esas impresoras al comienzo de una nueva línea.
He visto más de una cuenta en el sentido de que la razón para enviar dos caracteres (y, a veces más) en lugar de uno fue para que coincida mejor la tasa de transferencia de datos con la tasa de impresión física ( esto fue hace mucho tiempo ). Mover el cabezal de impresión tomó más tiempo que imprimir un solo carácter y el envío de caracteres adicionales era una forma de evitar que la transferencia de datos se adelantara al dispositivo de impresión. Por lo tanto, la razón por la que tenemos varios caracteres para el final de línea en Windows es básicamente la misma que la razón por la que tenemos teclados QWERTY: su intención era desacelerar las cosas .
Obviamente, la razón por la cual esta práctica continúa en Windows hasta nuestros días se basa en cierta noción de compatibilidad con versiones anteriores, y en última instancia, simplemente una inercia simple.
Tenga en cuenta sin embargo, esta convención no se aplica estrictamente por Windows en el nivel del sistema operativo . Cualquier aplicación de Windows puede ignorar la convención, dependiendo de con qué otras aplicaciones esté tratando de ser compatible.
Curiosamente, el artículo de Wikipedia sobre "Newline" , afirma que Windows 8 puede introducir un cambio para usar solo LF. El artículo también afirma que Mac OS X introdujo una transición de LF + CR a solo LF.
Históricamente cuando se usa impresoras matriciales teletipos CR devolvería el carro a la primera posición de la línea, mientras que LF se alimentaría a la siguiente línea. El uso de CR + LF en el archivo hizo posible enviar un archivo directamente a la impresora, sin ningún tipo de controlador de impresora.
Gracias @zaph señalando que era teletipo y no impresoras matriciales
Otros han dado la respuesta, pero quería agregar ... ¿Supongo que eres demasiado joven para haber usado una máquina de escribir? ;) El carro es un tambor. Al moverlo horizontalmente a la derecha, vuelve a colocar el cabezal estacionario en el margen izquierdo de la página. Al girar el carro con el dedo y el pulgar, avanza la página por una línea (s).
Viene de las máquinas de teletipo (y máquinas de escribir) de los días de antaño.
Solía ser que cuando terminabas de escribir una línea, tenías que mover el carro de la máquina de escribir (que sostenía el papel y deslizar hacia la izquierda mientras escribías) de regreso al inicio de la línea (CR). Luego tuvo que avanzar el papel por una línea (LF) para pasar a la siguiente línea.
Hay casos en los que es posible que no haya querido alimentar en línea al devolver el transporte, como si fuera a tachar un personaje con un guión (lo sobrescribiría).
Pero, básicamente, todo se reduce a la convención. DOS usó la convención CR / LF completa, y UNIX la acortó un poco. ¡Ahora estamos atascados!