こんにちは。ご無沙汰しております、Fusic 河野です。
約1年ぶりの投稿です。
1年経ったという事は、、、
そうです!ココにも書いておりますが、Future Sync の季節でございます。
大好評頂いた去年の vol.2 よりも今年の vol.3 はさらにパワーアップしております。
ぜひお時間ありましたら、お越しください!
さて、本題です。
C++ 界隈の話です。
自分は、今でこそ業務では ruby とかをやっておりますが、その昔は windows プログラマでして
VC++ で色々と開発しておりましたが、いやはや、大分時代に置いて行かれてるようです。
新しい規格を盛り込んで C++11 となったのは、知りつつも中々触ることが無かったのですが、
最近、下記の記事を見てたら「これは触っとかないとマズイぞ!」と感じました。
[GNU/LinuxのC++11でプログラミングの常識がひっくりかえった]
cpplover.blogspot.jp/2013/04/gnulinuxc11.html
[Windows 8のC++でプログラミングの常識がひっくり返った]
itpro.nikkeibp.co.jp/article/Watcher/20130331/467401/
記事を読んでて、auto の部分で「これなんだったっけ?」から始まり、
std::async() で「おやっと。。」。
VC++ に至っては、非同期前提でのプログラミングになっている。。。
日頃書いとかないと、やっぱり付いていけなくなるものですね。。
なので、改めて C++11 界隈を色々と調べて見ました。
まずは各 OS の対応状況をと言うことで下記の簡単なコードを動かしてみました。
#include <iostream> #include <thread> using namespace std; static void func() { cout << "Hello C++11!" << endl; } int main() { thread t(func); t.join(); return 0; } |
今回試したものは、
・Windows 8
Visual Studio Express 2012 for Windows 8
Version 11.0.50727.1 RTMREL
・Mac OS X Mountain Lion
gcc version 4.2.1
Apple LLVM version 4.2
・Ubuntu 12.10
gcc version 4.7.2
・CentOS 6.4
gcc version 4.4.7
では早速。
■ windows 8
なんなく普通にビルドして実行する事ができました。
色々と調べてると Microsoft さん C++11 の実装には力入れているようで
2012 で結構動いているんじゃないかとの印象でした。
今から C++11 を勉強するとしたら、持って来いのコンパイラーではないでしょうか。
■ Mac OS X Mountain Lion
Mac では gcc がお古い事もあり、gcc ではビルドできないのですが、
変わりに Clang を使ってビルドします。
LLVM.org で開発されているものの一つらしく、iPhone とかで Objective-C とか書いてたら、
xcode の設定のところで見たことがあるかも。
(この辺のお話はココの記事がわかり易かったです。)
$ clang++ -o test1 -stdlib=libc++ test1.cpp |
最近、Clang が C++11 を完全にサポートしたっていうニュースを
見たんで、ますます今後の Clang には目を話せないかもです。
■ Ubuntu 12.10
■ CentOS 6.4
Ubuntu は、gcc は比較的新しいものを標準で積んでいますが
CentOS はやはり古めですね。
まー、この辺はしょーがないかと思います。
$ g++ test1.cpp -o test1 -std=c++0x -lpthread |
で、両 Linux とも -lpthread のオプションを付けてビルドしないと
実行時にエラーになります。
Ubuntu は「実行権限がない」、CentOS は「セグメンテーションエラー」に
なります。
こんなん知っとかないとエラー取れないよ、、、と。
終わりに
今回はリハビリがてら各 OS の gcc のバージョン確認しつつ、ビルドしてみました。
もっと C++11 の新機能を使ってプログラミングが出来るように
今後もちょくちょくとウォッチしつつ、勉強をしていければと思います。
何か参考になるサイトとか情報などありましたら、ぜひ教えて下さい!!
あと、少ないですが今回調べていく中で見つけた参考になりそうなサイトを記載しておきます。
[C++0xCompilerSupport]
wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport
[C++0x 改め C++11 はじめの一歩 ]
sites.google.com/site/siv3dgameengine/article/cpp11_first_step
[cppreference.com]
en.cppreference.com/w/
それでは!