WindowsがCRLFを使用するのはなぜですか?


87

私は2つの違いを理解しているので、それに入る必要はありませんが、Windowsが改行を示すためにCRとLFの両方を使用する理由の背後にある理由が何であるか疑問に思っています。Linuxの方法(LFを使用するだけ)は、はるかに理にかなっており、スペースを節約し、解析が簡単なようです。




ここでの改行の歴史に関するウィキペディア:en.wikipedia.org/wiki/Newline#History
Szocske

Windows上のCRLFは、ほとんどが単なる慣例/デフォルトであることに注意してください。ほとんどのプログラムはどちらかをサポートしています(ただし、設定をいじる必要があるかもしれません)。私は個人的にほとんどCRLFを使用せず、代わりにUNIXスタイルのLFを選択します。LFを使用するだけのファイルで問題が発生しているプログラムはほんの一握りです。
ケビン

CR + LFはそれを行う正しい方法です(これは標準です)。したがって、問題は、Windowsが正しく行う理由ではなく、MacおよびUnix / Linuxが正しく行わない理由です。スタンドアロンLFの遺産は、怠惰と近道です。私は常にCR + LFですが、CR + LFで動作する特定のLinuxのものを除いて、そのためにLFモードに変更します。IMO、CR + LFの誤解は、スタンドアロンLFの誤解よりもはるかに悪いです。
相互

回答:


97

歴史的に使用するとき ドットマトリックスプリンター テレタイプCRはキャリッジをラインの最初の位置に戻し、LFは次のラインにフィードします。ファイル自体にCR + LFを使用すると、プリンタードライバーを一切使用せずに、ファイルを直接プリンターに送信できます。

ドットマトリックスプリンターではなくテレタイプであると指摘してくれた@zaphに感謝します


47
ごくわずかな利益のための非常に一般的な迷惑。
デヴィッド・Horvathの

7
@Anders実際、その理由はテレタイプでした。CRはプリントヘッドを左に戻し、LFは用紙を進めました。テレタイプはドットマトリックスプリンターに先行していました。
zaph 2018

5
@zaphこれが私がStackOverflowが大好きな理由です。2年後、私は訂正を受けて、何か新しいことを学びました。
アンダースアベル

WindowsがUnixに何年も続いていたので、彼らがLFだけのUnixモデルに従わなかったのは不可解です。
belanger

32

@sshanninはRaymondChenのブログからURLを投稿しましたが、機能しなくなりました。ブログの内部ソフトウェアが変更されたため、URLが変更されました。

新しいブログの古い投稿をクロールした後、ここで見つけまし

ブログからの引用:

ラインターミネータがCR + LFなのはなぜですか?

このプロトコルは、テレタイプライターの時代にまでさかのぼります。CRは「キャリッジリターン」の略です。CR制御文字は、用紙を進めずにプリントヘッド(「キャリッジ」)を列0に戻しました。LFは「改行」の略です。LF制御文字は、プリントヘッドを動かさずに用紙を1行進めました。したがって、プリントヘッドを列0に戻し(次の行を印刷する準備ができている)、用紙を進める(新しい用紙に印刷する)場合は、CRとLFの両方が必要です。

RFC 0821(SMTP)、RFC 1939(POP)、RFC 2060(IMAP)、RFC 2616(HTTP)などのさまざまなインターネットプロトコルドキュメントにアクセスすると、すべてCR + LFがCR + LFとして指定されていることがわかります。回線終了シーケンス。したがって、本当の問題は「CP / M、MS-DOS、およびWin32がラインターミネータとしてCR + LFを使用するのはなぜですか?」ではありません。むしろ「なぜ他の人々はこれらの標準文書とは異なり、他のラインターミネータを使用することを選択したのですか?」

Unixは、回線終了シーケンスとしてプレーンLFを採用しました。sttyオプションを見ると、onlcrオプションでLFをCR + LFに変更するかどうかが指定されていることがわかります。この設定を間違えると、階段状のテキストが表示されます。

each
    line
        begins 

前の行が中断したところ。したがって、UNIXでさえ、rawモードのままにすると、行を終了するためにCR + LFが必要になります。LFの前の暗黙のCRは、1行あたり1バイトを節約するため、おそらく経済的なものとして、UNIXの発明です。

C言語のUNIXの祖先は、この規則をC言語標準に取り入れました。これは、行を終了するために「\ n」(LFをエンコードする)のみを必要とし、生のファイルデータを論理行に変換するランタイムライブラリに負担をかけます。

C言語では、「汎用ラインターミネータ」の概念を表すために「改行」という用語も導入されました。1996年頃にASCII委員会が文字0x0Aの名前を「改行」に変更したとのことで、混乱のレベルはさらに高くなっています。

これは、UNIXの観点からの主題の別の議論です

実際のページが利用できなくなったため、この2番目のリンクをThe WaybackMachineのスナップショットに変更しました。

これがあなたの質問に答えることを願っています。


あなたは実際には質問に答えていないので、コメントで、古くなったリンクを修正するだけで、これは本当にコメントであるはずです。とにかく、正しいリンクをありがとう。コメントとして追加してください。この回答は削除される場合があります。
トムブランバーグ2016年

1
OK、ここにブログのテキストを追加したので、リンクが再び悪くなった場合でも、テキストはここで利用できます。この情報は実際に最初に尋ねられた質問に答えるので、これは単なるコメントではなく、答えとして保持されるべきだと思います。
OMA 2016年

9
マイクロソフトが定期的にリンクを廃止する方法を本当に嫌いです。
マークランサム2017年

2
この回答は、例外的な回答よりも詳細であり、質問された質問だけでなく、質問の推測された理由にも回答します。私見の方が良いです。
AlexeiMartianov19年

18

それは昔からのテレタイプマシン(そしてタイプライター)から来ています。

以前は、行の入力が終了したら、タイプライターのキャリッジ(紙を保持し、入力時に左にスライドした)を行の先頭(CR)に戻す必要がありました。次に、次の行に移動するために、用紙を1行(LF)下に進める必要がありました。

ダッシュで文字を取り消し線で消す場合など、キャリッジを返すときに改行したくない場合があります(単に上書きするだけです)。

しかし、基本的に、それは慣例に要約されます。DOSは完全なCR / LF規則を使用し、UNIXはそれを少し短縮しました。今、私たちは立ち往生しています!


2

他の人が答えを出しましたが、私は付け加えたいと思いました...あなたはタイプライターを使うには若すぎると思いますか?;)キャリッジはドラムです。水平方向に右に動かすと、固定タイプのヘッドがページの左マージンに戻ります。指と親指を使用してキャリッジを回転させると、ページが1行進みます。


2
タイプライター?私は一度美術館でそれらの1つを見たと思います:)
カイル

@Kyle私は笑っていた、これは私の一日を:)明るく
likejudo

1

ウィキペディアから:

シーケンスCR + LFは、テレタイプマシン(通常はASR33)をコンソールデバイスとして採用した多くの初期のコンピューターシステムで一般的に使用されていました。これは、これらのプリンターを新しい行の先頭に配置するために必要だったためです。


1

データ転送速度を物理的な印刷速度に合わせるために、1文字ではなく2文字(場合によってはそれ以上)を送信する理由について、複数の説明を見てきました(これはかなり前のことです)。プリントヘッドの移動は、1文字を印刷するよりも時間がかかり、余分な文字を送信することで、データ転送が印刷デバイスより先に進むのを防ぐことができました。したがって、Windowsで行末に複数の文字がある理由は、基本的にQWERTYキーボードがある理由と同じです。これは、処理速度を低下させることを目的としています。

明らかに、この慣性がWindowsで今日まで続いている理由は、継続的な下位互換性の概念に基づいており、最終的には単純な慣性に基づいています。

ただし、この規則は、オペレーティングシステムレベルでWindowsによって厳密に適用されているわけではありません。互換性を持たせようとしている他のアプリケーションに応じて、どのWindowsアプリケーションもこの規則を無視してかまいません。

興味深いことに、「ニューライン」に関するウィキペディアの記事では、Windows8ではLFのみの使用に変更が加えられる可能性があると主張しています。この記事には、Mac OSXがLF + CRからLFのみへの移行を導入したことも記載されています。


4
「物事を遅くすることを意図した」-引用が必要です。
エリオットゴロホフスキー

4
実際には、最初の段落全体-引用が必要です。
エリオットゴロホフスキー

2
これは、同じWikipediaのコンテンツを参照している密接に関連したJeff Atwoodの記事です:The Great NewlineSchism。そこにも多くのインテリジェントなユーザーコメントがあります-これはオペレーティングシステムレベルの懸念ではなく、Windowsアプリの大部分はLFのみのテキストファイルで問題なく動作するという私の主張のいくつかの実証を含みます。「Windows10はCR / LFを使用して、1963年モデル33テレタイプマシンとの互換性を維持しています」という楽しいコメントもあります。
ブレントブラッドバーン2015年

1
@RenéG引用は必要ありません。私はそこにいて、自分でそれを見ました。初期のドットマトリックスプリンタの中には、インターフェイスのボーレートが高くなると、2文字の時間でも頭が追いつかなくなったため、適切な測定のためにいくつかの追加のNULを投入する必要がありました。その問題は、バッファリングとフロー制御が登場するにつれて解消されましたが、初期のプリンターにはそれがありませんでした。最後に、プリンタが出力専用になると、ハンドシェイクが組み込まれたパラレルインターフェイスに移行しました。
マークランサム2017年

1
「一般に信じられていることとは反対に、QWERTYレイアウトは、タイピストの速度を落とすようは設計されていません…」–プロパティ| QWERTY配列-ウィキペディア
JasonSparc19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.