ぐいぐい01に関するメモ-23
- (by K, 2009.01.11)
- メモのうち重要な部分をそのうちまとめてまともなページを作る
(38) やや一般向けの「ぐいぐい01」の説明
- これはもともとOSCのセミナーを依頼されたときに使おうと思っているネタ。でも別にwebに書いてあることをプレゼンしてはいけないということはないのだから、ここでばらしてもいいと思う。それに書いているうちに洗練されて、結果的にいいプレゼンになるかもしれない。
- (1)
- 今を去ること3年弱つまり2006年ごろ、一部の人たちで Code Golf という「遊び」がはやりました。これはありていに言えば、ある動作をするプログラムをどれだけ短く作れるか、というものです。テーマはいろいろありましたが、一番盛り上がって追求されたのは、Linuxで動作可能なELFファイルで、"hello, world\n"を出力させる最小のプログラム、ということでした。このテーマは特に ELF Golf と呼ばれたほどです。
- 参考: http://binary.nahi.to/b2con2006_sato.pdf
- ゴルフの由来は、できるだけ少ない打数で目的を達する、というところが似ているからなんだと思います。
- これは一大ブームになり、当時の「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バイト未満のアプリ一覧
echo 6バイト コマンドライン引数のエコーバック chars 13バイト キャラクターコード0x20から0x7eを出力(フォント確認などに使える) hello 16バイト コンソールに"hello, world\n"を出力 cpy 45バイト ファイルのコピーと連結とtek圧縮解除 makefont 72バイト テキストデータから8x16型のフォントデータを作る calc1 86バイト コマンドライン計算機(整数演算のみ)
- 100バイト未満のアプリ一覧
Counter: 313,
today: 2,
yesterday: 1
初版日時: 2009-01-11 (日) 10:16:55
最終更新: 2009-11-21 (土) 00:00:00 (JST) (319d) by k-tan
|
ぺージ情報 | 閲覧可 | 編集可 | |||
---|---|---|---|---|---|---|
ぺージ名 : | GUIGUI01/memo23 | グループ : | すべての訪問者 | グループ : | すべての訪問者 | |
ページ作成 : | k-tan | ユーザー : | すべての訪問者 | ユーザー : | すべての訪問者 | |
ページ別名 : | 未設定 |