「ぐいぐい01」の基本ルール
- (by K, 2008.08.23)
(1) C言語版関数名について
- g01_で始まる関数名がついているものは、基本的にKが一応は設計に満足しているAPI関数です。したがって当分は仕様変更はないと思われます(もちろんそれを保障するわけではありません、残念ながら)。
- jg01_で始まる関数名がついているものは、基本的にKが設計に全く満足していない設計のAPI関数です。これらは設計がいつまでも終わらなくて(もしくは途方にくれて)実装が進まないことにイライラしてめんどくさいからとりあえず実装した関数です。将来の仕様変更はほぼ確実で、このAPIはなくなってしまいます。jはjunkに由来しています。
- しかしjg01_で始まる関数であっても、将来にわたってソースレベルでのサポートはされます。つまりこのAPIをなくす場合は、同名のライブラリ関数を当方が用意します。これにより、再コンパイルするだけで仕様変更後のOSASK-HB上でもアプリを動かすことができるでしょう。しかしその場合も、これは一応動くというだけで、本来のAPIを使った場合に比べて処理速度が遅かったり、アプリのサイズが大きくなったり、セキュリティが不十分になったりすることがあります。
- アセンブラレベルではjunkなAPIは機能番号0x00ffffffのサブファンクションになっています。
(2) -lc オプションについて
- efg01で-lcオプション(Lesser Compatible)をつけないと期待通りに動作しないAPIが存在します。主にファイルパスに関するものです。
- たとえばファイルパスを(アプリ内で)フルパスで書こうとしたり、..で親に戻ろうとする回数が多すぎると、本来の「ぐいぐい01」ではエラーになります。またコマンドライン上ではどんなファイルも指定できますが、そのパスを入手しようとする行為はすべて「ぐいぐい01」では本来は許されないことです。
- 「ぐいぐい01」の作法で認められているのは、「コマンドラインで指定されているファイルをオープンしてくれ」などの要求であって、「コマンドラインの文字列をくれ」ではないのです。これにより、アプリはファイル名のエンコードやパスの長さに関するトラブルのすべてから開放される上、アプリはファイルパスという個人情報を得ることも阻止できます(どんなディレクトリ構成で使っているかなんてことは、部屋のレイアウトをどうするかに匹敵する個人情報だとKは思っている)。
- フルパスや親に戻る行為が禁止されているのは、アプリがアクセスできる範囲をはっきりと限定するためです。本来は、ユーザがコマンドラインで指定したファイルやディレクトリ、およびアプリディレクトリのみにアクセス範囲が限定されるべきです。そうすれば、たとえファイルシステムにパーミッション管理などがなくても、システムはまず破壊されませんし、悪意あるウイルスのようなアプリからデータを盗み見られることもありません。もしファイルシステム全体にたいして何か作業をさせたいのなら、ユーザがコマンドラインでの対象ディレクトリにルートディレクトリを指定すればいいのであって、いつでも"/"から書き始めさえすればルートにアクセスできてしまうWin/Unixの仕組みはKにとっては悪い設計の例みたいなものです。
- そうはいっても、Win/Unixからアプリを移植する場合、ファイルパスまわりの記述を全部「ぐいぐい01」の仕様に直すのは少々手間です。最終的にはちゃんと直すにしても、とりあえずコマンドラインの文字列が丸見えだったり、普通にフルパスで書いたりしたいかもしれません。そこで、そのようなことを許すモードをつけました。それが -lc オプションです。このオプションのおかげで、ユーザは「自分の今動かそうとしているこのアプリが危険な行為をした場合には自分に被害が及びかねない」ということを意識することができます。 -lc じゃなくても動くアプリこそ、本当の「ぐいぐい01」アプリです。
- efg01を使ってアプリを起動する場合は、 >efg01 -lc アプリパス ... と書きます。OSASK-HBなど、「ぐいぐい01」をネイティブでサポートするOSでは、 >-lc アプリパス ... と書きます。
- なお、 -lc をつけないと動かないアプリは、原則としては「川合秀実推奨」はつきません。しかし例外として、代替機能を有するアプリが他に無い間は、やむなく推奨することもあります。
(3) 仕様変更について
- マニュアルのページ群では、仕様変更に伴って当然書き直しされます。しかし書き間違いを除けば原則として上書きはしません。つまり旧仕様も残されます。
- その残され方ですが、大規模な変更では、ページ上部に色付きの文字で「これは旧仕様になりました」と明記され、新仕様ページへの誘導リンクがあります。また新ページを作るのが面倒だと思ったときは、旧仕様の内容はコメントアウトしておきます。したがって、旧仕様を確認したいときは、ページだけではなくソースも確認してください。
- 例外として、目次ページ(GUIGUI01/man0000)は誘導でもコメントアウトでもなく、併記します。
Counter: 209,
today: 1,
yesterday: 0
初版日時: 2008-08-23 (土) 00:55:26
最終更新: 2009-11-21 (土) 00:00:00 (JST) (349d) by k-tan
|
ぺージ情報 | 閲覧可 | 編集可 | |||
---|---|---|---|---|---|---|
ぺージ名 : | GUIGUI01/man0001 | グループ : | すべての訪問者 | グループ : | すべての訪問者 | |
ページ作成 : | k-tan | ユーザー : | すべての訪問者 | ユーザー : | すべての訪問者 | |
ページ別名 : | 未設定 |