世界を動かす技術を、日本語で。

Dプログラミング言語

2026年2月12日原文(dlang.org)

概要

D言語公式ページのバグ報告や改善方法、D言語の特徴とその利点を解説。 D言語の型推論、自動メモリ管理、配列やレンジサポートの紹介。 多様なプログラミングパラダイムと並行処理への対応力。 ネイティブコードへの高速コンパイルと安全性のバランス。 D Language Foundationの支援方法も案内。

バグ報告・ページ改善方法

  • ページの問題発見時は Bugzillaバグ報告
  • 内容の改善は GitHubアカウントオンライン編集・プルリクエスト送信
  • 小規模な修正向け、 大規模変更時はローカルクローン推奨
  • コード例は digitalmars.D forum へ投稿、承認後にランダム掲載
  • D Language Foundationの活動支援、 501(c)(3)非営利団体

D Programming Languageの特徴

  • 静的型付けシステムレベルアクセスCライク構文
  • 速く書けて、速く読めて、速く動く 設計思想
  • IDEやエディタ向けに linting・フォーマット・補完 設定可能
    • run.dlang.io でDコードの実験・動作確認

書きやすさと型推論

  • 型推論(auto) により冗長な型指定不要
    • 動的言語の利便性と静的言語の安全性を両立
  • 自動メモリ管理で 安全性・簡潔性・堅牢性 を確保
    • RAIIイディオムscope文 によるトランザクション的コード
  • 線形配列・連想配列・スライス・レンジ の組み込みサポート

モダンなパラダイムと設計力

  • クラシックな多態性・値セマンティクス・関数型・ジェネリクス など多彩なパラダイム
  • 契約プログラミング構造体・クラス・インターフェース サポート
  • イミュータブルデータ・メッセージパッシング・デフォルト非共有 による並行処理
  • ユニットテスト・情報隠蔽・高速コンパイル・明確なインターフェース

ネイティブ効率と安全性の両立

  • 効率的なネイティブコード への自然なコンパイル
  • 型安全性 を逸脱する必要がある場合は ポインタ・型キャスト・C関数アクセス 可能
    • 手動メモリ管理・カスタムアロケータ・インラインアセンブリ も利用可能
  • @safe, @trusted, @system 属性による 安全性と効率性のトレードオフ 管理
  • コンパイラによる 一貫性チェック

D Language Foundationとコミュニティ支援

  • D言語発展のための ボランティアとFoundationの協調
  • 寄付や支援 によるコミュニティ拡大と開発促進
  • 著作権: D Language Foundation (1999-2026)

Hackerたちの意見

余談だけど、昔のアンドレイ・アレクサンドレスクのC++プログラミング本は読むのが楽しかったな。特に「モダンC++デザイン」は最高だった。あと、このプレゼンテーションもね。https://accu.org/conf-docs/PDFs_2007/Alexandrescu-Choose_You... たくさんの無駄な議論をなくしてくれたよ!

個人的にはDやその後のNimにもっとワクワクしてたけど、結局はRustとZigが受け入れられたね。ため息。

Dの人気がRustに比べて低いことを嘆いてる人をよく見るけど、実はDにはずっと興味があったんだ。Rustのやってることが好きだから。でも、深く掘り下げる時間がなかったし、誰かに興味をそそられたいな。Rustが流行った理由やDがそうじゃなかった理由って技術的なものがあるの?DがRustに対して持ってる利点(その逆も)って何?

DとRustの企業の取り組み方が違うって感じかな。DはFacebookとRemedy Gamesがちょっと触ったくらいだし。多くの人がシステムプログラミングには自動メモリ管理が必要だと思ってるから、DはRustよりもその点で優れてるよ。GCに対する恐怖感もあって、全てのGCが同じじゃないってことを理解してない人が多いし、シナリオに応じてmalloc()/free()の実装を選ぶのと同じように、GCの実装方法もいろいろある。GCがあっても値型やスタック、グローバルメモリの割り当てができるからね。Dはコンパイル時のリフレクションがあって、コンパイル時メタプログラミングはRustのマクロよりずっと使いやすいし、コンパイル時実行もできる。コンパイル時間も!まるでTurbo PascalやDelphiを使ってるみたいだよ。言語の機能はC++に似てるのにね。複雑さが遅いコンパイルを意味しないってまた一つの証明だよ。私にとっては、C#やSwiftが仕事でDの代わりに使うことになったけど、主にその言語の背後にいる人たちの影響で、Dを選ぶことはなかったな。自分が知ってるスタックを持ってる人になりたくないから。

DとRustはメモリ安全性の扱い方が真逆だよね。Rustは高度なコンパイル時チェックで常にメモリについて考えさせることで安全性を確保してる。一方でDは、GCを使ってほぼ全てのメモリ安全性の懸念を忘れるか、ブロックスコープのオプトアウトでカウボーイスタイルの手動メモリ管理を選べる。Dはオブジェクト指向プログラミングを維持しつつ、関数型プログラミングも可能だけど、Rustは関数型プログラミング専用に設計されていて、従来の意味でのOOPは許可されてない。Dを数ヶ月使ってみて、C/C++のコードをDに移植するのはほぼ簡単だと気づいたよ。ほとんど同じセマンティクスに基づいてるからね。Rustだと、コードを移植するのに全体をゼロから考え直す必要があることが多い。

3つの理由があると思う。1. Dは初期にPython 2と3のようにGCの有無で分裂したけど(実質的に2つの標準ライブラリがあった)、Pythonのようにそれを耐えられる大きなコミュニティがなかった。2. 大きな支援がなかった。RustはMozillaの支援があってFirefoxとの統合があるから大きな違いがある。3. Dは十分に違いがなかった。自分の言語というより「C++をより良くしたもの」って感じがしたけど、C++は主にCのスーパーセットだから「クラス付きC」スタイルの移行はできなかった。

Rustが流行った理由やDがそうじゃなかった理由って技術的なものがあるの? うん。Dは「ガーベジコレクションを使ったシステムプログラミング」という死にかけた馬に乗ろうとしたけど、結果は予想通りだったよ。(そういう無駄なことを求めてる人はすでにGoやJavaを持ってるから、Dは必要ないんだ。)

Dの特徴の一つで、他の言語にも取り入れてほしいなと思うのは、メタプログラミングやコンパイル時のコード評価機能なんだよね(Rustについてはどうかわからないけど、同じような機能があったら、もっと真剣にチェックする理由になるかも)。コンパイル時にほとんどの言語を使えるっていうのがあって、ソースコードを生成する関数まであって、それがコンパイルプロセスの一部として扱われるんだ。もちろん、どの言語でもビルドプロセスの一部としてコード生成はできるけど、それはちょっと面倒だったり(しかも一つのプロジェクトに限られがち)。

Rustが成功してDがダメだった技術的な理由ってあるの?私の(ちょっと古い)経験から言うと、DはC++よりも良くてエレガントに感じる。Rustは確かにCやC++から影響を受けてるけど、ML系の言語からも多くのインスピレーションを得ていて、その結果としてタイプシステムがかなり強力になってる。

Rustが成功してDがダメだった技術的な理由ってあるの?当時、次のビッグな言語になる可能性があったと考えていた者として、私の記憶では、全体のエコシステムがあまりにも混乱していて、長期的に基盤として使うには安定性が足りなかったと思う。いくつかの例を挙げると: * コンパイラの状況:公式コンパイラはまだFOSSじゃなかったし、他のコンパイラも利用できなかったか、少なくとも使えなかった。FOSSへの移行は遅すぎたし、GCCのサポートも成熟するのに時間がかかりすぎた。 * Dのバージョン1とバージョン2の問題 * PhobosとTangoの標準ライブラリの問題 * GCありとGCなしの問題 これはD自体やそのガバナンスに対する判断ではないよ。私はDがとても良い言語だと思っていて、単にプロジェクトが広く採用されるための人手や商業的な支援が足りなかっただけだと思う。Facebookが採用したときはちょっと期待があったけど、残念ながら、あまり定着しなかったみたい。

DはRustに比べてメタプログラミングがずっと優れてる。これがまだDのプログラムを少し書き続けている唯一の理由の一つだよ。コンパイル時に型のイントロスペクションを行って、他の要素から型や関数を生成できるから、Rustの構文木を解析して操作するコンパイラプラグインを作る必要がないんだ。Rustには代数データ型みたいな関数型プログラミングの良さもあるけど、Dにはそれが欠けてるんだよね。

Rustが流行った理由とDが流行らなかった理由は技術的なものなの?このトークがその理由を説明してるけど、技術的なことじゃないよ: https://www.youtube.com/watch?v=XZ3w_jec1v8 > DのRustに対する利点は何?(その逆も含めて)Dの利点: ビルドが速い、典型的なプログラムでは約20のパッケージが必要で、100ではない、COMオブジェクト、簡単なメタプログラミング、3つのコンパイラ。GC、スクリプトにめっちゃ向いてる。Rustの利点: 借用チェッカーが優れてる。rustup。

Hacker Newsで議論の続きを見る