鍋あり谷あり

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

返信遅くなりました

返信遅くなりました。すいません。
で。

コメントいただいたリンク先は、しっかり読んでいるわけではないんですが
http://channel9.msdn.com/ShowPost.aspx?PostID=68302
によると

However, we do have around some assembly code. Like a kernel written in C, our C# kernel needs assembly code to handle the lowest part of the interrupt dispatch on the x86. But once the assembly code has finished, it dispatches directly into compiled C# (no C). BTW, there is some C code in the system, primarily for the debugger stub.

だそうです。
「やっぱり C/C++ が要るのか」とも「なくても書けるんだ」とも思える、微妙な感じです。
というかそもそも。CLRのないところで動くように改造されている C# なので、低レベルな処理を書いているときは、GCが使えないという制限付きのC#なのかな、とも思います(おおざっぱに読んだ範囲ではよくわかりませんでした)。


GCの有無はランタイムライブラリの違いに過ぎないといわれますと、丁度 80386だったころ、C言語で double を使ったときの動作を思い出します。
80387 が乗っていなければ、浮動小数点の計算は整数演算の組合せでやる必要があります。
その計算はC言語で書けるような気もしますが、それを書いているC言語は、double 型の変数が使えないという意味ではC言語ではないようにも思います。
double のないC言語は存在しうる気がするけど GCのない java はありえない気がするとか、いやjavaは と比べても意味ないかとか、いやいいのかとか。
いろいろ考えているうちにどんどんわからなくなってきてしまいました。勉強不足です。とほほ。

あと。デフォルト引数の話。(と、ここで文体が変わり)
現在の使用に落ち着いた理由の一部には賛成するんだが、あんまりだと思う。
case ラベルや template 引数に使えるような、コンパイル時に確定する値に限って二度書いてもいい、というルールが費用対効果の点で優れていると思う。
もちろん、関数スコープで違う値を書いたらエラーになるべきでもある。