ページへ戻る

− Links

 印刷 

GUIGUI01​/memo23 :: OSASK計画

osaskwiki:GUIGUI01/memo23

ぐいぐい01に関するメモ-23 anchor.png[1]

  • (by K[2], 2009.01.11)
  • メモのうち重要な部分をそのうちまとめてまともなページを作る
Page Top

(38) やや一般向けの「ぐいぐい01」の説明 anchor.png[3]

  • これはもともとOSCのセミナーを依頼されたときに使おうと思っているネタ。でも別にwebに書いてあることをプレゼンしてはいけないということはないのだから、ここでばらしてもいいと思う。それに書いているうちに洗練されて、結果的にいいプレゼンになるかもしれない。

  • (1)
  • 今を去ること3年弱つまり2006年ごろ、一部の人たちで Code Golf という「遊び」がはやりました。これはありていに言えば、ある動作をするプログラムをどれだけ短く作れるか、というものです。テーマはいろいろありましたが、一番盛り上がって追求されたのは、Linuxで動作可能なELFファイルで、"hello, world\n"を出力させる最小のプログラム、ということでした。このテーマは特に ELF Golf と呼ばれたほどです。
  • これは一大ブームになり、当時の「web 2.0」というブーム名にあやかって「binary 2.0」と呼ばれたりもしました。そして ELF Golf の結論はアリアリ("Hello, World!")で58Bということになりました。
  • 多くの人はこれで満足したようですが、僕はこれで満足するのは中途半端だと思います。というのは、これは指定されたローダでの最小は何かという話でしかないのです。アプリケーションがこんなに努力しているのに、ローダやAPIはドンくさいままです。もしローダも改良が許されるとしたらどうでしょうか。つまりELFじゃなくてもよくて、汎用的であればどんなフォーマットを採用してもいいのではないでしょうか。それこそ真のx86最小であって、それが一体どのくらいなのか知りたくはないでしょうか?
  • いうなれば、 ELF Golf は小学生の部の最強でしかなく、僕が言っているのは無差別級です。そっちのほうが格段に面白いと思いませんか?・・・普通の人は思わないかもしれませんが、僕は思うのです!・・・ちなみに、この話の先にはx86にすら限定せず、CPUの命令セットまで自由に改良できるスーパー無差別級というのがあるはずです(なんらかのバイトコードとかでもいいと思います)。どうせならそれをやるべきだというのは僕も賛成ですが、一気にそこまでいくと手に負えないので(少なくとも僕は手に負えなかった)、まずはx86最小を極めてからにしました。
  • (2)
  • それで結論から言うと、"hello, world\n"を出力するだけのプログラムは、16バイトということになりました。これは ELF Golf ではアリナシ型に相当するでしょうか。まあ仮に同じ条件にするために出力すべきものを"Hello, World!\n"にしたら17バイトになるでしょう。58バイトとの差し引きは実に41バイトになります。58バイトを目指したことがある人ならわかると思いますが、58バイトに近くなればなるほど1バイト削るのが難しくなります。それをローダを見直してフォーマットを合理的なものに変更するだけで、さらに41バイトも削れるのです。
  • このhelloを実行できるローダを前提に、他にもアプリケーションを作ってみています。というのは、helloだけを小さくできるような仕様なら誰でも作れます。そうじゃなくて、どんなアプリケーションでもみんな一様に小さくなる仕様でないとELFに対して公平とはいえません。
    • 100バイト未満のアプリ一覧
      echo6バイトコマンドライン引数のエコーバック
      chars13バイトキャラクターコード0x20から0x7eを出力(フォント確認などに使える)
      hello16バイトコンソールに"hello, world\n"を出力
      cpy45バイトファイルのコピーと連結とtek圧縮解除
      makefont72バイトテキストデータから8x16型のフォントデータを作る
      calc186バイトコマンドライン計算機(整数演算のみ)
Page Top

こめんと欄 anchor.png[5]


Last-modified: 2009-11-21 (土) 00:00:00 (JST) (319d) by k-tan