鍋あり谷あり

テーマを決めずに適当に書いています。

返信

http://d.hatena.ne.jp/Nabetani/20051203/c1134603533
への返信。
sumii さん、コメントありがとうございます。
で。

なんとなく話がかみ合ってないような気がするんですが、あまりそのことは気にせずに書きますと。
私が気になるのは、ある言語にもともとない機能(低レベルメモリアクセスプリミティブとか)が追加されているかどうかではなく、言語の一部であるはずの機能(自動メモリ管理とか)が削除されているかどうかです。
言語X に、追加機能が付加されていてもそれは言語X であるような気になりやすいと思います。GCのついたC++、return のあとにどこに戻るか行番号を指定できる BASIC*1なんかがその例です。
逆に、言語X に、本来あるはずの機能が削除されていたら、それはあまり言語X であるような気がしないように思います。GCのないC#、double 型やfloat型をサポートしないC言語、なんかを思い浮かべてます。

とはいえ。
GCがある言語でOSを書けるかどうかという問題は、先日書いたとおり、私の手には余るというのが私の結論です。GCのある言語の経験もほとんどなく、OSを書こうと思ったこともない私は、印象と先入観と想像でしか語れません。

それとは別に。
確かに、C言語はchar が 8bit とは限りませんし、違う型のポインタでメモリをアクセスした結果は保証されてません。GCのある実装も存在するでしょう(私の記憶が確かなら、マイクロソフトCLR上で動くC言語があったと思います)。
というわけで。言語仕様が保証する内容だけを元にC言語でOSを書けるか、と言われたら、NO で間違いないと思います。
しかし。処理系依存実装依存の部分を全て含んでC言語の処理系があるわけです。OSを書くのに向かない処理系のC言語もあるでしょう。
C言語は、OSを書くのに向いているような処理系たり得るが、D言語C#はそうではない、というのが私の印象です。
で、数行前の「とはいえ」に戻ります。

余談ですが。
極端に小さな処理系(自走しない掃除機なんかを想像してます)でもない限り、GCはあった方が良さそうだと思っています。DOM オブジェクトとメモリリーク: Days on the Moonなんかを読んで、その思いを強くしました。

*1:n88 BASIC がそうでした