* 「30日でできる! OS自作入門」のサポートWikiへようこそ
-(by [[K]], 2008.10.31)
~
~
-通称 hrb-wiki-uft (はりぼてうぃきゆーてぃーえふ)
* 「高密度プログラム研究所」にようこそ!
-(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などはかならず成功すると仮定していいです。
--これはそういうプログラミングスタイルを推奨したいというわけではなく、実際はそれらのチェックのついたラッパー関数などを使えばいいと思いますし、とにかく条件をそろえないと本質ではないところで迷ってしまって楽しめないと思うからです。

** このwikiの当初の目的
-韓国語版の「30日でできる! OS自作入門」では[[OS-Wiki:http://community.osdev.info]]の代わりに http://osguru.net/ が指定されているものの、途中までしか内容が準備されておらず、読者はとても不便な思いをしているのではないかと思いました。これを解決するためにosguru.netを読者の人に編集してもらおうと思ったら、一般の人のアカウント作成が禁じられているようで、編集できません。
 より適切なURL  http://osguru.net/index.php/OS_구조와_원리_:_OS_개발_30일_프로젝트
--wikiの仕様によりリンクが作れず上記のようなテキストで表示しています。コピー&ペーストでURLを入力すれば該当ページにいけます。
-これでは状況はいつまでも改善しないので、ここに多言語対応のwikiを用意し、読者の人たちに自由に使ってもらうことにします。ただしこれは一時的なものです。もし韓国国内に正式なサイトが有志の手によって設置された場合、このwikiはその役目を終えて、メンテナンスを終えることとします。
-もし遠い将来他の言語にも翻訳されることがあったら、そして不幸にもまたサポートが十分ではなかったら、そのときはこのサイトをそのまま使うことにするつもりです。
** ルール
-1.このサイトではほとんどルールがありません。理由は簡単で、管理者の[[K]]には韓国語が分からず、したがって適切な内容かどうかを判断できないためです。だから原則として誰がどのページをどのように作成・編集してもいいです(日本語ページについても同等の緩さを適用します)。みんなで協力して使ってください。「荒らし」に対してもみんなで対処してください。誰かが管理者になってその人がメンテするということでもいいです。
-2.このwiki内に個人ページを作って好きな言語で自己紹介を書くことができます→[[members]]。韓国語版の読者どうしで、韓国語で意見交換することもできます→[[KOR_impressions]]。
-3.ページ名はC言語の変数名として許されるものだけとします。違反した場合は予告なく削除することがあります。
-4.サーバーの都合により、ページが長くなりすぎると編集も表示もできなくなると思うので、注意してください。
-このページは日本語限定です。もし韓国語版のFrontPageが必要ならKOR_FrontPageを作成してください。
**目次
-[[members]] : 個人ページ一覧
-[[impressions]] : 簡易掲示板
-[[KOR_index]] : 目次(韓国語コンテンツ)
-[[JPN_index]] : 目次(日本語コンテンツ)
----
-以下工事中です


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS