Top > C言語
Table of Contents

オススメセット

Microsoft系

C++とC#の違いについて

C#はマイクロソフトがJavaに対向するために作った言語であり、CやC++との互換性はない。
C++はCを拡張した言語であり、C言語に対して下位互換性をもち、C言語で作られたプログラムはC++上ですべて動く。

C++

  • 手続き型プログラミング、オブジェクト指向プログラミング、ジェネリックプログラミングなどが可能なマルチパラダイムな言語。
  • 元々C言語を拡張したものなので、構文は基本的にC言語と同じ。
  • C言語(C89)との下位互換性がある程度あるので、C言語で書かれた資産を流用できる。
  • コンパイル型言語
    実行速度に気を使った工夫がされていることもあり、結構高速に動作するプログラムを生成できる。
  • マルチパラダイムな為か、言語仕様がかなり大きく複雑。C言語由来の危険さ(メモリアクセス周り)を抱えている。また特定のパラダイムで捉えた場合、色々と問題点が指摘できる(オブジェクト指向言語としては、ガベージコレクタが無いので資源管理(例えばnewとdelete)が難しい。ジェネリックとしては、C++のテンプレートの実装はイマイチ)。使いこなせればとても強力な言語だが、全てを使いこなせる人はなかなかいないのが現状。
  • かなりメジャー。最近では組み込み開発でも使われることがある。

C#

  • オブジェクト指向プログラミング言語。限定的にポインタやビット演算などの低レベル処理が可能だったりジェネリックに対応してたりするが、基本はオブジェクト指向。
  • Microsoftが.NET用に新しく作った言語で、C++とJavaが混ざったような構文(どちらかというとJava寄り)。
  • C言語C++との互換性は無い。
  • .NET Frameworkでは、コンパイルしてCIL(共通中間言語)のコードを生成しておき、プログラム実行時にCILのコードをJITコンパイラに噛ませている。Javaと良く似た仕組みで、コンパイル型とインタプリタ型の中間と言える方法。
    最近のJava同様、高速化の為の工夫がされているので、プログラムの実行速度はそれほど遅くはないはず。
    ちなみに.NET FrameworkはCILのコードの実行環境(Java VMみたいなもの)を兼ねているので、.NET Framework又はその互換環境(Monoなど)がないとプログラムが動かない。でも実行環境さえあればどこででも動く。
    但し、C#の言語仕様にはコンパイラが生成するコードについての規定はないので、CILじゃなくてネイティブコードを生成するコンパイラを作っても問題ない。
  • C++ほど複雑ではなく、学びやすい。またエラーを発生させにくいように色々と工夫されている。
  • いまいちマイナー感を払拭できない。それなりに良くできた言語だと思うんだけどなぁ。

.NETとは

Microsoftの次世代インターネット戦略のことです。ちなみに.NETに対応したプログラムの開発・実行環境が.NET Frameworkです。
C#は元々.NETの普及推進の為に新たに作られた言語で、代表的な処理系はMicrosoft Visual C#です。C++自体は.NETとは無関係ですが、C++を使って.NET対応のプログラムを開発する為の処理系としてMicrosoft Visual C++ .NETがあります。

.NET FrameworkはCILのコードを実行します。その為.NET対応の処理系では、プログラムをコンパイルするとCILのコードが生成されます。
なので、同じC++の処理系でも、Visual C++ .NETではネイティブコードではなくCILのコードを吐きます(正しくは、どちらも生成可能)。

ちなみにC++もC#も標準化された規格が存在します。
特にC#については誤解されていますが、Visual Basicとは違ってECMAやISOによる標準規格が存在します。その意味では「Windowsで動くプログラムしか作れない」とか「.NET Frameworkないしその互換環境がないと動かない」というわけではありません。もっとも、実際にネイティブコードを生成するC#のコンパイラがあるかどうかは、調べてみないと分かりませんが。

参考

Tag: プログラミング


リロード     ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Sun, 26 Dec 2010 19:10:50 JST (2310d)