ページへ戻る

− Links

 印刷 

GUIGUI01​/memo09 のバックアップ差分(No.1) :: OSASK計画

osaskwiki:GUIGUI01/memo09 のバックアップ差分(No.1)

  Next »[4]
1: 2008-11-22 (土) 11:04:23 ソース[5]
Line 1: Line 1:
 +* ぐいぐい01に関するメモ-09
 +-(by [[K]], 2008.11.22)
 +-メモのうち重要な部分をそのうちまとめてまともなページを作る
 +*** (20) 「ぐいぐい01」こそ理想のAPI
 +-まずは移植性というところから書こう。世間ではプログラムをきれいに書けとか、できるだけ標準関数だけを使って書けとか、ソースはオープンなほうがいいとか、まあそういうことがちょくちょく言われる。これは改良したい場合(他人に改良させたい?)と、移植したい場合の二つの理由からなると思われる。この改良したいという点に関しては、まあ基本的にごもっともなので僕から言うことはない。しかしこと移植性の確保のためということであれば、僕は言いたいことがある。
 +-まず最初に言っておきたいのは、「究極の移植性とは、移植をしないで済むことである」ということだ。つまり100%のソース互換が達成されるのであれば、プログラムがどんな内容だろうと、移植性を理由に文句を言われる筋合いはない。また更に進んでバイナリ互換まで達成されているのであれば、使っているコンパイラがやたらと古い版で入手困難だったり、物凄く高いコンパイラを買ってこないとmakeできないようなものであったとしても、そんなことは全く問題にならない。
 +-つまり「ぐいぐい01」がやってみせたことは、移植性を改善するためのある種の究極的な回答である。そしてそのような高度な移植性を実現するにあたり、一体どれほどのコードが必要なのかを示したのだ。それがefg01であって、それはwin32版で現状10KB程度である。こんなのはOSの大きさからすれば誤差みたいな大きさであるといってもよい(OSASKにとっては10KBの差は全く無視できないけれど)。しかも「ぐいぐい01」は高い移植性を提供しただけにとどまらず、各アプリのサイズに対して驚異的なアドバンテージまで付与しており、なぜ何メガもの(OSによってはギガにせまる)コードを書いておきながらこの10KBを書かなかったのだろう。それすらしてこなかった人(思いつけなかった人)に移植性について何か言う資格があるだろうか(註:もちろんある。過去の自分に落ち度があっても正しい事は当然言っていい。しかし恥を知るべきだ)。
 +-もちろん「ぐいぐい01」の方法はCPUの命令セットの壁は越えられない。それについては今まで言われてきた移植性確保の方法を実践する必要がある。しかし今まではwin32とx86用のLinuxのように、CPUが同じで命令セットに差がないのにソースレベルの互換性までしか保てなかったのだ(=標準関数を使えということ。ちなみに標準関数だけを使っていてもint幅などが異なればソース互換は保てない可能性が少なくないので、標準関数の使用は「ぐいぐい01」以上の移植性があるのかというとそんなことはない)。たった10KBでできることをしてこなかった正当な理由はない。
 +-もちろん「思いつけなかった」と言うことはできる。しかしこれがそれほど難しいことだろうか。むしろ僕にはこの問題をこの角度で解決する気がなかったとしか思えない。それで人とは違った書き方をする人(まあ多分僕もその一人だ)を、ただ非難しただけである。プログラムの書き方や言語だっていろいろな可能性が追求されて悪いことなんて一つもないはずなのに、そのせいで移植性がなくなるからやめろという。本当はただ自分が無能で、その人のプログラムについていけないだけなのに。そしてそれを認めたくないあまりに、問題があるのは自分ではなく変わったプログラムを書く人のほうだという。そしてそのために「移植性」という呪文を唱えているに過ぎず、この問題を解決しようと本気で思ったことがないのだ。本気で考えたことがあるのなら、たった10KBのプログラムが思いつけないなんて、結局ちっとも優秀じゃない。
 +-また言われたほうも言われたほうである(これは過去の自分が該当)。けなげにも言われたとおりだと思ってしまう人がいる。それでせっかく自分にあった可能性をつぶし、どこにでもいる(=「かけがえのない」の反対)プログラマになってしまう。そうではなくて、なんだとーまけるもんかとefg01のようなものを作ってしまえばよかったのだ。そうすれば言われない非難はもうなくなる。
 +-みんなが英語を使っているんだからお前も使え、ということはできる。しかし自動翻訳機さえ作れれば、そんなことを強要されるいわれはないのだ。そして自動翻訳機はみんなが漠然と思っているほどむずかしくはなかったのだ。エスペラント語に相当する「ぐいぐい01」さえ使えば、自動翻訳機で任意の言語に容易に翻訳できると、efg01は実証しているのだ。しかもそんな通訳しやすい、言い換えればそれぞれのOSの特徴に特化できていないというハンデがあるはずなのに、結局はそれぞれのOSのネイティブAPIで書くよりも小さくなってしまうのだ。どっちが強要に値する仕様かは明確である(といっても僕は何も強要しないが)。
 +----
 +-次はOSの互換性について書こう。たとえばWindowsのAPIがある。これは互換性を維持するのがとても大変らしい。バージョンアップのたびに似たようなAPIが追加され、それでコードがどんどん膨らむ。最初から完全なAPIが設計できればそれが最高で最善だが、まあ人間は最初からすべてを想定することが得意ではないので、やはり後になってあれこれ手直ししたくなってしまうのは責められないところだ。
 +-そしてそのときに旧APIを捨てて新APIに置き換えることがもしできれば、コードの肥大化は十分に防げる。というか、正直僕はWindowsの肥大化の理由が互換性の維持だけで説明できる量をはるかに凌駕している気がしてならないんだけど、でもまあ世間ではそういうことになっているので、ここではそれを受け入れることにする。
 +-さてもし最初のバージョンのWindowsのAPIが、「ぐいぐい01」のような仕様だったらどうだろう。もしそうなら、たとえWindowsがLinuxやMonaOSくらいに激変するようなAPI仕様の大転換があったとしても、別にたいした問題にはならない。10KB程度のefg01に相当するものを入れればいいだけなのだから。・・・想像してみてほしい、もしこうであったら、Windowsの開発者はどれほど自由に次バージョンのOSを設計できるだろう。互換性の維持のためにコードが増えてメンテに戦力を取られ、バグが取れませんでした、なんてことはなくなるのだ(少なくともそういう言い訳はできない)。
 +-僕がWindowsの開発者だったら、efg01を見て、きっと「ああなんてことだ、こうしておけばよかったのか」と地団太を踏むと思う。今のWindows開発者がそのように思うかどうか分からないけど、思わなかったらまだまだなんだろうなと思う(正解を見せられて理解できる人は多いけど、正解を見せられても理解できない人も世の中にはいるから)。
 +* こめんと欄
 +#comment
  Next »[4]