2012年8月31日金曜日

C++11が使いたい "その2"

Clang3.1 Hello auto

 実はHelloWorldのコンパイルもすんなりとは通らなかった。
clangもC++のコンパイルはclang++で行うこと、後はlibgcc_s_dw2-1.dllにパスが通っていないなかった、などということで手間取った。

 libgcc_s_dw2-1.dllはMinGW/binに入っていたが、MSYSを通して色々なものが動作していたらしく、パスが通っていなかったのだ。副作用でEclipseで作った実行ファイルが動くようになった。今までGCCでコンパイルしたファイルは動いていたのだから、分からない話だ。

 そうして遂にC++11のコンパイルが可能となった。最も簡単な機能はなんだろう。最初に思いついたのは auto であった。null_ptr の方が簡単だったが、思いつかなかった。HelloWorldプログラムに追加して、もはや何がハローなのか分からないプログラムにしてみる。

#include <iostream>
#include <string>
#include <vector>

int main(int argc, char* argv[])
{
    std::vector<std::string> str_list;

    for(int i=0; i<2 i++)
    {
        std::string temp;
        std::cin >> temp;
        str_list.push_back(temp);
    }

    std::cout << "Hello " << std::endl;

    for(auto iter=str_list.begin();
        iter!=str_list.end();
        ++iter)
    {
        std::cout << *iter << std::endl;
    }
    
    return 0;
}

 さて、重要なのはこれをメモしておくことだ。clangでC++11の機能を有効化してコンパイルするには、次のコンパイルオプションを指定する必要ある。
-std=c++11 もしくは -std=gnu++11

ついでに、実行ファイルを作るには
clang++ -std=c++11 HelloWorld.cpp -o HelloWorld

 このままじゃC++11は使えないからオプション指定してね、というようなエラーメッセージは出るのだが、どうしてか、そのものズバリは教えてくれない。


2012年8月30日木曜日

C++11が使いたい "その1"

Clang 3.1

 Eclipseに挫折した経緯、MinGW、MSYSの導入なども記録しておくべきであるが、とりあえずはすっ飛ばしてClang3.1の導入について記す。

 私のPCにはMinGW、MSYS、minttyが入っていて、CUIを使おうと思ったらminttyを使っている。minttyというのはCygwinのターミナルエミュレータだ。Cygwinなんて入れた覚えないな、と思っていたのだが、Cygwinを入れなくても使えるようで、どうやらMinGWからインストールしたもののようだ。かなり高機能なターミナルエミュレータだそうで、コピー&ペーストもできるのでお気に入りである。

 さて、C++標準への準拠度はClang3.1の方が高いが、gccの方が吐き出すプログラムは高速な場合が多いらしい。どちらでもいいのだが、gccはMinGWと混ざってしまっていて、よく分からない状態になっていて、下手に触りたくない。先にClangの導入を行うことにした。

 調べるとgccでClangをビルドしたという記事が多いが、バイナリでもらうのが好きである。ダウンロード時間がかかったり、もしかしたらビルドした方がパフォーマンスが良くなるのかもしれないが、人のコードをビルドするということに少なからずストレスを感じるのだ。

 ということで、参考のブログを見つつClangのバイナリをダウンロード。ダウンロードした圧縮ファイルを解凍する。ただしLhaplusで解凍すると、@LongLinkというファイルができてしまう。これも詳しくは分からないが、解凍は完了するものの失敗している。

 成功した方法はminttyで

tar jxf clang+llvm-3.1-i386-mingw32-EXPERIMENTAL.tar.bz2

と打つものだ。Windowsで最初から使えるコマンドなのか分からなかったので、少し圧縮、解凍のテストを試みたのだが、結局よく分からないため、確証を得るのは次の何かの機会に持ち越しである。
 次の手順は展開したファイルをMinGWのインストール先のフォルダに入れるそうだが、パスの関係を考えると、MinGW/binの中にフォルダごと入れても無駄なのだろう。binの中身をそっくり入れる必要があるのだろうが、本格的にわけが分からなくなってしまう。システム環境変数 Pathにclangのbinを追加することにした。

 これでインストール完了のようだ。minttyからclangを呼び出すと反応してくれる。


2012年8月28日火曜日

C++11が使いたい "その0"

C++11とは、説明するまでもないがC++の最新の標準である。C++0xと呼ばれていたように0年代に承認される見通しだったものが、2011年までずれ込んでいる。その影響で次期標準はC++1xではなく、C++1yと呼ばれるようだ。

Microsoft Visual C++以外の環境でまともにプログラムが作れない身としては、Visual C++ 2012での対応を待つしかなかったのだが、メインPCのWindows Xpが健在で、Win7を使う比率が低く、VCのベータ公開時なども見送ってきた。
一方、このVC++2012であるが、可変長テンプレートをはじめ、どうやら相当数の機能に対応していないらしい。
メインPCをWin7にしたら、なんて暢気なことを言っていてはいけないな、と気が付いた。

C++11に対応したコンパイラであるgcc4.7、もしくはClang3.1を使えばいいわけである。
そのための環境が必要となる。何か他の統合環境、MinGW、もしくはLinux、なんとかしてC++11を触らねばならない。

2012年8月27日月曜日

開始宣言

とにかく投稿してみないことには、見た目もなにも分からない。

ブログという形態で文章を書くことは全くもって苦手で、続いた試しがない。
何かしらのその時々にやっていたこと、作っていたものの宣伝に利用してしまうのが落ちで、続けて書くネタに困るというのがパターンである。
そして精々3つ4つの記事が載っているだけのブログに宣伝効果は全くなく、広告にならないといって見切りを付けてしまう。

しかしそれでも見る人は見るもので、年単位で放置したブログの配布物に関してメールが届くということもあって、なかなか面白いとは思っていたし、またブログを始めてみたいと思っていたわけである。

ここ数年はC++やUnityで、ゲームなどの開発を行っていたため、ネット上に文章をあげる意義が生じてきた。
愛読の参考書籍もあるが、殆どネットを師匠に勉強してきたため、ブログがいかに偉大な存在であるかは身にしみている。
ガッチリとまとめたウェブサイトもいいが、やはり情報の新しさと天秤にかけると、ブログに軍配が上がるのではないだろうか。それとも、ウェブサイトと書籍というジャンルに対して、ブログは全く違うジャンルであるという感じだろうか。
ネットに繋がり、開発者を気取る身としては、ハウツー的文章をあげる事に対する憧れと欲求は非常に強かったのである。

さて、その欲求はTwitterをはけ口として解消されてきた。しかしながら数年経ち、吐き出されたものたちを遡って観察すると、あることに気が付いた。これらは全くもって連続性を持った有益な情報になっていないし、自身にとってすら再利用性がないのである。そもそも遡るのもしごく難儀である。

プログラミング上の注意を書き留めたこともあったし、モデラーの操作法をメモしたこともあった。
全く馬鹿げていたと思うが、洋書の和訳をしていたこともあった。そうしたことが、既にTwitterでは忘却の彼方に追いやられている。
時間をかけてスクロールすれば手繰れるというのは、脳細胞に比べて随分と優秀だが..
これぞまさしく期待した我がバーチャル記憶体系!とはならなかったのである。

したがってブログあってのTwitterであるとの結論にいたり、苦手の克服も兼ねて長々と開始宣言をしたためた次第なのだ。