キャリッジリターンとラインフィードの定義
- キャリッジリターン (CR): カーソルを同じ行の左端へ移動させる
- ラインフィード (LF): カーソルを1行下へ移動させ、前の行を上へスクロールさせる
- ニューライン (NL): カーソルを1行下へ移動させ、左端へ移動させる
観察
- CRとNLは有用な制御文字である。NLは最も一般的な操作であり、テキストの新しい行を左端から開始する
- LFは実質的に無用である。行の途中から次の行へ下がって、同じ列で書き続けたい人はいない
- LFは約70年前の機械式テレタイプの時代に起源を持つ
歴史的背景
- テレタイプは5秒あたり約5文字を印字していた
- CRLFの慣習は1950年代のテレタイプの機械的制約に由来する
- MultixとUnixの時代に、CRLFをNLとして使うのは非効率だという認識が広まった
現代の状況
- 今日ではCRはU+000dで、LFとNLはU+000aで表される
- ほとんどの現代的な機械はU+000aをNLとしてのみ使用する
- 一部のプロトコルはいまだにCRLFを要求するが、ほとんどのソフトウェアは単一のNLを受け入れる
行動の呼びかけ
- U+000aコードポイントの名称を"ラインフィード"ではなく"ニューライン"に変更する
- 不要なCRの送信をやめる
- CRLFを要求するプロトコルに対してはNLのみを送信する
- CRなしのNLを受け取るとエラーを出すソフトウェアを修正する
要約と著者
- CRLFの終焉はずっと前から必要だった。この時代遅れの遺物をなくすために共に取り組むべきである
- 著者: D. Richard Hipp、SQLiteの創設者
# GN⁺の要約
- この記事はCRLFの歴史的背景と現代における非効率性を説明し、その廃止を訴えている
- CRLFは機械的制約から生まれた慣習であり、現代では不要な複雑さをもたらしている
- この話題はプログラマーやソフトウェア開発者にとって特に有用であり、効率的なデータ転送のために重要である
- 類似の機能を持つ他のプロトコルやシステムを使う際にも、CRLFの必要性を再考する必要がある
8件のコメント
改行コードとしてたまに使ってるんだけど……
かなり過激ですね。
10月14日の訂正によると、変更提案は撤回されるとのことです。
単に1つのシステムだけを変えるのではなく、プロトコルと影響を受けるすべてのシステムを段階的に変更しなければならない話なので、私には筆者が慎重さを欠いていたように見えます。
廃止するコストより、廃止して得られる利益のほうが大きいと考えたのでしょうか?
CR+LF has a long history...
おお…こういう理由だったのか…
CRLFは誤って定義された仕様というわけでもなく、当時のハードウェア環境を反映したものなのに……
下位互換性は忘れて、この瞬間のことしか考えていないように思えます。
ハードウェア仕様が変わるたびに、プロトコルを作り直すべきなのでしょうか?
廃止することに賛成でも反対でもありませんが。
なぜかY2K問題を思い出しました。
Hacker Newsのコメント
\r\nの代わりに\nを使うよう更新されたが、これによってZigのHTTPクライアントとの互換性が壊れた.gitattributeファイルの使い方を教え、バイト順マーク(Byte Order Mark)を嫌うよう教育すべきだと主張