「高密度プログラム研究所」にようこそ!

  • (by K, 2015.11.24)

はじめに

  • Kは以前より、高密度なプログラムに強い興味を持っていました。高密度なプログラムというのは、必要な機能を損なわない範囲で徹底してサイズにこだわったプログラムのことです。
  • 今のご時世、何かプログラムを作りたいと思ったら、そのプログラムは並みのプログラマなら誰でも十分な時間を掛ければできます。私はこれを「ただ動くプログラムを書くだけならもはや誰でもできる」と言います。差が出るのは「早く完成させられるかどうか」「高速に動作するように作れるかどうか」「バグを少なく作れるかどうか」「読みやすいソースコードにできるかどうか」などだと思います。
  • でも上記に挙げたことはもう何年も前から意識されており、私がことさら強調する必要はないと思います。ここで私はあえて「どこまで小さく作れるか」ということを問いたいのです。もちろんこれも何年も前から意識されていますが、十分ではないと思いますし、私や他の人たちが寄与できる余地は大きく残されているように思います。
  • 高密度なプログラムなんぞ何の役に立つのかと一笑に付す人もいるでしょう。私はそういう人を無理に説得しようとは思っていません。どうぞより有意義なことを研究してください。でもあなたはそもそもどこまで小さくできるかの限界を知っていますか?それを知らずして、役に立つとか立たないとか議論できると思いますか?
    • 小さなプログラムそのものに意味がなかったとしても、もし極端に小さくする余地があったとしたら、そこから得られる考察は非常に有意義になる可能性があるとは思いませんか? なぜこんなにも小さくできたのか。その差である「ムダ」は何に起因するのか。最初から小さいプログラムを生成できないのか。
    • 削って削って、さらに削って、それでも削られずに残ったもの、それこそがそのプログラムの本質ではないでしょうか。本質のなんたるかを知ることが全くの無益だと笑い飛ばせるのだとしたら、よほどの天才か、もしくは大ばか者でしょう。

おもな流れ

  • (1) Kが毎月お題や使ってもよいプログラミング言語をこちらのサイトで提示。
    • (例)円周率を計算して10進数で100桁以上を表示してください。
  • (2) 参加メンバー各位は知恵を絞って、それをできるだけ小さいプログラムで達成する。
  • (3) 2週間後には、Kより回答例が提示される。でもそれは説明しやすいプログラムであって、小さいプログラムではない。
    • これが提示されるのは「自分で一から書けるプログラマ」を極端に有利にしないためです。世の中には改良に限定すれば達人レベルという技術者が存在し、彼らにも是非協力してもらいたいのです。
    • 圧倒的に小さくなった後の(一見すると)不可解なプログラムだけを収集するサイトになりたくないのです。サイズは小さくないけど分かりやすいコードも載せたいです。
    • 回答例はいつもC言語で提供します。
  • (4) さらに2週間後に、メンバー各位による発表会を行います。これに先立って、メンバーは何バイトまで小さくできたかをwiki上でアピールしてもらいます。そして部門ごとに上位3名くらいまでを発表会に「招待」させていただきます。招待された人は発表会で発表してもらう代わりに、交通費を清算させていただきます。
    • また招待された人もそうではない人も、発表後にはピザなどの軽食を楽しみましょう。参加費は無料です。
    • 上記を実現するために「サイボウズ株式会社」にスポンサーになってもらう予定です。

補足

  • 使ってもよいプログラミング言語が明示されるのは、お題に合わせて都合のよいプログラミング言語を新規開発されてそれでエントリーされたらかなわないからです(円周率計算命令を持つ新言語を作られるとか)。・・・純粋にこれを阻止したいだけなので、○○言語でもOKにしてほしいというものがありましたら、教えてもらえればこちらでどんどん登録し、教えてもらってから1ヶ月後に解禁します。便利なライブラリとかも、教えてくれれば同じように登録され1ヶ月後に解禁されます。
  • 基本的には言語やOSなどを限定せずに無差別に優劣を競います。これにより高密度プログラムの開発に有利な言語や環境がおのずと明らかになるはずです。それも私の意図していることです。
  • 競争はバイナリかソースコードかを問いません。1ヶ月以上前に登録された圧縮ツールで圧縮したものであっても構いません。とにかく小さければいいのです。そのプログラムが本来持っている情報量に興味があるのです。ただし圧縮したものの場合、展開時に可変パラメータを入れなければいけないとか、ファイル名情報を使うなど、そういう情報量の追加は許しません。
  • OSECPU-VMを含めるといずれの分野でも圧勝が予想されますし、そうじゃなくても第一世代OSASKや第二世代OSASKや「はりぼてOS」は有利になりそうなので、これらは階級を分けて比較することとします。そうすれば普通のプログラマでも楽しんで参加できるでしょう。
  • ソースコードをコンパイルすると警告がたくさん出るとか、そういうのは気にしません。出てきたバイナリが期待通りに動くのであれば何でもよいです。また意図しない意地悪な入力については、明示されていなければ「ない」と仮定してエラーチェックを省いて構いません。fopenやmallocなどはかならず成功すると仮定していいです。
    • これはそういうプログラミングスタイルを推奨したいというわけではなく、実際はそれらのチェックのついたラッパー関数などを使えばいいと思いますし、とにかく条件をそろえないと本質ではないところで迷ってしまって楽しめないと思うからです。

目次

  • thm0001: テーマ#0001: 円周率100桁の表示
  • members: 個人ページの一覧、参加者登録所
  • preconditions: 使ってもよいツール、OS、ハードウェア環境など
  • impressions: 簡易掲示板
  • thm_next: 次回のテーマを相談するところ

こめんと欄

  • このページにはこめんと欄がありません。もしこのページの話題について感想・意見があれば、impressionsにお願いいたします。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-09 (火) 16:53:29 (1216d)