固定長

WEBで見かける文章で、文章中の妙な位置に、空白が入っているものがある。
多分、行末に固定桁で改行が自動で入る環境なりエディタを使っている人なのだろう。
そういう環境で作ったデータを、WEBブラウザレンダリングエンジンで表示すると、改行が空白に変換されてレンダリングされる。
HTMLはそういう仕様だし、動きとしては納得。

日本語文章でのそういう空白が、自分は読んでいて気になる人だ。
英語などの文章では気にならない…というか、あっても分からない。
元々が空白で単語を区切るものだし。
HTMLの仕様を作った人は欧米の人だから、まあ、そんなものなのだろう。

自分のコンピュータで文章を書く上でのスタイルは、いわゆる論理行の人。
固定桁で改行を入れず、1つの物理行の文字数が可変長の人。
すなわち、固定長ではない。
これはずっと昔からそう。
WebアプリケーションおよびHTMLという、動的レイアウトが当たり前、レンダリング環境がすべて違うのが当然…という世界に、IT経歴のかなり最初の時点から住んでいるせいだろう。
いわゆるパソコン通信という奴は、当時出来得る環境は持っていたけれど、やっていなかったし。

それに、文章の構造が物理的桁数に制約される、というのが何となく納得いかない人でもある。
いや、俳句とか詩とか、四百字詰め原稿用紙とか、固定の書式があるのは分かるのだよ。
文章が印刷される物理媒体がどういうものか、という環境面での話もあるし。
そういった物理的な制限・制約の中で、人間が見やすい・読みやすい配置にするのは大事だよ、というのも分かる。
しかも、文章が動的にリフローする環境なんぞ人類史上なくて、この数十年で初めて出てきたのだし。

けれど、文字シーケンス中に、自分の意図や文脈とは関係のない文字(実際には改行だけれど)がぶち込まれている状態は、気持ち悪くない?
文章における改行は、書き手の意思や込めた意味があって、そこの場所にあるのだから。
いや、右端の固定桁できっちり改行して欲しいんだ!! というのも分かるけどさ。
そうすれば、大体の環境で同じようにレンダリングされるし、端末の桁数を大きくする分には問題ないし。

でもさ、文字シーケンスとしてのバイナリ列は、できる限りピュアなものであるべきじゃない?
レンダリング結果として望む状態は、ピュアなバイナリ列とは別の情報として定義するべきものじゃない?
これはHTMLとCSSの思想そのものだけれど、自分は今のHTMLも気持ち悪いと言えば気持ち悪いし、Unicodeの各種修飾用文字も気持ち悪い。
とは言え、タグによる修飾を無視したり取り除けば、それなりにピュアなバイナリ列になるから、まだ我慢はできる範囲。
(それにしても、レイアウト目的のdivの嵐はなんとかならないのか?)

あと、自分は固定サイズ端末の世界も、当たり前に分かる人ではある。
自分のコンピュータの使い始めは、MS-DOSだ。
そこからLinuxに移行して、X上でxtermとかを使っていた。
担当システムのUNIXサーバにログインする時に使っていたのは、TeraTermだった。

しかし、それでも本当の固定長の世界は知らなかった。
仕事で自分がそういう環境を使ったり触れることがほとんどなかったから。
まあ、対向システムがメインフレームだったことはある。
だから、固定長のことを知ってはいたけれど、体験はしていなかった。

そんな中、ここ1年くらいで、厳格な固定桁・固定長の世界に、この年齢になってようやく足を踏み入れた。
オフコンで動いている業務システムで、実装言語はRPG…に、深く関わるようになったから。
触ってみれば、オフコンといっても一皮むけばただのコンピュータだし、RPGといってもただの構造化プログラミング言語
なので、システムやプログラム上でやっていることは、自分でも普通に読み取れるし理解できる。
だけれど、今までは(アセンブリ言語Pythonを除いて)ほぼすべてフリースタイルの言語だったから、かなりのカルチャーショックはあったし、今も感じている。

ちなみに、今のRPGがフリースタイルもどきで書けるのは知っている。
それに、今いるところのRPGコンパイラも、フリースタイル構文が使えるバージョンではある。
また、EclipseRPGプラグインIBMが直々に開発していて、Gitとの連携もできるということも。
でも、そこでのコーディングスタイルや規約は、古式ゆかしいもの。
RPGプログラマの皆さんは、固定桁・固定行の端末エミュレータを使って、昔から受け継がれてきたスタイル・やり方で、お仕事をされている。
それらに触れて、この21世紀になって1/4くらいが経った今でも、そういう世界があるんだねぇと、素直に感じた。

あちらの世界の住人とは、仕事上での必要があるので、ちょくちょく話す。
あちらはすべてが固定長前提なので、話が一発で通じないことがある。
なんというか、コンピュータの物理構造がむき出しになっている、という感覚がある。
いや、色々な抽象化やら仮想化が間に挟まっているのは分かっている、けれども、という。
逆に、話す前にこちらの頭を固定長に切り替えてあれば、あちらの言っていることは分かるし、通じるように話はできる。

あらためて思うのは、コンピュータという奴は、ソフトウェアからハードウェアに向かって抽象度を下げていくにつれ、固定長になる、ということ。
可変長は色々な意味でコストがかかるし、ソフトウェア側で必要とする可変長の上限も仮定できないから、固定長の範疇で小細工をしつつ、可変長をエミュレートしている。
そんな感じで、コンピュータでの様々な制限・制約の源は、固定長にある。
コンピュータの物理的な実装のされ方が、コンピュータが計算する上で利活用している物理現象が、すべてを制限・制約する。
コンピュータが有限のリアル世界で実装され動いている以上、各種の物理的限界は存在するし、効率的に処理をしたり処理時間を保証するなら、固定長でなければならない。
それを知っているのといないのとでは、プログラマーやITエンジニアとして、大きな差が出る。
当たり前のことなのだけれど。
自分が相手にしているのが、プログラミング言語だろうがWEBサーバだろうがDBMSだろうがレンダリングシステムだろうがキューイングシステムだろうが、同じことだ。

ソフトウェアと言っても、実態は全然「ソフト」ではない。
ソフトウェアはハードウェアの上で動くから。
ソフトウェアはハードウェアに縛られるものであり、ハードウェアに強く依存するもの。
それは、ずっと昔から変わっていないと思う。
これは、数式処理システムでの無限の扱いと、プログラミング言語および実ハードウェア上で実装・実行される無限再帰の違いとでも表現できようか。

ハードウェアの演算性能をフルに発揮するためのソフトウェアは、ハードウェア的な書かれ方をしたソフトウェア(?)とでもいう感じになる。
今のところはそうだが、そこから変わる気配はあるのだろうか。