VBとC#の差は言語が違うということだけでしょうか?

タグの編集
投稿者 だいじゃ  (社会人) 投稿日時 2010/8/11 21:55:07
実行や動作速度なども変わってくるのでしょうか?
C言語は高速と聞いたのでやはりC#のほうが速いのでしょうか?

投稿者 まだまだ  (高校生) 投稿日時 2010/8/11 22:12:42
最終的に両方ともMSILに変換するので速度は同じと聞いたことが有ります。
投稿者 だいじゃ  (高校生) 投稿日時 2010/8/11 22:18:27
やはり言語の差だけなのでしょうか。
投稿者 よねKEN  (社会人) 投稿日時 2010/8/11 22:36:15
まだまださんのおっしゃるようにVBもC#もコンパイル後は、
MSIL(CIL、ILとも呼ばれることがあります)という中間言語にコンパイルされます。

VBで書いてもC#で書いても結果として出力されるMSILの内容が同じであれば、
まったく同じ性能になる、ということになります。

ただし、VBとC#とは言語仕様が違いますので当然コンパイラも別です。そのため、
似たようなソースコードをコンパイルしたとしても、同一のMSILになるとは限りません。
とはいえ、ほぼ似たようなMSILにコンパイルされるので、ほとんど差はでないでしょう。

後、VBとC#の開発環境は別々に開発されているので、細かい点では、
それぞれに優れたところそうでないところはあります。
投稿者 だいじゃ  (高校生) 投稿日時 2010/8/12 14:39:25
返答ありがとうございます。

VC++は高速なのでしょうか?
投稿者 ENIAC  (社会人) 投稿日時 2010/8/12 20:43:10
本で読んだだけですがVBやVC#はコンパイルされるとMSILというものになり、それを.NetFrameworkの機能(ランタイム?)が解釈して実行されるようです。
それに比べC++はコンパイルされるとOSが直接解釈できるマシン語になります。

つまりVBやC#はコンパイルしてもOSが直接解釈できるものにならず、二度手間のようになるようです。
もちろんOSが直接実行できるC++のほうが早いことになります。

私も初心者なのでたぶんどっか間違えてます、教えてください;;;
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/8/12 21:14:12
> コンパイルされるとMSILというものになり
ですね。

> それを.NetFrameworkの機能(ランタイム?)が解釈して実行されるようです。
その前に、JIT コンパイルが行われてネイティブコードに変換されています。
http://msdn.microsoft.com/ja-jp/library/ht8ecch6%28VS.90%29.aspx

通常、この処理は自動的に行われますが、事前に ngen.exe を使うなどすれば、
プロセッサ固有のマシン コードを最初から用意しておく事も可能です。
投稿者 流れ者  (社会人) 投稿日時 2010/8/17 23:42:28
こんばんは。

ちょっと横道にそれますが、VB.NET(.NetFrameworkを使用したVBです。VB2008やVB2010等が該当します)とC#が.NetFrameworkを利用しているのは、ネイティブコードと深い関係があります。
プログラムはコンパイラによって”特定のOS上で”最適に動作するネイティブコードに変換されます。
ですので、あるOS上でコンパイルしたプログラムが別のOSでは正常に動作しないことがありました。

これを解決したのが、.NetFrameworkです。.NetFrameworkがMSILを随時そのOSに最適なネイティブコードに変換してくれるので、プログラマは、OSをそれほど気にすることなくプログラムを作成することができます。極端な話、MacやUNIX用の.NetFrameworkがあれば、Windowsで作成したプログラムをMacやUNIX上で動作させることが可能です。たしか、不完全なものですが、Mac用の.NetFrameworkが開発されたと記憶しています。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/8/18 02:53:41
> VB.NET(.NetFrameworkを使用したVBです。
「w」だけ全角で書かれているのが気になりますが、これは .NET Framework の事ですよね。


> Mac用の.NetFrameworkが開発されたと記憶しています。 
ですね。正確には .NET Framework とは呼べないかも知れませんが。


.NET Framework とは共通言語基盤(CLI)の実装例の一つであり、他にも幾つかの実装が存在します。

たとえば Microsoft 自身による CLI 実装としては、.NET Framework 以外にも .NET Compact Framework が
存在しており、Windows 以外に Windows CE や Xbox 360 でも利用可能です。
また、それよりもさらにコンパクトな、.NET Micro Framework という実装もあります。

さらに、SSCLI(シェアードソースCLI)というソースコード付きの CLI 実装も公開されています。
SSCLI はコンソールアプリのみのサポートとなっていますが、Windows だけではなく、
Macintosh、FreeBSD、Linux にも対応しています。

このほか、少し毛色の違う実装として Silverlight や XNA Framework などもあります。
Silverlight も Macintosh に対応していますね。


Microsoft 以外による実装としては、DotGNU Portable.NET や Mono Project が有名です。
特に Mono のサポートは、Mac OS X、Windows、Linux、FreeBSD、UNIX、Solaris と
多岐に渡っており、ASP.NET もサポートしています。さらに、Mono の派生プロジェクトでは、
iPhone や iPad 対応の MonoTouch や、Linux 上で Silverlight を動かすための Moonlight などがあります。

あとは .net by au という、au 携帯電話の BREW アプリ上で動作する CLI 実装もあります。
投稿者 流れ者  (社会人) 投稿日時 2010/8/18 10:16:43
こんにちは。

>> VB.NET(.NetFrameworkを使用したVBです。
>「w」だけ全角で書かれているのが気になりますが、これは .NET Framework の事ですよね。
はい、そうです。コピー&ペーストをしたので、気づきませんでした。

共通言語基盤(CLI)が.NET Framework以外にも多数存在したとは、私の勉強不足でした。
勉強になりました。
投稿者 YuO  (社会人) 投稿日時 2010/8/18 13:26:29
VBとC#の細かい違いがありました……。
関連URLの方に書きましたが,初期化の順序がちょっと違います。
コードの移植時に,稀に影響するかもしれません。