ややこしい「C」とその派生言語たち
こんには、高木です。
マニアックな技術ネタばかりだと、社内でも何のことかさっぱり分からないと言われるので、今回はちょっと易しい内容にしたいと思います。
学生とか営業とか顧客など、ソフトウェアの技術者ではない方から、CとC++とC#はどう違うのかといった質問をよくいただきます。
今回はこの話題について書いてみたいと思います。
といっても、具体的な文法とかを書いてもしかたがないので、主に営業担当者にとって有益であろう内容を目指すことにしましょう。
まずCですが、この言語が最も多く使われるのは組込み系の開発です。マイコンのプログラムの多くはCで書かれます。
Cはかなりハードウェア寄りの言語で、組み合わせればすぐにアプリケーションができてしまうような気の利いた部品はほとんど無い代わりに、8ビット程度のローエンドのマイコンから64ビットのコンピュータまでプログラミングすることができます。
次にC++ですが、この言語はCと密接に関わり合いながら、ともに成長してきました。基本的にはCに拡張機能をふんだんに盛り込んだ仕様になっています。
1990年代の後半から2000年代の前半にかけては、Windowsのデスクトップアプリケーションの多くはC++で書かれていました。
現在はWindowsのアプリケーションをC++で書く機会は減りましたが、従来はCで書かれていたマイコンのプログラムも、近年ではC++で書かれることが多くなっています。
ホビー用途でもよく使われるArduinoは8ビットマイコンですが、C++でプログラミングされています。
よく、C++とVC++とVC++.netはどう違うのかと聞かれることがあります。
C++というと、これは基本的には国際規格で仕様を定められた標準C++のことを指します。
ところが、VC++というのはVisual C++のことで、要するに製品名です。
言語としては、基本的にはC++と同じですが、マイクロソフト独自の方言と独自のライブラリ(要はソフトウェアの部品です)があります。
また、この開発環境ではCも使うことができます。
Visual C++についてもう少し詳しく書くことにしましょう。
マクロソフト独自のライブラリがあると書きましたが、それも一種類ではないのです。
1990年代から使われているMFC(= Microsoft Foundation Classes)は、最近でもどんどん新しい機能をサポートしてますが、新規開発でMFCを使うプロジェクトはそうありません。多くは昔からあるソフトウェアのメンテナンスということになるでしょう。
2000年代に入って.NET Frameworkが登場しましたが、これに対応したC++の独自拡張がC++/CLIです。VC++.netというのは、もしかするとC++/CLIを指しているのかもしれません。
Windows 8以降、従来のデスクトップアプリ以外にストアアプリが現れました。厳密な話はともかく、このストアアプリの開発に使う独自拡張もあって、これはC++/CXといいます。C++/CLIとC++/CXはパッと見は見ていますが、全く別のもので互換性もありません。
VC++やVC++.netと省略名に正確に対応するものはなく、本当のところは何を指すのかは、それを言っている人に確認する以外にはありません。
Objective-Cという言語もあります。
これはCにオブジェクト指向プログラミングのための仕様拡張を行ったもので、本来は汎用言語なのですが、現在では実質的にMac OSXとiOS(iPhoneやiPad用のOS)専用の開発言語になってしまっています。
Objective-CのCの部分がC++になったObjective-C++というのもあります。こちらも実質的にMac OSXとiOSの開発言語です。
C#という言語もよく聞くと思います。
名前からはC++やObjective-Cのように、Cの仕様を拡張した言語のように思うかも知れませんが、実際には全く別の言語でCとの互換性もありません。
このC#はもともと.NET Framework用の言語として開発されたもので、Delphiという開発環境(言語としてはObject Pascal)の影響を強く受けています。それにJavaのテイストを加味したようなものです。
現在、Windowsの開発言語としては最も多く使われていますが、Windowsの世界から一歩外に出ると(皆無とはいいませんが)ほとんど使われていない言語でもあります。
ちなみにVisual C#というには、Visual C++と同じで製品名です。
JavaはCという名前が入っていないので無関係のように思いますが、これもCから派生した言語です。
といってもCと互換性があるわけではなく、C#と同じような位置づけになります。
Javaが多く使われるのはサーバー用途ではないかと思います。
ほかには、(厳密にはJavaではないのでしょうが)Androidの開発言語でもあります。
サーバー用途などで使っているJavaとAndroidで使っているJavaは、言語としては大体互換性がありますが、もともとJavaが目指していたWrite once, run anywhereではすでになくなってしまっています(run somewhereという感じです)。
C#やJavaがCからの派生言語だということであれば、実はPHPもCからの派生言語だといえます。
今回取り上げたCやその派生言語の経験があれば、PHPは簡単に使うことができるはずです。
もっとも、アプリケーション分野の違いはあるので、組込み開発しか経験のないプログラマーが直ちにウェブプログラマーになれるかというと、何ともいえないところがありますが…。
今回はプログラマー以外でも多少は理解できそうな内容にしたつもりでしたが、いかがだったでしょうか?
そういえば、以前CとC++の違いについて別のブログでも記事を書いたことがあったので、そちらへのリンクを貼っておきます。
「CとC++の違い | 株式会社きじねこ」