Project Flower ブログ

Project Flowerのブログです。

Delphi / C++Builder Community Edition

待望の、と言うべきか。

Visual Studio Communityに続いて、Delphi / C++Builderの個人向け無償エディション(Professional相当)がリリースされた。

www.embarcadero.com年間売上が約50万を超える企業では利用できないから、実質個人向けだろう。

実は今、業務でこの開発環境(C++Builder Professional Edition)を利用している。

VBやWinFormsライクなRADや、Clangベースで64-bit開発ができるのはVSでMFCで開発するのと比べるとコストが低く悪くはないが、クオリティの面ではVSやEclipse等と比べて数段低い。

相変わらずバグが多くビルドが上手くいかない時があり、作り方が悪いのかそもそもバグなのか悩む事になる。

Professional Editionではテクニカルサポートがあるのでまあ助かるが、そうでなければそれなりに苦しむ場面が出てくるのは、想像に難くない。

特にRTLやリンカ周りの挙動が怪しい。

32-bitでカスタム コンポーネント(パッケージ)は作成できるが、ClangベースでコンパイルしたパッケージがBCC32でビルドするアプリケーションにリンクできなかったりする。

海外の口コミ等を見ると、どうも、パッケージのコンパイルにはClangベースは使えないとの情報があるが、公式の詳しい説明も(どこかにあるのかも知れないが)見つからず、不明瞭だ。

又、クラス エクスプローラが何故か64-bitでは使えなかったり、クラスメンバをウィザードで作成すると宣言(.h)は下から順に、定義(.cpp)は上から順に記述されるという訳のわからない動きをして、結局、手で書き直した方がマシに思えたりもする。デストラクタもウィザードからは作れない。

リファクタリング支援もDelphiではある程度できるらしいが、C++では名前変更しかできず貧弱で、それですらまともに動かなかったりする。

プリプロセッサにより実行されないコードも見ただけではわからない。VSだとグレーアウトしたりして、とてもわかりやすいのだけれども。

コード補完や定義の検索の動作も非常におぼつかない。

又、特に窮屈に感じるのが、VCLで扱う文字列がUnicode(wchar_t)固定であるところだ。

TCHARマクロを使うことはできるが、マッピングの如何に関わらず、VCLの文字列はUnicodeString。

UnicodeStringのc_str/w_str/t_str関数はどれを使ってもwchar_t型のポインタで、AnsiStringはどれを使ってもchar型のポインタになる。つまり、マルチバイト文字列とUnicode文字列の相互運用をする場合

String text = L"Hello"; // UnicodeString

TCHAR* caption = _T("Title");

MessageBox(nullptr, text.t_str(), caption, MB_OK);

上記のようなコードではだめで、下記のように書かなければならない。

String text = L"Hello"; // UnicodeString

TCHAR* caption = _T("Title");

MessageBoxW(nullptr, text.w_str(), UnicodeString(caption).w_str(), MB_OK);

又は

TCHAR* messageText;

#if defined(_UNICODE)

  messageText = text.w_str();

#else

  messageText = AnsiString(text).c_str();

#endif

MessageBox(nullptr, messageText, caption, MB_OK);

UnicodeStringとAnsiString間はコピーコンストラクタやコンストラクタ引数、演算子のオーバロード等により容易に相互変換できるのが救いか。今更マルチバイト文字列なんて使わないよ、と言うのであればどうでもいいかもしれない。

生産性の面では悪くないし、GetIt(VSのNuGetみたいなもの)も良さげなパッケージがリリースされているので、個人的にはDelphiよりもC++は開発環境としては見過ごせない存在ではある。

Borlandと.NET / C#の経緯を考えると不思議ではないが、VCLのクラスは.NETによく似ているので、WTLMFCよりは使いやすい(良いコードが書けるかどうかは別として)。

だが、Windows ネイティブ開発のための環境として考えると、前述のようなクオリティの低さがVSやQt等に対して見劣りしてしまう。日本語コミュニティがあまり活発でないのも残念なところだ。