コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

変数の仕様

 ブログ3日目です。三日坊主という言葉がありますが、もう既に挫けそうです。
 とりあえず、一週間頑張ろう。

 前回、文法等の言語仕様を思いつくままに書きましたが、変数の仕様を考えたいと思います。
 変数はグローバル変数とローカル変数が使えるようにしたいと思っています。ただ、メインメモリが少ないので、変数の格納領域はUSBメモリのような外部メモリに持って行ってしまおうと考えていました。でも、よくよく考えると、変数はその名の通り変数なので、どんどん値が変わる恐れがあります。ループに使った変数なんて、10万回ループしたら10万回値が変わるわけです。外部メモリは基本的にフラッシュメモリなので、書き換え寿命ってものがあり、「一発で死ぬぞ」という悲惨な状況が頭に浮かびました。

 いかんいかん、ここは妥協しよう。「変数はメインメモリに確保」としよう。ただ、メインメモリは16KBしかないので、ここは使える変数の数を限定する方向に考えを改めました。ただし、変数も外部メモリにもって行くという考えは頭の片隅に置いておくようにしたいと思います。

 そこで、変数の持ち方ですが、変数の条件として「型を持たない」ということを考えていました。他にもいろいろと仕様を考えましたので、改めて下に列挙します。

変数の仕様

  • ローカル変数とグローバル変数を持つ
  • 型を持たない
  • 配列を指定できる
  • 配列も含めて、システム側で使える変数の数は上限を持つ
  • (スーパーグローバル変数もあってもいいかな)*1

変数の内部仕様

 ここからは、プログラム内での処理に関する仕様を書きます。

  • 変数として使う領域は、プログラムの最初にがばっと確保して割り当てておいて、それを使いまわす。よって、ガベージコレクション無し。
  • 変数名
    • 使えるのはアルファベットと数字とアンダースコア(_)とする。
    • 名前の長さを制限する。(作者都合==作者のわがままです)
  • 変数用に確保する領域は3つに分ける。(作者都合)
    • 変数名格納用
    • 変数値格納用
    • 配列値格納用
    • 変数の格納にはハッシュテーブルも使わず、ただ単に1つの領域に詰めていくだけ。そして、ローカル変数名、グローバル変数名の順に検索して見つける。(遅スクリプトなので)
  • すべての変数は有無を言わさず配列変数である。メインメモリが無くて困る話をしているのに何故?という感じですが、作者のわがままと技量の無さです。
  • 配列の引数を持たない配列は、[0]の配列値とする。例えば、local a = 2.5;とした場合、a[0]に2.5が書き込まれます。
  • 配列宣言はしなくても良い。例えば、local a[0]=2.5; local a[10]=4.0;と宣言すれば、a[0]に2.5がa[10]に4.0が入ります。この場合、内部的には配列変数の確保領域に連続性は確保しません。
  • 配列宣言をしてもよい。例えば、array a[10];と宣言すると、a[0]〜a[10]までの変数領域を連続的に確保します。これは、何が便利かというと、文字変数をあきらめ切れなくてぇ〜。
  • 変数値の格納は文字とする。例えば、2.5は、0x32,0x2e,0x35,0x00という感じ。(作者都合)。こうしておくと文字変数ともほぼシームレスに使えるので。ぉぃ。
  • 配列値格納は、とりあえず数値とする。ここも文字にしたいところですがさすがに止めました。プログラム的には変更することを考えて作っておきたいと思っています。ここを文字にすれば連想配列が可能となってきます。でもそうなると、いろいろと変えたくなってくるので・・・。
  • 変数領域への格納は、最初グローバル変数領域を確保し、その後、関数が呼び出されるたびに、ローカル変数領域を確保する。そして、関数から抜けると確保したローカル変数領域を解放する。
  • 最後に、同時に使える変数の数は、グローバル、ローカルを含めて100個とする。小規模なプログラムしか組めないということです。

 変数名の長さは12バイト(12文字)、配列変数領域は2バイト、変数値格納領域は12バイト(12文字)とする。これで、26バイト×100となり、変数領域に約2.6KB使用することとなります。16KB中の2.6KBなので、様子を見つつ確保量を決めて行きたいと思います。

 今回も、文章ばかり・・・、わかりにくいなぁ。

本当にやりたいことリスト

(ブログの終わりにやりたいことを書いておきたいと思います)

  • 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
  • Androidプログラム
  • Web系のプログラム

*1:スーパーグローバル変数とは、勝手な造語ですが、スクリプト本体が終了しても保持されている変数という意味です。