[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000514] array dimension proto type



堀之内です。

水曜に黒井さんに来て頂いたときに出た話です。

proto2c で生成されるラッパーは、長さ不定の配列('*'を含むディメン
ジョンで宣言されている配列)が出力用引数にあると、適当なデフォル
トの長さで初期化するようになってます。長さを機械的に判断できない
以上とりあえずしょうがないのですが、このままでは実用になりません
から、どこかの段階で実際の長さを用いて修正する必要があります。文
字列の長さについてはデフォルトを適当に仮定するということで凌げま
すが、配列の長さについては無理ですので。この修正はフィルターをか
けたあとやってもいいのですが、proto2cに喰わせるためのプロトタイ
プファイルで * をなくすように修正するほうが大部楽だろうと思いま
す。例えば

   SUBROUTINE SUB1(
       INTEGER N
       REAL o ARY(*)
   )

となっていたら、たいていの場合

       REAL o ARY(N)

ですね。もしもこう書いてあれば proto2c はちゃんと長さ N の配列を
返してくれるようになってますから、こう書き直す作業をやりませんか
という提案です。なお、実は ARY(N+1) でないとならないとか行ったケー
スも勿論有り得ますので、機械的には出来ないはずですが、dcl のよう
な素直なライブラリーではそれはあまりないでしょう。dclを多少知っ
ている人なら、怪しいときはマニュアルを見ながらやれば、前回 o,
io, t のフラグを加える手作業を行ったときより大部少ない労力で片付
けられることと思います。なお、ついでですから今のところやらなくて
も大丈夫な入力用配列についても作業して、完全に * をなくしてしま
いませんか。その心ですが、早晩、その上のラッパー(or proto2c の
生成物自身)において、入力配列の長さを配列自身から判断してわざわ
ざ別途入力する必要をなくさないとなりませんが、現時点で * を追放
しておくと後でこれがやりやすいだろうと思うからです。

ボランティア募集の前に、この作業を行うことに関してご意見を伺いた
く思います。

ではでは。

堀之内 武                     horinout@xxxxxx
京都大学宙空電波科学研究センター (旧超高層電波研究センター)
611-0011 宇治市五ヶ庄  phone:0774-38-3812  fax:0774-31-8463