9 ポイント 投稿者 GN⁺ 2024-10-14 | 8件のコメント | WhatsAppで共有

キャリッジリターンとラインフィードの定義

  • キャリッジリターン (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件のコメント

 
cosine20 2024-10-14

改行コードとしてたまに使ってるんだけど……

 
doolayer 2024-10-14

かなり過激ですね。

 
savvykang 2024-10-14

10月14日の訂正によると、変更提案は撤回されるとのことです。

単に1つのシステムだけを変えるのではなく、プロトコルと影響を受けるすべてのシステムを段階的に変更しなければならない話なので、私には筆者が慎重さを欠いていたように見えます。

 
constexprif 2024-10-14

廃止するコストより、廃止して得られる利益のほうが大きいと考えたのでしょうか?

 
alstjr7375 2024-10-14

CR+LF has a long history...

おお…こういう理由だったのか…

 
bakyeono 2024-10-14

CRLFは誤って定義された仕様というわけでもなく、当時のハードウェア環境を反映したものなのに……
下位互換性は忘れて、この瞬間のことしか考えていないように思えます。
ハードウェア仕様が変わるたびに、プロトコルを作り直すべきなのでしょうか?

 
halfenif 2024-10-14

廃止することに賛成でも反対でもありませんが。

なぜかY2K問題を思い出しました。

 
GN⁺ 2024-10-14
Hacker Newsのコメント
  • 既存のプロトコルをNLに更新すると潜在的なバグを招く可能性があり、HTTP/1.1はすでにHTTP/2に置き換えられている
    • 新しいプロトコルでCRLFを要求しないのは合理的だが、既存のプロトコルを更新する必要はないという主張
  • CRLFに準拠しないのは、意図的にバグを導入するのと同じだ
    • SQLiteのHTTPサーバーが \r\n の代わりに \n を使うよう更新されたが、これによってZigのHTTPクライアントとの互換性が壊れた
  • CRLFは子孫たちが心配しなくてよいようにすべきだという意見
    • .gitattribute ファイルの使い方を教え、バイト順マーク(Byte Order Mark)を嫌うよう教育すべきだと主張
  • Unixの非標準的な行末選択は失敗であり、これは数十年にわたる互換性問題を引き起こしてきた
    • CRLFは端末APIの2つの異なる部分であり、多くのプログラムがCRとLFの正しい動作に依存している
  • CRLFは標準の中で最も重要でない要素の1つだ
    • 標準を壊すのは新しい試みであり、個人的にはなじみのない態度だ
  • SMTPはメッセージ終了シーケンスがCR LF . CR LFであることを明確にしており、LF . LFを認識する実装も存在する
    • 元のSMTPルールはもはや重要ではないのかもしれない
  • CRLFは多くのデバイスに危険をもたらす可能性があり、例外は減らすべきだ
  • 行末を混在させたときに発生する問題への言及がない
    • NLという文字は存在せず、すべてのキーボードの「ENTER」キーはCRを送信する
    • 現在の方式はうまく機能している