汎用的なABIを定義できるようにする提案

N4028 Defining a Portable C++ ABI

C++で汎用的なABI(Application Binary Interface)を定義できるようにする提案。提案者は、MicrosoftのHerb Sutter。

いま考えられているのは、extern "C"に加えてextern "abi"を追加し、その中にC++として公開するインタフェースを定義するというもの。

extern “abi” { 
    template <class T> // テンプレートを使える
    class gadget { ... }; // クラスを使える

    class widget { 
    public: 
        virtual int add( gadget<int>& ); // 仮想関数を使える
        …
    }; 

    bool overload( widget& ); // オーバーロードもできる
    bool overload( int, gadget<float>*& ); 
}

この提案の目標としては、以下のようなものが考えられています:

  • 同じプラットフォームの、異なるコンパイラコンパイラのバージョン違いといった場合でも、オブジェクトファイルをリンクできるようにする。
  • FFIを使って、他言語からC++のライブラリを使えるようにする。(JavaのJNIや.NETのPInvokeのように)