C#.netって何?

高木です。おはようございます。

日々、私のところに回ってくる案件情報を眺めていると、奇妙奇天烈な用語、表現などに多々出くわします。
「一人称」はその筆頭で、以前書いた「一人称で仕事ができる?」は、もうかなり時間が経っているにもかかわらず、いまだに多くのアクセスを集めています。
今回もそんな奇妙奇天烈な用語を取り上げてみたいと思います。

今回取り上げるのは「C#.net」です。
表記には揺れがあるようで、「C#.NET」や「C#.Net」なども見受けられますが、おそらくは同じ意味だと思います。

「C#.net」とは別に「C#」という表記もよく見ます。
この二つはさすがに別のものを表しているように思います。
けれども、明確に区別されてるようにもみえず、また、それぞれが具体的に何を意味しているのかもわかりません。

困ったので先日、杉山に尋ねてみました。
すると、あっさりと答えが返ってきたのです。
こんなことなら、もっと前に尋ねておくべきでした。

杉山いわく、「C#」は言語の名前であり、「C#.net」はマイクロソフトが実装した「C#」の処理系だということです。
私はすかさず追求しました。
それなら、「C#.net」などといわず、「Visual C#」と呼べばいいのではないのか? と。
杉山はその疑問に対しても即答してくれました。
「Visual C#」は統合開発環境なども含むが、「C#.net」はコンパイラ(とライブラリ)だけの翻訳処理系であるとのことです。

なるほど! これで完全に合点がいきました。

案件情報などで「Visual C#」ではなく、あえて「C#.net」と書いているのは、Visual Studioを使うのではなく、Windows SDKのcscコマンドをコマンドラインで使うということだと理解しました。
あるいは、SharpDevelopのようなサードパーティ製の統合開発環境からcscを呼び出すのかもしれません。
もしかすると、NetBeansとかから強引にcscを呼ぶのかもしれませんね。
デバッガについても、Visual StudioなんかなくてもWinDbgがあれば何の問題もありません。

なぜ、Visual Studioを使わないのかには疑問が残ります。
これはあくまでも想像に過ぎませんが、.netmoduleを生成するのはVisual StudioのGUIからではできないので、あえてコマンドラインから使っているとか、そういうことかもしれませんね。
SharpDevelopを使っているのであれば、Boo言語と連携したいとかそんな理由があるのかもしれません。
あるいは、C#とVisual Basicなどのコンバータがあるのも便利なので、そっち方向のニーズがあるのかもしれません。

もうひとつ疑問があります。

Visual Studioに含まれているC#処理系であっても、XamarinのC#コンパイラはmono由来のものなので「C#.net」ではないのでしょうか?
さすがの杉山もそれについてはわからないといっていました。

ところで、C#の場合は処理系まで特定して「C#.net」とするのであれば、Javaであれば「javac」とか「ecj」とか(あるいはそれら同義の呼称)で呼ばなくてもいいのでしょうか?
Rubyの場合でも「MRI」とか「JRuby」とか処理系を明示しないといけないのではないでしょうか?
他の言語についても同様です。

いずれにせよ、私にはなぜこんなわかりにくい表記をするのかがまったく理解できません。
既得権益を守るために儀礼を複雑化して権威付けするような、そういう意図がうかがえるのですが、私の思い過ごしでしょうか?
そうではないなら、単なるコミュニケーション能力の欠如としか思えません。
まさか、よくわからないまま、いい加減な用語を使っているようなことはないでしょうねえ。