[1377] Re:システム変数について
投稿者:山
2009/06/30 19:08:00
さすが(ぱ)さんと言うか、鋭い突っ込みありがとうございます。実はシステム変数に
ついては多少触れるのを避けていました。。なぜなら(ぱ)さんの「表計算ソフトって」
のコラムで表についての意見を読んでいて、まさにその表を言語に組み込もうとしている
のです。だから、完成する前にキツイ指摘を受けるのではないかと…
システム変数は、簡単に説明すると。項と列によって構成されるシートが基本で、この
シートによって複数の機能と特徴を持っています。
Aシート ・・・~・・・ Zシート (26シート)
----------- ------------
| | | |
| | | |
----------- ------------
このシート名が変数の最初の「A」にあたり
000 ...................................... 999 (1000個の項目)
-------------------------------------------------
A | | ・・・ | |
: | | --------------------- | |
Z | | | int double string | | |
a | | --------------------- | |
: | | ↑一つのセルの中に | |
: | | 3つのデータがある | |
z | | ・・・ | |
-------------------------------------------------
(52の列)
変数名は 「シート+列+データ型+項目番号」 = AAI000 となります。だから
自由に変数名はつけれない。それを解消するために#defnieが必衰でした。
ちなみに、システム変数にアクセスする方法は、直値=AAI001と言う形と、相対配列
=ABI010「X][Y] これは、指定の座標から項にX値の相対座標指定、列にY値の相対座標を
指定してアクセスします。 ABI010[X] は項目のX相対座標指定です。
もともとこのシート形式は、目的アプリケーションで必要だった機能を実現する為の
些細なアイデアでした。しかし、言語を作っていく上でシステムの基本となり。言語上
でもかなめ的要素(中心的要素)になったのです。注意、EXCELを作るわけではありません。
ここからは既存の言語的常識を一時保留にして読んでください。
例えば、市役所等での情報の伝達はシート、書式を持った紙です。市民登録、婚姻届等に
必要な項目を記入し提出する。それを受け取り保存する。別にガッシリとデータ定義された
構造体やclassがあるわけではありません。記入する方も総ての項目を初期化したり記入し
たりしません、必要な項目のみ記入して提出します。
このイメージをモジュール間の情報伝達に使用しようと考えたのです。例えばシートAに
に必要なことを書いて、他のモジュールに動作指示を出す。その時シート名を伝達するだ
けでいい、構造体やclassは不要です。なおかつしたい事の種類のよって、多くの構造体や
多くのクラス定義が必要になったりしますが、シートでは必要な部分だけを書けばいい。
と発想したのが元です。
情報伝達の単位は、最小のint,double,string、そして一つのセル、相対X領域,相対Y領域、
相対矩形の領域、列、シート、そしてパックされた情報の8つの単位で情報伝達を考えてい
ます。この処理単位で情報伝達するために、言語は関数内では普通の言語的整合性を持って
いますが、一歩外のグローバルではシステム変数で情報伝達する。その結果グローバル変数
はシステム変数となり、言語的整合性ではなくシステムの目的にそって作られています。
補足
1、一つのセルの中にint,double,stringデータの情報が入っているのは、もともとはデータ
の型別にシートが分かれていました。しかし、リストやソート、検索、辞書(map)の場合、
3つのデータをまとめて処理したほうが利便性がいいとの理由です。そのため1セルに3つの
情報を入れました。しかし、変数としては別々にアクセスします。
例えばstringでソートした場合、intもdoubleもいっしょにソートされます。
例えば、intに優先NOが入っていたら、intでソートしたら文字列もいっしょにソート
されます。
利便性の目的のためだけに、3つの情報を一セルに入れました。
2、パックされた情報は、stringデータに入ります。なのでstringデータは複数のデータ
を大量に保持することが出来ます。
3.システム変数を言語内の変数と同じように、透過的にアクセスできるように作れたため、
システム変数の操作を速くする事ができた。これは、関数を用いてシステム変数を操作する
ことを思えば、スレッドセーフでも、格段に融通が利き速い動作を保証できる。
最後に
この言語だけでは、奇妙な言語が一つ出来ただけの事です。この仕組が受け入れられる
かは、その上に乗ったアプリケーションが洗練されていて使いやすく受け入れるか如何に
かかっています。ここから先はいかにいい物を作るかだけでしょう。それに、言語の
初心者を対象にしているので、ここからはバリバリな日本語化に走ります。
プログラミング言語ができる人は、C/C++なりJavaなり、その他各種汎用言語を使って
ください。がベースにあります。^^
今ある汎用言語は洗練されていて複雑で優秀です。だから私がいまさら作る意味が無い
ですし。
追加の補足
上記のことを書いた後に、グローバル変数でもいいのではないか。の発想もありますが、
その場合、情報の集合体としての構造体やclassが必要です。でも、移転届用紙のような
多数の関係の薄そうなデータ総てを構造体やclassに入れるのは、根本的にシステム設計
が間違っている方向でしょう。やはり書式用紙に代表されるデータ構造と、プログラム上の
データ構造とは明らかに違っています。プログラムでは関連のあるデータを参照やキー
情報、その他関連情報で持ちます。しかし、この構造は前にも話したように他の何かの
サポート無しに完全な一意の意味を保証することは不可能です。
でも、シート形式なら完全かと言うとそうでもありません。実は時系列な情報変化の
保証は出来ないのです。これはあきらめています。時系列的な情報の変化とは、転移届を
受理して完全に処理される前に。同じ人から違う転移届を受け取ってしまった場合の矛盾
です。 これは外部の何らかのサポート、受理処理が完全に終了するまで受け付けない
フラグ等のサポートが必要になり。これはシステムではなく、プログラマがそれを理解し
作らなければならないのです。
完全なデータフローマシンでも作ればいいのですが、そのプログラミングはまた違った、
別の複雑な知識が必要になってきます。