はじめに
全部 Wikipedia に載っています。
昔話
昔々、タイプライターという道具がありました。タイプライターは、指で鍵盤(キー)を叩くだけで文字や記号を紙面に印字できる機械であり、手書きよりも高速に文書を作成することができました。私もラクーンシティではよくお世話になりました。
タイプライターのキーを押すと、キーに対応するハンマーが跳ね上がり(てこの原理のイメージです)、ハンマーの先端に付いている活字(ハンコ)が紙を叩きます。この動きによって文字が紙に印字されます。更に、キーを離すとハンマーは元の位置に戻り、紙が一文字分横にずれます。この動きによって、連続してキーを叩くことで連続して文字を印字していくことができるのです。
タイプライターに付いている全てのハンマーは常に同じ位置を叩くように設計されています。
タイプライターの現物を見たことがない人は勘違いしていることが多いのですが、
文字を印字する位置が変わるのではなく、印字される紙の位置がずれていきます。
連続してキーを叩くことで文章が印字できることが分かりましたが、2 行目を印字したいときはどのようにするのでしょうか?
タイプライターの紙を固定する土台のことをキャリッジと呼びます。キャリッジは、キーを叩くたびに横へずれていき、印字部分が紙の端に近づくと、ベルとともに横移動を停止します。タイプライターの使用者は、ベルが鳴るとキャリッジを元の位置へ戻す必要がありました。この動きをキャリッジリターンと呼びます。
2行目を印字するためにはキャリッジリターンだけでは不十分です。なぜなら、キャリッジの位置を元に戻しただけでは、印字される位置が 1 行目の先頭に戻っただけだからです。つまり、そのまま印字動作を始めると 1 行目に文字が上書きされていきます。そのため、タイプライターの使用者は、キャリッジリターンと合わせて紙を 1 行分(キャリッジの動きに対して縦方向へ)ずらす必要がありました。この動きをラインフィードと呼びます。
タイプライターの使用者は、キーの押下とキャリッジリターン・ラインフィードを組み合わせて文書を作成していました。
今話
テキストファイルは一般的なデータ形式であるにも関わらず、改行コードに種類があることはあまり知られていません(要出典)。
ASCII 文字コードを使用するシステムでは、以下のように呼ばれる文字(文字列)が改行として使用されています。
- CR
- LF
- CR + LF
これらの名前は、タイプライターの動きに由来しています。即ち CR はキャリッジリターン、LF はラインフィードに由来します。
元祖であるタイプライターは、改行のために CR と LF の両方を必要としましたが、Unix 系と呼ばれるシステムでは LF だけを改行文字として採用しました。一方で Windows OS では、タイプライターと同様に CR と LF を改行として認識します。CR は BSD 系のシステムで改行文字として採用されているそうです。そのため(かどうかは厳密には調べていませんが) BSD を祖先に持つ Mac は Return キーで改行を入力します。
ただし、Unix 系システムは CR が使われていないというわけではなく、同じ行を随時更新していく(行を上書きする)必要があるときに使用されています。例えば yum
などでパッケージをインストールする際のプログレスバーの表示などで使用されているように思われます。
ちなみに Windows の notepad.exe では CR + CR + LF という改行コードが一時的に使用されることがあるそうです。
ところで、プログラミングでよく使用される改行文字の表現 \n
は通常 LF に対応しますが、next line
の頭文字らしく、必ずしも LF に対応する必要は無いように思います。もしくは、多くのプログラミング言語が LF を改行とする Unix 系システムで発展したことを示す文化として認識するべきものなのかもしれません。
おわりに
キャリッジリターンだけする人の動画です。
https://www.youtube.com/watch?v=g2LJ1i7222c