C/C++ から main 関数が消える日
Windows上でデスクトップアプリを開発している身としては、そのうちC/C++でmain関数を書く人って一人もいなくなるんじゃね、と思っている。もちろん簡単なテストコードのためにはmain関数が書けるほうが便利だから全く無くなるわけじゃないんだけど、C/C++でmain関数書いて最終成果物としてリリースされる機会は、もう無くなる日は近い。
C/C++の優位性はパフォーマンスとか低位のAPIを直接叩けるとかしかない。その性能を活かすには要所要所でC/C++ネイティブコードをDLL化して呼び出せば十分で、アプリケーション全体をC/C++で書く必要は全くない。アプリ全体を構築する能力は圧倒的にC#/.NET Framewokのほうが優れている。つまりC/C++でmain関数を書く必要はなく、単にDLLとして関数をエクスポートできれば十分ってことだ。
これは純粋なC/C++の話じゃないけれど、たとえば最近はやりのGPUプログラミングなんかでは、GLSL も NVidia Cg も CUDA も OpenCL もみな、C言語ライクな言語をサポートしている。しかしこれらの言語には printf なんてなかったりするわけで、C/C++って今後はこういう使われ方で生き残っていくんだろうな、と思う。
となると、今からC/C++を学びたいという初心者にとっては、従来からのC/C++学習コースって全然ニーズにマッチしてないんじゃないか、と思う。もうC#に乗り換えて久しいので、最近入社した若手エンジニアの中にはC#はわかるけれどC/C++は全然分からない、という人も増えてきている。彼らにとって、次の Hello World コードが本当に Hello World と言えるのかどうなのか。
#include <stdio.h> int main() { printf( "Hello, world" ); return 0; }
むしろ、次のようなコードがC/C++への「入り口」としてふさわしいんじゃないか。
extern "C" { __declspec(dllexport) int HelloWorld() { return 0; } }
ここに出てくる extern "C" だとか __declspec だとか dllexport だとかって、従来の C/C++ の教科書だと最後のほうにならないと出てこないと思うわけ。でも、今 C/C++ を学ぼうという若手がぶつかる最初の壁って、「この __declspec とかいう変なキーワードって何?」みたいなところじゃないのかな。
つまり、Cで書いたAPIをC#からDllImportで呼び出すことを前提にすると、従来とは全く異なるC/C++の教科書ができるような気がするんだよね。そういうコンセプトで書かれた教科書って存在するのかな?