* ぐいぐい01に関するメモ-03 -(by [[K]], 2008.04.28) -メモのうち重要な部分をそのうちまとめてまともなページを作る *** (12) 標準ライブラリ不要論? -C言語には一般にprintfやputsやfopenなどの標準ライブラリというものがある。これの何がありがたいのかというと、これらの関数だけを使っている限りにおいてソース互換が達成されて、CPUやOSが違ってもソースコードを流用したり共用できるというものである。・・・まあでもこれは建前で、現実にはエンディアンやint幅の違いでただの再コンパイルだけではうまくいかない場合も少なくはない。 -さて「ぐいぐい01」を使えば、このようなライブラリに頼らずともソースの完全互換どころかバイナリまで互換になる。エンディアンとかintの幅とかが違う心配も全くない。差異はせいぜい環境によって処理速度や画面の解像度が違うといった程度で、これは同じOSのAT互換機間でも生じうる差だから、事実上、機種の違いはないといっていい。 -そもそも標準ライブラリというのはオーバーヘッドが大きい。なぜならANSI-Cで定められた仕様を満たすために実際のAPIをラッピングして実装されており、直接APIを呼び出すのと比べればどうしても遅くて大きくなる。「ぐいぐい01」アプリでありさえすれば互換性について気にする必要なんかないのに、どうしてわざわざ効率の悪い標準ライブラリを使う必要があるだろうか。 -「ぐいぐい01」がエミュレータを使わずに互換性を提供できる範囲は、確かにそんなには広くない。というのはIA-32でなくてはいけないからである。しかしちょっと考えてみてほしい、今IA-32が使えない環境がどれほどあるだろうか。MacもIA-32になってしまった。TOWNSもPC-98も昔からIA-32だ(PC-98の286までの機種を除く)。・・・なるほど、[[K]]のお気に入りのGBAなどIA-32ではない機種も確かに存在するが、それはどちらかというと組み込み環境であって、そういうものではそもそも標準ライブラリが完全に用意されているとは限らない。 -この考えで行くと、標準ライブラリを使わないようにすることで失われるのはX68Kとのソース互換やPowerPCマックや68マックとのソース互換くらいなものである。逆に標準ライブラリよりも「ぐいぐい01」のAPIを直接使うようにすれば、オーバーヘッドが少なくて効率が良いアプリが得られるわけで、この利益はX68Kや旧Macとのソース互換をあきらめても十分につりあうものだと思う(X68Kや旧Macしかもっていない人が、「ぐいぐい01」アプリを使うためにX68Kや旧Mac程度の処理能力の中古PCを代替で購入したとしても、そのコストは十分に小さいと考えられるから。しかもOSASKやOSASK-HB上で動かすことにするなら、アプリの高効率性との相乗効果で、さらに1ランク下のPCでも十分かもしれない)。 -ということで[[K]]は、「ぐいぐい01」が出来上がって行くにつれて、自作アプリでは標準ライブラリを使わなくして行こうと思う(今後はwin32アプリなどはほとんど作らない予定)。そしてそのうち標準ライブラリの関数名や引数の順番を忘れちゃうんだと思うけど、それでも忘れないように努力するみたいなことは一切しないと思う。そんなことするくらいなら「ぐいぐい01」のAPIを覚えておくほうがマシだと思うから。 ---- -こうしてみると、なんで世の中の人たちは「ぐいぐい01」のようなアプローチをしなかったんだろうと思う。WindowsとLinuxとMacOS(BSD?)とTownsOS(DOS-Extender)で共通のアプリが作れるようにしていればよかったのに。これらに対して共通のOSを用意しないといけないと思っていたのかな、でもefg01で分かるようにそんなことしなくてもバイナリ互換は達成可能だったのに。そしてアプリが共通化されていれば、ソフトウェア資産なんてドライバくらいしか優劣がなくなるから、OS同士の競争が進んでOSも進化しただろうに。まあいいや、誰もやってくれなかったから僕がやっているわけで、僕は苦労する代わりに「世界初」という肩書きももらっておくことにするよ。きっとjavaや.netでこれをやったつもりになっているんだろうな。でもjavaや.netではオーバーヘッドが大きすぎて「ぐいぐい01」の代わりにはならないと思う(ここでいうオーバーヘッドは単に実行時の処理のオーバーヘッドだけではなく、他の環境への移植の苦労も含む)。 *** (13) バージョン対応表 -(2008.11.28時点) -代表的な実行環境(右にあるほど実装度が高い・最新仕様) |~対応環境 | | | |win32 |abcdw003 [OSASK 00106] |abcdw005 [OSASK 00114]| |OSASK-HB/AT |pencil000 [OSASK 00108]| | |OSASK-HB/TOWNS| | | |OSASK-HB/NEC98| | | |旧OSASK | | | |Linux |abcdl000 [OSASK 00109] | | |MonaOS |abcdm000 [OSASK 00107] | | |おれんじぺこ | |Phase-5 (RC-1) | ---- -(2008.11.27時点) -アプリ(上のものほど新しい)(註:(b)=バグあり、(v)=これは既に旧バージョンで、新バージョンがリリース済み、探しやすいように無印はCOLOR(#0000ff){青}で着色) --abcdw005相当およびそれ以上でバイナリの動作が期待できるもの ---cpy0bにバンドル([OSASK 00115]): COLOR(#0000ff){nask}, COLOR(#0000ff){gas2nask}, COLOR(#0000ff){cpy} ---abcdw005にバンドル([OSASK 00114]): cpy(v), COLOR(#0000ff){bim2g01}, COLOR(#0000ff){obj2bim}, gas2nask(b), COLOR(#0000ff){naskcnv0}, COLOR(#0000ff){sjisconv}, COLOR(#0000ff){golib00}, COLOR(#0000ff){bim2hrb}, COLOR(#0000ff){makefont}, COLOR(#0000ff){bin2obj}, COLOR(#0000ff){aksa} --abcdw004相当およびそれ以上でバイナリの動作が期待できるもの ---abcdw004にバンドル([OSASK 00113]): COLOR(#0000ff){pi0}, COLOR(#0000ff){hellok1}, COLOR(#0000ff){helloc4}, COLOR(#0000ff){helloc5}, COLOR(#0000ff){echoc0}, cp0(v), bim2g01(b) --abcdw003相当''のみ''でバイナリの動作が期待できるもの ---abcdw003にバンドル([OSASK 00106]): COLOR(#0000ff){calc0}, pi0(v) --abcdw002相当~abcdw003相当''のみ''でバイナリの動作が期待できるもの ---helloc4にバンドル([OSASK 00105]): helloc4(v), helloc5(v) ---abcdw002にバンドル([OSASK 00104]): helloc0(v), helloc1(v), helloc2(v), helloc3(v) --abcdw001相当~abcdw003相当''のみ''でバイナリの動作が期待できるもの ---abcdw001にバンドル([OSASK 00103]): hellonr0(v), echonr0(v), calcnr0(v) --abcdw000相当~abcdw003相当''のみ''でバイナリの動作が期待できるもの ---chars0にバンドル([OSASK 00102]): COLOR(#0000ff){chars0} ---abcdw000にバンドル([OSASK 00101]): hellok0(v) *** (14) 仕様変更リスト -(2008.11.27時点) ~ ~ -(2008.11.18)APIの基本の可変長整数値エンコードを変更。これに伴いabcdw003およびそれ以前向けのバイナリは全てabcdw004以降のバージョンでは使用不能。ソースレベルでの互換性はほぼ保たれているので、多くのアプリはヘッダファイルの交換と再コンパイル程度で対応可能。 -(2008.05.08)コマンドライン取得APIの仕様を変更する予定。これに伴い以下のアプリはabcdw004以降のバージョンでは使用不能。 --echonr0, calcnr0, calc0 * こめんと欄 #comment