雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
4: 2007-03-28 (水) 23:53:14 ソース バックアップ No.4 を復元して編集 5: 2007-04-07 (土) 00:12:06 ソース バックアップ No.5 を復元して編集
Line 42: Line 42:
-「おぉ!以外。せいぜいCかと思ったのですが・・・。なぜですか?」 -「おぉ!以外。せいぜいCかと思ったのですが・・・。なぜですか?」
-「だって楽でしょ?。そのほうが」 -「だって楽でしょ?。そのほうが」
 +
 +
 +Kタンは「高級言語がキライなので悪口を言う」と思っているのならそれは大間違いですよ。Kタンは「少なくともOSを作る上では不便のほうが多い」と言っているだけです。KタンはOS作成関連の作業やツール作成ばっかりやっているのでそういう発言が目立つだけです。
 +
 +
 +
 +
 +
 +
 +
Line 65: Line 75:
-COLOR(blue){さらにこんな質問。「あそこに2mmだけクギが出ている。あっちでは4mmくらい木が出っ張っている。修正してほしいが当然電動ハンマーや電気カンナで削るのだろう?」} -COLOR(blue){さらにこんな質問。「あそこに2mmだけクギが出ている。あっちでは4mmくらい木が出っ張っている。修正してほしいが当然電動ハンマーや電気カンナで削るのだろう?」}
-同じく他の人は知りませんが、オイラなら「人力で簡単にできることを無理に電気でやるのはアホである」 -同じく他の人は知りませんが、オイラなら「人力で簡単にできることを無理に電気でやるのはアホである」
 +
 +
 +まあ「アホである」というのはちょっと言いすぎかもしれませんが、意味は解りますよね?。つまりなんらかの作業をする場合、''先に道具を決定しておく''というのは本末転倒ということなのです。上記の例え話をさらに進めると、
 +
 +
 +-太さ5mmの木の棒を切りたいが、カッターナイフ・ノコギリ・電動ノコ・レーザーカッター。どれを使うと一番早くて便利?
 +
 +
 +というふうに、まず作業があって、その作業の実行に一番楽で正確で早いものを考えてから使うのが正解ですよね?。これを、
 +
 +
 +-とにかく電動ノコギリだ。電動ノコギリを使うのだ!。さあ!作業をもってこい!
 +
 +
 +・・・これはどう考えてもおかしいですよね?。(初めてすごい機械を買ってもらった子供じゃあるまいし)
 +
 +
 +最初の、''まずその「何言語がいいか」という発想を捨てることが正解です''というのはこういう意味なのです。
 +
 +
 +COLOR(blue){''割り箸削りから大木切り倒しまで全てこなせる便利な工具''など存在しえないのはわかりますよね?。それと同じこと。万能で''これさえ知っていればなにもいらない''なんていう言語もまた存在しません。ましてや、OSを作るとなると・・・}
 +
 +
 +COLOR(red){もちろん、習作や技術的なチャレンジ・実験などでこれを行うことにはりっぱに意味がありますよ。ちゃんとそう解っていてあえて行うのならば。誤解なきように。}
 +
 +
 +
 +**ではKタンはなぜアセンブラとCを使ったのか? [#oec7cbfd]
 +
 +OS自作入門のはりぼてOS。これは主にアセンブラとC言語で作られています。(OSASKなんかもそうですね)。では、なぜアセンブラ+Cなのでしょうか?。VB+JAVAではダメでしょうか?。C++だけで作ることはできないでしょうか???。
 +
 +
 +まず結論から言うと、
 +
 +-アセンブラなしでOSを作ることは、少なくとも''現在では''できない
 +
 +となります。理由はとても簡単で、
 +
 +-アセンブラ以外にレジスタや周辺機器にアクセスできる言語がないから
 +
 +です。(もしあればきっと使われていることでしょう)
 +
 +
 +COLOR(red){え?LinuxはCで書かれているって?。ほんとにLinuxのソースやブートの仕組み見てみました?}
 +
 +
 +そしてCを使っている理由ですが、これは本にちゃんと書いてありますよ?
 +
 +-1番説明が少なくて済むので(読むほうも少ない説明で済む)楽だから
 +
 +
 +です。それだけのことです。もしC++が同じように少ない説明で済む言語なら、もしかしたらKタンもC++で書いていたかもしれませんよ?
 +
 +
 +COLOR(red){ウソだ!オレはC++のほうが簡単に感じた!}
 +
 +COLOR(blue){人間は最初に触れたものを良しとする傾向があります。Machintoshを最初に触った人は「マックは簡単だ」と言い張り、Windowsから入った人は「マックは不便だ!」といいます。英語は難しい、いや日本語のほうがむずかしい。・・・どっちも、その国で生まれ育った人なら5歳児でもしゃべれます。それだけのことです。なんなら試しに、はりぼてOSのCの部分を全てC++に置き換えてみてください。そしてその解説を、700ページ以内に収めることができるのなら、きっとKタンも「もっといい方法があった。」と認めることでしょう。}
 +~~
 +
 +COLOR(blue){余談ですが、bayside氏という方がこの''C++による実装''を実現されています。[[(ここです):http://haribote.org/index.php?bayside]]。間違えないでほしいのは、氏は少なくともはりぼてOSのアセンブラを読み、同じくCで書かれた部分を読み解き、さらにそれをC++に置換できるという、非常に高いレベルの実力を持った方です。C++しかわかんないなんて方ではないので誤解なきように。}
 +
 +
 +**他の言語はダメなの? [#i4e02d0e]
 +
 +とんでもありません。何度も言いますが、向き不向きがあるだけです。逆にそこまで一つの言語にこだわるという理由が私にはわかりません。
 +
 +
 +上の大工さんの例の通り、「どうしてそこまでなんでもかんでも電動ノコギリでやりたいの?」と質問したいくらいです。
 +
 +
 +・・・まさかと思いますが、単に''「他の言語を勉強するのが面倒くさいから」''じゃないでしょうね?
 +
 +
 +これまで書いた通り、アセンブラをはずすことはまずできません。そうなると、そのアセンブラで書かれた部分とうまく、そしてできるだけ簡単に連携できる言語が必要になります。逆に言えば、JAVAだろうとC++だろうとD言語だろうと、それさえ出来れば決して''できない''ことはないはずです。
 +
 +
 +・・・ただ、一つ言えること。おそらくネット等ではC言語がもっとも豊富に解説されている言語だろうと思います。そのC言語ですら、アセンブラとの連携の方法を探すのは一苦労でした。
 +
 +私はJAVA等、他の言語についてあまり詳しくないのですが、どうでしょう?。容易にアセンブラ連携ができるのでしょうか?。そしてそのための解説やサンプルが見つかるのでしょうか?
 +
 +
 +**まとめ [#b4d8c63d]
 +
 +私は別にC言語に詳しいわけではありません。(っていうか、大したスキルは持ってません)
 +
 +
 +逆に、そんな初心者に毛の生えた程度の私だから言えます。''結局はアセンブラ+C言語が一番楽で早くてすぐに学習できるのだ''と。
 +
 +
 +JAVAやD言語等の他の言語。興味はありますが、それらをアセンブラと自由に連携できるレベルまで勉強しているウチに、はりぼてOSは出来上がってしまいますよ。きっと。
 +
 +bayside氏のように高いスキルを既に持っている人がやるのならともかく、「初心者がJAVAを勉強しながらOSを作る」のはとても困難だと考えます。
 +
 +
 +そんな困難を承知でがんばってみようという方。そりゃあもうすばらしいです。すごいことです。(イヤミとかじゃないですよ念のため。マジにすごいと思う)
 +
 +
 +・・・でも、「僕はJAVAを勉強してやっと出来るようになってきた。他の言語なんて勉強したくない。面倒なCなど勉強せずにすませたいのでJAVAで!」なーんて考えているのなら、''「やめたほうがいいよ。倍時間がかかるから」''と進言したいですね。