2008-06-15

ASCII以前の世界

Reliving life in the time before ASCII?

もしASCIIが無かったとしたら、お前ならどうUnicodeを設計するという問いに対するブログなのだが、この最初のコメントがすばらしいので紹介する。

ASCII以前の時代から生きていた俺に言わせてもらおう。

何が嬉しかったかって、ASCIIは7bit文字ですらなかったということだ。タイプライターが原型なんだけどな。

そもそも、その頃の環境も考えてみてくれよ。1バイトは8ビットと決まってるわけじゃなかったんだぜ。大抵のコンピュータは、6ビットを文字列に使ってた。しかも、6ビット通りの文字を使ってたわけじゃない、印字可能な文字が48文字もあるなんて贅沢すぎるってもんだ。だいたいメモリが極端に少ないと来ている。32k 36-bitワード長ってなだけでバカデカいメモリだったもんだから、そんな時代に、8ビット文字ないしは、16ビット文字なんて馬鹿げたものを、わずかな文字のために使おうなんて、馬鹿げているにも程がある。

それからな、磁気テープってのは6ビットにパリティビットがついたフレーム長だったんだ。通信はシリアルで6-7ビットだったし、プリンタやディスプレイはドデカイ文字セットなんて扱えるわけがなかったんだ。

というわけで、今と同じに考えるなってこった。あとな、IBMのSystem/360なんてものが台頭したせいで、てんでバラバラな8ビットのEBCDICが出てきて、滅多に使われんASCII互換ビットなんてものもあったわけよ。

こういう事情が、ASCIIの登場を、ミニコンピュータの出現まで遅らせたってわけだ。ミニコンピュータにはASCIIを用いたタイプライターがついてて、後には、DEC VT52というASCIIベースの文字ディスプレイ、あるいは他の、これまたASCIIベースのクローンディスプレイがついてた。そんな時代にビットマップデバイスであるとか、キャラクターコードであるとか、グリフなんて洒落たもんはなかったよ。まあ、ROMに独自文字を焼きこむってのはあったが。

マイクロプロセッサは大抵、ASCIIを使ってて、しかも1バイトは8ビットだったね。でも、Unicodeや巨大なフォントやらの可能性と将来性を示したのは、やはりIBM PCだろうな。まあ、膨大な8ビット文字のコードページ集とファミリー集に悩まされた後になっての話だったんだけどな。まあ、超絶スペックのハイエンドですら64キロバイトだったから無理もないんだが。

安いレーザープリンタの普及ってのも重要でな。HPのレーザージェットが普及したのは、ASCIIができてから二十年も後の事だよ。フォントも貧弱だったしな。ドットインパクトプリンタは昔からあったが、解像度ってものが無かった。今日の安くて高画質なカラーインクジェットプリンタなんて、ASCIIの黎明期には想像もできなかったよ。

だから当時の事情を鑑みるに、Unicodeなどを発明するのは不可能だし、今のこの現状を理解するには、ここまでたどり着いた過程を知らなければならない。

かくこと左様に、Unicodeの問題点を愚痴るために必要な技術というのがたくさんあるわけで、そういう技術背景がなければ、どうしてUnicodeより優れたものを作れようか。

Having lived in a time before ASCII, I have some perspective on that.  

What you need to appreciate was that ASCII wasn't even a full 7-bit character set originally, and it was driven in large part by the need to clean up teletypewriter codes.  

You also need to take into consideration the limitations of media at that time.  The 8-bit byte was not the norm yet, and most binary computers used 6-bit codes for characters (and not all of the code points had available graphics - 48 printable characters were considered an abundance).  Also, memories were *small*.  32k 36-bit words was a large memory and telling people to go to 8-bit codes or, worse, 16 bit codes for only a small number of usable code points would have made no sense at all.

More importantly, magnetic tape tended to use 6 bit frames (with parity), telecommunication was largely serial in 6-7 bits, and printers and displays did not handle large character sets.

So the opportunity was not present.   Also, the emergence of the IBM System/360 computer messed things up by introducing a sparsely-populated 8-bit EBCDIC code with a version of ASCII relegated to a rarely-used "compatibility" bit in the program state.

This basically spoiled the opportunity to establish ASCII until the end-run by minicomputers (often equipped with ASCII-using teletypewriters and, later, the DEC VT52 ASCII-based alphanumeric display and other ASCII-based clone displays).  These were not bitmapped devices and the character codes and their glyphs tended to be wired in, although burning your own character-generator ROMs was not unheard of.

Microprocessors generally used ASCII (and 8-bit bytes) but it was the IBM PC being an ASCII-based computer that foretold the ultimate opportunity to migrate to Unicode, large fonts, and so on, but only after the pain of code pages and families of ISO 8-bit codes.  After all, we were starting with machines where the high-end products had 64 kilobytes.  

The serious availability of economical laser printers was also important, and the H-P Laserjet did not reach the market until 20 years after ASCII, and font capabilities were limited.  Dot-matrix printers had been around a long time but they didn't have the resolution.   Today's low cost, high-quality color inkjet printer was unimaginable in the early reign of ASCII.

So circumstances would not have allowed for Unicode much before it actually arrived and I am not sure that today's hindsight would have been understandable without going through the process that got us where we are today.

There were a large number of technologies that had to advance together for us to arrive at a place where we could be complaining about the defects of Unicode and how we could do it over better given the chance (an opportunity I do not anticipate).

なぜEBCDICがてんでバラバラかというと、その割り当てを見てみれば分かる。とても使いにくい。しかも一文字を表すのに、8ビットも必要だ。

似たようなことは、いろんな技術に対して言われる。もし16bitコードの互換性問題が無ければ、32bitコードはどうなっているか。あるいは32bitコードが無ければ、64bitは如何に。そもそもx86がなければ。もしWindowsがなければ。もしCライブラリが無ければ。what if if if if if if......

No comments: