たとえば、ゲーム開発者、アニメーションソフトウェア開発者、アバター開発者が製品を拡張するためにライブラリ/ DLLとして使用するミドルウェアSDKを、C++とJavaの両方で開発しています。
私が知りたいのはこれです:これらのタイプのAPIの開発のための標準的な「ベストプラクティス」はありますか?
使いやすさ、読みやすさ、効率などの観点から考えています。
たとえば、ゲーム開発者、アニメーションソフトウェア開発者、アバター開発者が製品を拡張するためにライブラリ/ DLLとして使用するミドルウェアSDKを、C++とJavaの両方で開発しています。
私が知りたいのはこれです:これらのタイプのAPIの開発のための標準的な「ベストプラクティス」はありますか?
使いやすさ、読みやすさ、効率などの観点から考えています。
このテーマに関する私のお気に入りの 2 つのリソース: http://mollyrocket.com/873とhttp://video.google.com/videoplay?docid=-3733345136856180693
Windows でサード パーティのライブラリを使用することから、次の 2 つのことを学びました。
ライブラリを静的ライブラリではなく DLL として配布するようにしてください。これにより、異なる C コンパイラとリンカー間の互換性が向上します。ビジュアル C++ のスタティック ライブラリに関するもう 1 つの問題は、ランタイム ライブラリの選択によって、ライブラリが別のランタイム ライブラリを使用するコードと互換性がなくなり、ランタイム ライブラリごとに 1 つのバージョンのライブラリを配布する必要が生じる可能性があることです。
可能であれば、c++ は避けてください。C++ の名前マングリングはコンパイラによって大きく異なり、Visual C++ 用にビルドされたライブラリを Windows の別のビルド環境からリンクできる可能性は低いです。C に関して言えば、特に dll を使用している場合は、はるかに優れています。
本当に c++ の優れた部分 (コンストラクターとデストラクタによるリソース管理など) を利用したい場合は、c++ で便利なレイヤーを構築し、c 関数を隠すソース コードとして配布します。ユーザーはソースを取得してローカルでコンパイルするため、ローカル環境で名前の変更や abi の問題が発生することはありません。
Java からの c/c++ コードの呼び出しについてあまり知らなくても、名前マングリングの問題があるため、c++ コードよりも c コードを使用する方がはるかに簡単であると思います。
「Imperfect C++」という本には、ライブラリの互換性に関する議論があり、非常に役に立ちました。
yrp が言及した Josh Bloch のビデオは古典的です。
一般的なガイドライン:
何を解決するかに応じて、API を設計する方法はたくさんあります。この質問に対する完全な答えは、ギャング・オブ・フォー・パターン・ブックなどの本全体に値すると思います。特に Java の場合、および一般的な OO プログラミングの場合は、Effective Java 2nd Editionをお勧めします。1 つ目は、一般的で多くの一般的なプログラミング パターンであり、それらが適用される場合とその利点です。効果的な Java は Java 中心ですが、その一部は、どのプログラミング言語にも適用できるほど一般的です。
Framework Design Guidelinesをご覧ください。.NET 固有であることはわかっていますが、そこから多くの一般的な情報を学ぶこともできます。