Path: ccsf.homeunix.org!ccsf.homeunix.org!news1.wakwak.com!nf1.xephion.ne.jp!onion.ish.org!onodera-news!newsfeed.media.kyoto-u.ac.jp!oix.u-ryukyu.ac.jp!u-ryukyu.ac.jp!ie.u-ryukyu.ac.jp!gama.is.tsukuba.ac.jp!yas From: yas@is.tsukuba.ac.jp (Yasushi Shinjo) Newsgroups: fj.comp.lang.c Subject: Re: =?ISO-2022-JP?B?GyRCOT1CJEJOJE4lYSVzJVAkTjUtMjEwaCROPWcbKEI=?= Date: 27 Aug 2003 08:55:25 GMT Organization: Institute of Information Sciences and Electronics, University of Tsukuba Lines: 51 Message-ID: References: NNTP-Posting-Host: kirk.hlla.is.tsukuba.ac.jp X-Trace: gama.is.tsukuba.ac.jp 1061974174 1690 130.158.85.129 (27 Aug 2003 08:49:34 GMT) X-Complaints-To: usenet@gama.is.tsukuba.ac.jp NNTP-Posting-Date: 27 Aug 2003 08:49:34 GMT In-reply-to: MAEDA Atusi's message of 24 Aug 2003 12:45:18 +0900 Xref: ccsf.homeunix.org fj.comp.lang.c:76 新城@筑波大学情報です。こんにちは。 よいまとめが出てしまうと、続けにくいんだけれど、 In article MAEDA Atusi 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 で問題ない速度が出 ると思います。 \\ 新城 靖 (しんじょう やすし) \\ \\ 筑波大学 電子・情報       \\