ぐいぐい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.12.25時点)
- 代表的な実行環境(右にあるほど実装度が高い・最新仕様)
対応環境 win32 abcdw003 [OSASK 00106] abcdw006 [OSASK 00116] abcdw007 [OSASK 00117] OSASK-HB/AT pencil000 [OSASK 00108] OSASK-HB/TOWNS OSASK-HB/NEC98 旧OSASK Linux abcdl000 [OSASK 00109] mabcdl00.tar.gz mabcdl01.tar.gz MonaOS abcdm000 [OSASK 00107] おれんじぺこ op05_081214.zip BeOS mabcdb00.zip NWSOS - MomongaLinuxのオプショナルパッケージにabcdw014相当のefg01あり(たぶん)
- (2008.12.28時点)
- アプリ(上のものほど新しい)(註:(b)=バグあり、(v)=これは既に旧バージョンで、新バージョンがリリース済み、探しやすいように無印(=最新版)は青で着色)
- abcdw007相当およびそれ以上でバイナリの動作が期待できるもの
- abcdw007にバンドル([OSASK 00117]): aksa, bim2g01, bim2hrb, bin2obj, calc, chars, cpy, echo, echoc, gas2nask, golib00, hello, helloc, makefont, nask, naskcnv0, obj2bim, pi, sjisconv
- abcdw006相当のみでバイナリの動作が期待できるもの
- abcdw006にバンドル([OSASK 00116]): bim2g01(v), calc0(v), chars1(v), golib00(v), nask(v), obj2bim(v)
- abcdw005相当~abcdw006相当のみでバイナリの動作が期待できるもの
- cpy0bにバンドル([OSASK 00115]): nask(v), gas2nask(v), cpy(v)
- abcdw005にバンドル([OSASK 00114]): cpy(v), bim2g01(v), obj2bim(v), gas2nask(b), naskcnv0(v), sjisconv(v), golib00(v), bim2hrb(v), makefont(v), bin2obj(v), aksa(v)
- abcdw004相当~abcdw006相当のみでバイナリの動作が期待できるもの
- abcdw004にバンドル([OSASK 00113]): pi0(v), hellok1(v), helloc4(v), helloc5(v), echoc0(v), cp0(v), bim2g01(b)
- abcdw003相当のみでバイナリの動作が期待できるもの
- abcdw003にバンドル([OSASK 00106]): calc0(v), 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]): chars0(v)
- abcdw000にバンドル([OSASK 00101]): hellok0(v)
- abcdw007相当およびそれ以上でバイナリの動作が期待できるもの
(14) 仕様変更リスト
- (2008.12.25時点)
- (2009.01.02)abcdw009でAPIパケットのフォーマットを一部改変予定。C言語ソースレベルでの互換性は保たれるが、アセンブラ版はソース互換なし。
- (2008.12.24)abcdw007はCOM64plusとの開発競争で大幅な進歩を遂げたが、代償として大量に仕様変更。ソースもバイナリも互換性が損なわれている。abcdw007にはそれまでにKがリリースした.g01アプリを全てabcdw007仕様に移植しバンドルした。
- (2008.11.28)rjcの変換ルールを若干変更予定。これに伴いefg01とbim2g01は再度バージョンアップされる。以前のbim2g01で作られたバイナリは一部互換性に問題がある(ソースレベルでは全く問題はないので再makeすればいい)。Kがabcdw004以降用のバイナリとしてリリースしたもののうち、問題が確認されているものは次の3つのみ。golib00.g01、obj2bim.g01、nask.g01。
- (2008.11.18)APIの基本の可変長整数値エンコードを変更。これに伴いabcdw003およびそれ以前向けのバイナリは全てabcdw004以降のバージョンでは使用不能。ソースレベルでの互換性はほぼ保たれているので、多くのアプリはヘッダファイルの交換と再コンパイル程度で対応可能。
- (2008.05.08)コマンドライン取得APIの仕様を変更する予定。これに伴い以下のアプリはabcdw004以降のバージョンでは使用不能。
- echonr0, calcnr0, calc0
こめんと欄
- M59さんがabcdw006をLinuxに移植してくれました。どうもありがとう! http://d.hatena.ne.jp/mandel59/20081218/1229613730 -- K 2008-12-19 (金) 11:33:09
- M59さんがabcdw006をBeOSにも移植してくれました! http://d.hatena.ne.jp/mandel59/20081221 -- K 2008-12-22 (月) 16:12:05
- M59さんが早速abcdw007をLinuxに移植してくれた模様。スクリーンショットがなかなかで、単にhelloを実行した後、nask.g01を使ってchars.nasをLinux上でアセンブルしてそのchars.g01を実行しています。かつてLinux版naskの整備に苦労させてしまった経緯を思うと、僕にとっては感動的です(当初はOSASK_bin_on_Linux(old)にあるようにソースからのコンパイルのみならずパッチが必要なほど大変だったのです)。 http://d.hatena.ne.jp/mandel59/20081224 -- K 2008-12-25 (木) 16:04:30
Counter: 210,
today: 1,
yesterday: 0
初版日時: 2008-04-28 (月) 22:39:41
最終更新: 2009-11-21 (土) 00:00:00 (JST) (349d) by ゲスト
|
ぺージ情報 | 閲覧可 | 編集可 | |||
---|---|---|---|---|---|---|
ぺージ名 : | GUIGUI01/memo03 | グループ : | すべての訪問者 | グループ : | すべての訪問者 | |
ページ作成 : | ゲスト | ユーザー : | すべての訪問者 | ユーザー : | すべての訪問者 | |
ページ別名 : | 未設定 |