45

D がどれだけ成熟して安定しているか、C/C++ の代わりになるかどうか疑問に思っています。

現在、2 つの標準ライブラリ (Phobos と Tango) があることを知っています。統一された標準ライブラリがないということはまだあるのでしょうか?

さらに、言語には GCed/non-GCed コードの境界に問題があると少し前に聞きました。D Web サイトでそれに関する参照が見つからなかったので、この問題はまだ本当ですか?

4

6 に答える 6

34

D のバージョン 1 は成熟して安定しており、実際の作業に使用する人が確実にいます。Phobos は、D がこれまでに持っていた、または今後も持つ可能性が高い唯一の標準ライブラリですが、D1 の Phobos には十分なものがないため、ギャップを埋めるためにさまざまなサードパーティ ライブラリが作成されました。Tango はこれらの中で最大のものであり、最も頻繁に使用されているサードパーティ ライブラリです (そのため、そうではないにもかかわらず、2 番目の標準ライブラリと呼ばれることがよくあります。Walter Bright は、そうではないことをすぐに指摘します)。ただし、D1 の Tango と Phobos はあまりうまく混合されません (Tango はガベージ コレクターのような標準的なものを置き換えるため、IIRC です)。また、D1 は Digital Mars のプライマリ コンパイラに加えて、LDC や gdc を含む複数のコンパイラでサポートされています。

D のバージョン 2 は、ちょうど今、成熟と安定に達しています。彼らは言語に大きな変更を加えるのをやめたので、言語を釘付けにしている間の過去のように、コンパイラの更新ですべてが壊れることを一般的に心配する必要はありません. 実際、Andrei Alexandrescu がD プログラミング言語をリリースするほど成熟しています。テキストのエラーを除いて有効な言語に関する決定的なリソースとして (また、私が読んだ中で最高のプログラミング言語の本の 1 つです)。ただし、まだ多くのバグ修正が行われているため、特定のアプリケーションにかなりの苛立ちを引き起こすバグに遭遇する可能性は十分にあります。実際の作業を行うのに十分な成熟度と安定性があることは間違いありませんが、バグに遭遇する可能性が非常に高いことに注意してください。

Tango はまだ D2 に移植されていないため、D2 でプログラミングする場合、実際にはオプションではありません。ただし、フォボスは現在、非常に順調に進んでいます。これには多くの優れた追加機能が追加されています (実際にはコンテナが追加されています! - Phobos にコンテナがないことが、Phobos ではなく D1 で Tango を使用する大きな理由です)、いくつかの非常に強力なものが含まれています - std.algorithm は特にいい。D がラムダ関数、ネストされた関数、および関数ポインターを処理する方法により、関数をアルゴリズムに渡すことが、現在の C++ の標準よりもはるかに簡単になります。また、これは D2 で修正され、Tango が複製していたガベージ コレクターやその他のコア要素が Phobos から分離されるようになりました。したがって、Tango が D2 に移植されると、Phobos と Tango のコードを混在させることができますが、以前の回答で指摘したように、

現在、D2 の仕様に関して最新のコンパイラは dmd だけだと思いますが、gdc と LDC の D コンパイラで作業が行われていると思います (ただし、その作業は活発ですが、私はわからない)。また、Walter Bright は現在 dmd の 64 ビット ポートに取り組んでいるので、近いうちにネイティブ 64 ビット コンパイルを取得する予定です。

全体として、D2 は使用する準備ができていると言えますが、バグ修正などに関してまだ多くの作業が行われていることに注意する必要があります。したがって、D2 は間違いなく趣味で使用する準備ができており、仕事で真剣に使用する可能性がありますが、本当に安定性が必要な場合 (たとえば、ボーイングで、ミスは死を意味する場合など) は、D1 の方が適している可能性があります。もちろん、D2 について覚えておくべき重要なことは、D1 にはない機能がたくさんあるということです。そのため、堅実な安定性が本当に必要でない限り、D2 が適している可能性があります。幸いなことに、それは成熟と安定を続けているため、D2 を使用した方が良いことは間違いありません。

とにかく、D1 と D2 はどちらも、一般的なケースでは C と C++ の適切な代替品です。彼らは C や C++ が行うことを行うことができ、(特に D2 の場合) おそらくよりうまく行うことができます。D が遅れをとっている可能性がある主な場所は、D がどれだけ最適化されているかです。D には C や C++ と同じくらい高速なコードがたくさんありますが、D ではまだ多くの作業が行われているため、さらに最適化する余地が十分にあり、効率が C や C++ に遅れをとることもあります。 . したがって、一般的に D は効率的ですが、本当にできるだけ多くの効率が必要な場合でも、必要なものにはまだ十分ではない可能性があります (ただし、それは達成されつつあります)。また、成熟した C および C++ ライブラリがたくさんありますが、D には同じレベルのコードがほとんどなく、作業することができません。C関数はDから呼び出すことができ、C++コードの一部はDから呼び出すことができるため、任意のCコードをDで使用できます(ただし、C++コードとDを混在させる場合はかなりの制限があります)。障害ですが、注意が必要です。不足している主な場所は、GUI ライブラリです。D1 用のものもいくつかあり、D2 用の GUI ライブラリの作業も行われていますが、現時点で特に成熟しているとは思えません。

したがって、すべての場合と同様に、どの言語を使用する必要があるかは、何をしているかによって異なります。D はほとんどのことをうまくこなします。しかし、それはすべてを行うわけではなく、まだ成熟しています。個人的には、現時点では、特定のプロジェクトで何か他のものを使用する必要がない限り、D を使用します。これは、そのプロジェクトが既に別の言語で書かれている場合を除き、そうではなく、今すぐ移植する意味がありません。したがって、D を使用することを強くお勧めしますが、この時点で実際に必要なことが実行されるかどうかを確認するために、D を調べて使用する必要があります。

于 2010-07-08T18:58:49.643 に答える
29

D2 とフォボスを併用することをお勧めします。それは、言語が十分に楽しく、実装の問題によって引き起こされる時折のフラストレーションを補うのに十分安定している時点です.

于 2010-07-09T06:41:35.680 に答える
12

現在、2 つの標準ライブラリ (Phobos と Tango) があることを知っているので、それらを統合しようとしている人がいると思います。

ライセンスの違いから「統一」の可能性は限りなく低い。Tango が D 2.0 に移植されると、D 1.0 では (簡単に) 不可能だった Phobos と一緒に使用できるようになります。

さらに、言語には GCed/non-GCed コードの境界に問題があると少し前に聞きました。D Web サイトでそれに関する参照が見つからなかったので、この問題はまだ本当ですか?

メモリの管理方法に注意しないと問題が発生するだけだと思います。GC によって割り当てられたオブジェクトへのすべての参照が、GC ルートとしてマークされたメモリ領域の外に格納されている場合、GC はそのオブジェクトを参照されていないと見なし、それを削除します。

今日、C の代替として D を選択しなければならないとしたら、どの D (v 1.0 または v 2.0) とどの標準ライブラリを提案しますか?

フォボスとタンゴは多少異なる方向に向かっています。Phobos (D 2.0) は D2 の新機能と密接に結びついています。Tango はより多くの機能を備えており、Phobos には存在しないモジュール (HTTP/FTP クライアントのサポート、さまざまな暗号化クラスなど) が含まれています。また、異なる設計哲学に従っています (Phobos はより命令的/メタプログラミング的ですが、一方でTango は非常に厳密に OOP に似ているため、その点では Java に似ています)。

于 2010-07-08T16:07:05.227 に答える
5

D がどれだけ成熟して安定しているか、C/C++ の代わりになるかどうか疑問に思っています。

ANSI、ISO、ECMA などの標準化団体によってまだ支持されていない言語の使用には慎重です。それはおそらく成熟度の指標です。たとえば、Java と Delphi はそのカテゴリに分類され、私はこれらの言語を使用していませんが、おそらく「成熟した」言語と言えます。

もう 1 つの尺度は、その言語について書かれた本や記事の数と質です。Andrei Alexandrescu による、私が知っている D に関する本が 1 冊あります。彼はまた、Dr. Dobbs のために言語に関する長い記事を書いており、特に標準ライブラリの問題を扱っています。

于 2010-07-08T16:44:03.280 に答える
4

Phobos と SDL を使用して D1 で小さなゲームを作成した経験はありますが、かなり小さなプロジェクトでした。

私の意見では、D には以下が欠けています。

  • 人々が助けを得たり答えを検索したりできる公式のウェブ フォーラム (ニュースグループではありません)
  • D に変換された多くの SDK の公式リポジトリ (たとえば、SDL、Gtk など。これらは、存在する場合でも、見つけて使用するのが難しいことがよくあります)。
于 2010-07-08T22:27:38.513 に答える
0

Cを置き換える問題は、潜在的な代替品が理論的なレベルで十分に「良い」または「成熟している」かどうかではなく、実際的な考慮事項と、Cが使用目的に対して「十分に良い」という事実に関するものだと思います. ある言語が、主要なオペレーティング システムごとに完全なネイティブ ビルド環境とランタイム環境を備えていない限り、C が使用される用途にはあまり実用的ではありません。C が POSIX の言語であるという事実は、問題全体の大きな部分を占めています。

確かに、D のような他の準低水準言語は、専門分野で優れたアプリケーションを持つことができます。しかし、主要なマルチプラットフォーム ソフトウェア (Web サーバー、データベース サーバー、ワード プロセッサ、Web ブラウザーなど) が D で記述されているのを見る可能性は低いです。

于 2010-07-08T16:09:29.917 に答える