1. 次期Delphi/C++Builderでは新しいコンパイラ・アーキテクチャを採用
海外担当副社長兼ジェネラルマネージャ
Nigel Brown氏

今回のデベロッパーキャンプには、エンバカデロの海外担当副社長兼ジェネラルマネージャであるNigel Brown氏が来日してキーノートセッションを担当した。同氏からはエンバカデロの2011年度の実績および2012年度の取り組みや、次期バージョンのRADツールに搭載予定の新機能の紹介、2011年にリリースされたアプリ配布基盤「AppWave」の最新動向の紹介などが行われた。ここでは、その中から次期Delphi/C++Builderに関する情報をお伝えする。
次期バージョンのDelphiとC++Builderでは、コンパイラ・アーキテクチャの大幅な変更に着手しているという。Delphiの場合、現行バージョンではDelphi(Pascal)コードをいったんDelphi中間表現に直し、それをIntelプロセッサ用のコードジェネレータで実行コードに生成するというプロセスになっている(図1.2)。C++builderの場合も同様で、C++コードを中間表現に直して、そこからIntelプロセッサ用の実行コードを生成する。
最初にDelphiがリリースされたときからこの仕組みを採用し続けてきたとのことだが、ここ数年で状況が大きく変わったとBrown氏は言う。MicrosoftとIntelによる支配的な構造が崩れ、Mac OSやiOS、Androidなどが台頭し始めからだ。これによってユーザの選択肢は大きく広がった。開発ツール側では、広がった選択肢に対応していかなければならない。そのためにDelphiおよびC++BuilderではMicrosoft+Intelという前提のもとで構成されていた従来のアーキテクチャを捨て、LLVM(Low Level Virtual Machine)を活用した新しいアーキテクチャの採用に踏み切ったというわけだ。
具体的には、DelphiおよびC++Builderはコンパイル時に共通の中間表現を構築し、そこからターゲットとなるプラットフォームごとに最適化された実行コードを生成する(図1.3)。ポイントは、開発者が作成すべきコードは従来とまったく変わらず、違いはすべてコンパイラで吸収するという点である。つまり、開発者自身はアーキテクチャの違いを意識する必要はない。
もう一つのポイントは、フロントエンドのツール(言語)の違いと、ターゲットとなるプラットフォームの違いも、すべて中間表現によって吸収されるということだ。これまでとは違い、DelphiとC++Builderは同じ中間表現を構築する。そして中間表現から実行コードへの変換には、Intel以外のプロセッサ向けのコンパイラも提供されるようになるとのこと。具体的にはx64およびARMプロセッサ向けのコンパイラが挙げられているが、構造的には将来的に登場する新しいチップセットにも対応できる柔軟性を備えることになる。
「このようなアーキテクチャの根本的な改革はこれまでとは違うまったく新しい製品を作り出すようなものであり、極めて大きなチャレンジでした。自社の技術にロックインさせて囲い込みを狙いたい競合他社にはできない選択であり、エンバカデロならではの強みになるはずです」(Brown氏)


コンパイラ・アーキテクチャ以外の拡張としては次のような機能が挙げられた。
- iOS向けネイティブアプリの開発をサポート
- C++Builderにおいて64bit版Windows(Win64)向けのアプリケーション開発をサポート(DelphiはXE2で対応済み)
- FireMonkeyによるUI開発のさらなる拡張
また、上記以外の重要なフォーカス領域としてBrown氏はHTML5への対応を挙げている。具体的には、PC/モバイル端末も含めたHTML5/CSS3クライアントのビジュアル開発のサポート、PHPバックエンドと連携する動的なHTML5/CSS3アプリケーション開発のサポート、RadPHPの拡張などが予定されているという。
2. 64bit対応を進めるC++Builder
エヴェンジェリスト 高橋智宏氏

エンバカデロでエヴェンジェリストを務める高橋智宏氏からは、C++Builder XE3の新機能についてより詳細な紹介が行われた。まず、ベースとなるC++の言語機能および開発環境としては、次のような拡張が行われるという。
- C99仕様へのかなり高い準拠
- C++11仕様へのかなり高い準拠
-
LLVMベースのアーキテクチャを採用
- x64バイナリ生成をサポート
- ARM v7バイナリ生成をサポート
-
プロセッサ別のリンカの追加
- ilink64(Win64用)
- ld(ARM用)
-
デバッガの追加(拡張)
- DBK: Embarcadero Debugger Kernel(Win64用)
- GDB(ARM用)
C++向けのライブラリも新しい環境に合わせたものが同梱されるようになる。一例として次のようなライブラリが挙げられた。
-
STL - Dinkumware製STL
- 64bit対応
-
Boost - BoostPro
- インストーラ付きBoost
-
Network - The ADAPTIVE Communication Environment(ACE)
- 非常に堅牢で高機能、高スケーラビリティなネットワーク環境
-
CORBA - The Ace ORB(TAO)
- ACEベースのオープンソースCORBA実装
アプリケーションを実行するターゲットとなるプラットフォームとしては、XE2ではWin32とMac OS Xがサポートされているが、XE3では次のプラットフォームが追加されることになるという。
- Win64
- iOSシミュレータ - プラットフォームアシスタントサーバーによるリモート実行/デバッグに対応
- iOSデバイス(iPhone/iPad)
- Androidデバイス(2013年前半に追加予定)
また、リリースプランには掲載されていないものの、将来的には以下のようなプラットフォームがサポートに追加される可能性があると高橋氏は指摘している。
- Windows 8(Metro/WinRT)
- Linux(32bit/64bit)
- Mac OS X 64bit
上記に加えて、FireMonkeyについてもDelphiと共通して大幅な拡張が行われる予定とのことだ。従来のバージョンでは、VCLには用意されていながら、FireMonkeyには用意されていないコンポーネントや機能が多数あった。例えばアクションリストやジャスチャ、アンカー、レイアウトマネージャ、Audio/Videoコンポーネント、物理エンジンなどである。XE3からは、FireMonkeyでもこれらの機能が使えるようになる。
講演では、新しいコンパイラを使ってWin64向けのアプリケーションを構築するデモが紹介された。Win64向けにするとはいっても、実際にやらなければいけない作業は、プロジェクトマネージャにおいて"ターゲットプラットフォーム"を「64ビット Windows」に変更することだけである。これだけで自動的にWin64向けのコンパイラを使ったビルドが行われるように切り替わってくれる。従来のWin32用のプロジェクトでも、一部の例外(後述)を除いて、そのままWin64向けにビルドすることができるとのことだ。
3. 従来バージョンとの互換性
開発ツールがバージョンアップするときに常に気になるのは、従来のバージョンとの互換性だ。DelphiやC++Builderの場合、アーキテクチャやプラットフォームの違いなどはできる限りツール側で吸収し、開発者に意識させないというポリシーがある。前述のとおり、LLVMベースのアーキテクチャが採用されたことについても、フロントエンドの部分に大きな変更が加わることはない。
64bit対応に関しては、Win32環境向けとWni64環境向けのプロジェクトで単一のシステムヘッダ(.h/.hppファイル)を共有することで、Win32向けで作られた古いプロジェクトでもそのまま両方のターゲットに対応できるようにしているという。ヘッダファイル内では#ifdefによって環境ごとに設定を切り分けている。32bit環境と64bit環境ではポインタのサイズが異なるが、その定義も同様にヘッダファイルで切り分けを行っているとのこと。ただし、プログラム内で直接ポインタのサイズを利用した処理を行っているような場合には、64bit環境ではそのままでは正常に動作しないので注意が必要だ。
その他に、64bit版コンパイラを使う場合に注意すべき内容として次のような変更点が挙げられた。
-
デフォルト引数は関数宣言でのみ指定可能(図3.1)
- 関数ポインタやクロージャにはデフォルト引数は指定できない
-
プリプロセッサ内でsizeofは使用できない(図3.2)
- 実行時に判定する必要がある
-
テンプレートのパースが厳密に2フェーズで行われるようになった(図3.3)
- 2フェーズ目でコンパイルされる関数などを1フェーズ目の部分で使うことはできない



高橋氏によるデモでは、ターゲットとしてWin64を指定した場合には新しいコンパイラが使われたが、Win32を指定した場合には従来のコンパイラが使われる仕組みになっていた。Win32向けのコンパイラも正式リリースでは新しい機能に対応する予定だが、完全に新しいコンパイラに置き換わるのか、それとも従来のコンパイラに新機能をバックポートする形になるのかは、まだ確定的ではないとのことだ。この点については正式リリースの段階で発表されるだろうという話だった。
4. XE3に向けたマイグレーションを推進
C++Builder XE3が正式にリリースされるのは今年後半以降になるが、エンバカデロでは、将来バージョンのプレビュー版へのアクセス権と、1年以内にリリースされる次期バージョンが無償で入手できる、新しい製品ライセンス「C++Builder XE2 Future」の提供を開始している。さらに、2012年6月29日までは同ライセンスを20%OFFの価格で購入できるキャンペーンも実施中だ。
C++Builder XEおよびXE2のライセンスには旧バージョンのC++Builderへのアクセス権も付属するため、古いプロジェクトでも、XE3に向けて順次マイグレーションしていくことができる。高橋氏は講演の最後に、「ぜひこの機会にC++Builder XE2を購入し、計画的なマイグレーションを検討していただけたらと思います」と呼びかけた。