2

プロジェクト用の D プログラミング言語の選択についてアドバイスが必要です。このプロジェクトは、多くの連想コンテナなどを含むデータベースに似た低レベルのライブラリです。したがって、効率は私にとって非常に重要です。

C++ や Python などの他の言語との互換性のために、ライブラリに C API を提供する必要があります。また、パフォーマンスを調整するために一部のセクションをプレーン C で記述する必要があることも予想されます。

D はこの仕事に非常に魅力的です。これらの要件を考慮する際に注意すべき落とし穴はありますか? D コンテナーのパフォーマンスは std::(map、vector、unordered_map など) と比較して、手動のパフォーマンス チューニングを考慮してどのようになりますか (たとえば、検索/挿入に std::map::lower_bound を使用するなど) )。

4

2 に答える 2

1

短期的に、つまり締め切りを厳しくして、来週これを稼働させることを考えていますか、それとも長期的に、つまり大規模な複数年プロジェクトの初期計画段階を考えていますか?

短期的に興味があるなら、Dに反対することをお勧めします。それはまだ最先端です。

しかし、長期的には、Dは安定し始めています。言語のバージョン2は、6か月以内に安定する可能性があります。アンドレイ・アレキサンドレスクは3月に「TheD Programming Language」というタイトルの本をリリースし、D2を安定させるために大きな力を注いでいます。

落とし穴に関して言えば、最大の問題は、ほとんどのことを行う慣用的なDの方法は、多くのテンプレートを使用することであり、物事に対して安定したABIを作成することを困難にしていることです。それは可能です、それはただ慣用的ではありません。もう1つは、バージョン2の言語に適したコンテナライブラリがまだないことですが、これは明らかに作業中です。

パフォーマンス面では、リファレンス実装であるDMDには古いオプティマイザーがあります。あなたが本当にパフォーマンスに夢中になっているなら、これは問題かもしれません。GCC用のDコンパイラであるGDCは、より優れたオプティマイザを備えていますが、常に数リリース遅れています。LLVM用のDコンパイラであるLDCには、すばらしいオプティマイザがありますが、言語のバージョン1のみをサポートしています。ただし、DはC ++と同じくらい高速であると想定されており、DMDでコンパイルされたDは、私が行ったベンチマークによれば、Digital MarsC++コンパイラでコンパイルされたC++と同じくらい高速です。

于 2009-11-29T16:08:27.610 に答える
1

dsimcha の回答に加えて、D で優れたパフォーマンスのアプリを作成するには、最初に GC をうまく操作する必要があることに注意してください。D のガベージ コレクションは Java や C# ほど高速ではないため、ガベージ コレクションを回避または最小化するタイミングと方法を知る必要があります。幸いなことに、1) raii を使用してスタック割り当てをより有効に活用し、2) 必要に応じて手動のメモリ管理を使用することができます。

Tango がどのように D 配列とスライシングを高性能ライブラリに活用したかについての (やや古い) プレゼンテーションがあります 。 #

スライドについては、google 'd conference 2007' を参照してください。(私はここに新しく、リンクを 1 つしか投稿できません。申し訳ありません)

于 2009-12-14T22:17:53.323 に答える