Re: 構造体のメンバの記憶域の順
新城@筑波大学情報です。こんにちは。
よいまとめが出てしまうと、続けにくいんだけれど、
In article <m3wud3afch.fsf@maedapc.cc.tsukuba.ac.jp>
MAEDA Atusi <maeda@cc.tsukuba.ac.jp> writes:
> そうか.結局structの宣言は,
> 1.プログラミングで使う組(tuple)データをある程度抽象的に記述したもの
> 2.ファイルI/Oや通信の際の入出力レコードを具体的に記述したもの
> 3.メモリ上のレイアウトを具体的に記述したもの
> の3つを,当初は兼ねていたけど,だんだん苦しくなっているんですね.
あと何年くらい、持ちますかね。
1だけでいいなら、Cを使うなという話はあります。構造体のせい
ではないと思いますが、CよりJavaの方がずっと高い生産性を
あげる人がいます。両方できる人はそんなに生産性は変らないのか
もしれないけれど、Cだといつまでたってもできないのに、Java
ならプログラムが完成するという例はあります。
で、Javaで、2., 3. を書こうとすると、終ってしまうんですよね。
> Javaはそういう考え方ですね.classのメンバの並びはどうでも良い.前方参
> 照しても関係ない.実際,メモリ上のレイアウトは宣言順でなく並べ替える処
> 理系が存在します(基本型と,GCが見る必要のある参照型を分けて配置する).
> メンバのメモリ上の位置がプログラマに見えることは無いので,これで良いん
> ですね.レコードをI/Oする時はmarshaling (serialization)します.配置を
> 決めたければ,自分でバイト単位で読み書きします.
具体的に、Java から SunRPC (XDR) で提供されているサービスを
使いたいと思った時に、実際どの程度の難しさでできるのでしょうか。
> 可変部分をunionにして完全にポータブルにすることも可能でしょうけど,
> ・structのサイズとして,「とりうる最大のサイズ」を取る必要がある.
> ・「後で拡張する」ことができなくなる.たとえば,sockaddrの定義中に
> sockaddr_in, sockaddr_un, sockaddr_x25, ...の定義をあらかじめ全部
> 含めなければいけなくなる.
> ので,用途が限られてしまいます.
Linux のカーネルで、VFS 層のinode の定義がこんな感じの巨大な
union になっていたと思いました。
> いや,実際上それはちょっと…
> モジュール化ができなくなってしまう.
> ライブラリをリンクする際も全部ソースからコンパイルし直しというのは…
ソースがあれば、速いけれど、ソースがなくても普通に XDR をす
ればいいので、RPC すると思えば、今の CPU で問題ない速度が出
ると思います。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735