C++ Builderをインストールしてみた。
高木です。おはようございます。
先日、7月19日にエンバカデロ社のC++ Builder 10.2 TokyoのCommunity Editionが無償で利用できるようになりました。
Visual Studio 2017のCommunity Edition同様、商用利用するには大きな制約がありますが、機能的にはProfessional Edition相当ですので、勉強するのに使うにはもってこいです。
私も早速この前の週末にインストールしてみました。
実をいうとC++ Builderはちょっとかじったぐらいで、これまでまともに使ったことがありません。
昔のTurbo C++は結構使いました。
というか、私はTurbo C++でC++を習得したといってもいいぐらいです。
OWLが付属していたころのBorland C++もちょっとかじったぐらいでした。
Borland C++ Compiler 5.5.1はかなり使いましたね。
C++ Builderで一番使ったのはC++ Builder Xかもしれません。
ただ、これは名前こそ似ているもののまるで別物です。
そんな状況なので、今回本格的に使うようになれば、C++ Builderを初めてものにしたことになります。
前述したように、Borland C++ Compiler 5.5.1はかなり使い込みましたので、C++コンパイラであるbcc32にはなじみがあります。
しかし、最近のC++ BuilderのC++コンパイラはClangベースのbcc32c(64ビット版はbcc64)だといいます。
ClangベースではなくなったのはMac OS向けのbccosxだけのようです(一応、Windows向けのbcc32もまだ使えるようですが)。
私は、初めて使うコンパイラに触れるときは、まずその癖を把握することから始めます。
Clangを使うのは初めてではありませんが、bcc32cやbcc64は初めてです。
昔のbcc32も結構癖があったので、今回も確認しておく必要があると考えました。
まずはバージョンの確認から行いましょう。
Clangベースのコンパイラは、ベースとなるClangのバージョンが3.3だいうことです。
ちょっと古いバージョンで、C++11は大丈夫そうですが、C++14は中途半端にしか対応していません。
ついでにBoost C++ Librariesもインストールしておきました。
GetIt Package Managerを使って簡単にインストールすることができました(時間はかかりましたが)。
Boost C++ Librariesのバージョンですが、Clangベースのコンパイラ用は1.55.0、それ以外は1.39.0のようです。
最新のBoost C++ Librariesのバージョンは1.67.0であり、もうすぐ1.68.0がリリースになると思います。
ですので、1.55.9とか1.39.0とかいうのはずいぶん古いバージョンですね。
次に標準ライブラリを見てみることにします。
私が最初に見ることにしているのは、決まって limits.h です。
Borland C++ Compiler 5.5.1にはとんでもないバグがありましたので、最新のC++ Builderではどうなっているのか気になるところです。
嫌な予感は的中しました。
Borland C++ Compiler 5.5.1から(おそらくはもっと前から)あるバグが直っていません。
どんなバグかというと、INT_MAXやINT_MINの型がlong型になっているというものです。
USHRT_MAXの型もunsigned int型になっています。
本来であれば、すべてint型でなければなりません。
これでは、多重定義された関数の実引数に使った場合、autoを使った場合、テンプレート実引数に使った場合には予期せぬ振る舞いをすることになるでしょう。
Windows以外のプラットフォームではどうなっているのかも気になります。
まだはっきりしたことは確認できていませんが、ざっと検索した限りでは他に limits.h はなかったので、Windows用のものを参照しているのではないかと推測しています。
ここまで見ただけでも、かなり難があることがわかりました。
ClangやBoost C++ Librariesのバージョンが古いことは不具合ではありませんが、難であることは確かです。
ただ、いくつか難はあったとしても、それ以上に有用なツールであるなら、十分使い物になるだろうと思います。
実際のところはこれからいろいろ試してみないといけませんが、個人的には期待しています。
何ごとも、いくつかの難を見てダメ出しをするよりは、いいところを見つけて付き合っていく方が有益でしょうから。
最近は、C#、C++/CLI、C++という3言語縦断での開発をやっているだけに、C++だけでデスクトップやモバイルのアプリケーション開発ができるのは魅力的なのです。