D は汎用プログラミング言語である。
静的型付け、システムレベルのアクセス、C言語ライクな構文を持つ汎用プログラミング言語である。
、速く書く、
速く書き、速く読み、速く実行する。
D Programming Language
高速コード、高速。
Dを説明する簡単な例を持っているか?
あなたのコードをdigitalmars.Dフォーラムに投稿する。 件名に「[あなたのコードはこちら]」と明記して。
承認されれば、不定期にここで紹介される。
D言語をサポートする
D言語は、多くのボランティアの努力と献身によって成り立っている、 501(c)(3)の非営利団体であるD言語財団の調整と支援活動によって実現されている。 D言語財団を支援することで、D言語のさらなる発展とコミュニティの発展に貢献することができる。 "財団"を支援することで、D言語のさらなる発展とコミュニティの発展に貢献することができる。
寄付する
財団についてもっと知る
スポンサーと寄付者の皆様へ
貢献者に感謝する。
業界の実績
ニュース
最新記事は 2024年2月22日からのD公式ブログ: ライブラリとしてのDMDコンパイラ:DMDコンパイラをライブラリとして:Razvan Nitu氏による呼びかけ ラズヴァン・ニトゥ
2023年10月2日より: Dで自明なコードを作る。 ウォルター・ブライト著。
学ぶ
ツアーに参加し D言語の主な機能 クイック・オーバービューを見る Cまたは C++の背景から始める、 そして フォーラムで質問する。
D言語をより深く学ぶには をより深く学ぶには、本や ビデオ をチェックしよう。 D言語でプログラミングする。
実行する
lintingを設定する、 または 補完を設定する。 お気に入りのIDE エディター、または run.dlang.ioを使って、Dコードで遊んだり実験したりできる。 を使うこともできる。
探求する
プラグマティックDについて学ぶ、 DSスタイル、 一般的なDイディオムと テンプレートについて学ぶ、 次のバージョンで何が追加されるかを見る、 D改良提案について調べる、 Dのガベージコレクションを恐れない。
速いコードを、速く
速く書く
Dは、動的言語のように型を冗長に指定することなく、大きなコード断片を書くことができる、 動的言語がそうであるように。一方、静的推論は型やその他のコード特性を推論する。 静的推論は、型やその他のコード特性を推論する。 の両方の長所を備えている。
void main() { // double[]という数値の配列を定義する. // コンパイラはすべての初期化子に // 共通の型を認識する。 auto arr = [ 1, 2, 3.14, 5.1, 6 ]; // 文字列とintを対応付ける辞書、 // 型はint[string]と表記 auto dictionary = [ "one" : 1, "two" : 2, "three" : 3 ]; // 以下で定義されるmin関数を呼び出す auto x = min(arr[0], dictionary["two"]); } // 型推論は関数の結果に対して機能する。 // これは、以下のminのような汎用関数にとって重要であり、 // すべての比較可能な型に対して // 正しく機能する。 auto min(T1, T2)(T1 lhs, T2 rhs) { return rhs < lhs ? rhs : lhs; }
自動メモリー管理により、安全でシンプルかつ堅牢なコードが実現する。 Dはまた、スコープ付きリソース管理(別名 RAIIイディオム) やscope 文もサポートしている。 ステートメントもサポートしている。
import std.stdio; class Widget { } void main() { // 自動的に管理される。 auto w = new Widget; // スコープが終了すると、どのような場合でもコードが実行される scope(exit) { writeln("Exiting main."); } // Fileはスコープ終了時に決定論的に閉じられる foreach (line; File(__FILE_FULL_PATH__).byLine()) { writeln(line); } writeln(); }
組込みの線形配列と連想配列、スライス、範囲によって、日常的な 日々のプログラミングをシンプルで快適なものにする。
"Dプログラミング言語
現代的な利便性。
モデリング能力。
ネイティブな効率性。
// 標準入力の行の長さの平均を計算する void main() { import std.range, std.stdio; auto sum = 0.0; auto count = stdin.byLine .tee!(l => sum += l.length).walkLength; writeln("Average line length: ", count ? sum / count : 0); }
速く読む
最良のパラダイムとは、他を犠牲にして何かを押し付けないことである。 D offers classic polymorphism, value semantics, functional スタイル、ジェネリクス、ジェネレーティブ・プログラミング、"契約プログラミング"などを提供する、 など、すべてが調和して統合されている。
// インターフェースとクラス interface Printable { void print(uint level) // 契約はインターフェイスの一部 in { assert(level > 0); } } // インターフェイスの実装 class Widget : Printable { void print(uint level) in{ } do{ } } // 状態の単一継承 class ExtendedWidget : Widget { override void print(uint level) in { /* 前提条件の緩和はOK */ } do { //... レベルはここでは0かもしれない ... } } // 不変のデータはスレッド間で共有 immutable string programName = "demo"; // 変更可能なデータはスレッドローカル int perThread = 42; // 明示的に共有されるデータ shared int perApp = 5; // 構造体は値セマンティクスを持つ struct BigNum { // コピーのインターセプト this(this) { } // デストラクタのインターセプト ~this() { } } void main() { // ... }
Dは、同時実行に対する革新的なアプローチを提供する。 不変のデータ"、メッセージ・パッシング、デフォルトでの共有なし、スレッド間での制御された変更可能な共有が特徴である。 スレッド間で制御された変更可能な共有ができる。続きを読む
シンプルなスクリプトから大規模なプロジェクトまで、Dにはあらゆるアプリケーションのニーズに対応できる拡張性がある。 ユニットテスト、情報隠蔽、洗練されたモジュール性、高速性、スレッド間の制御されたミュータント共有など、どのようなアプリケーションのニーズにも応えることができる、 情報隠蔽、洗練されたモジュール性、高速コンパイル、正確な インターフェースを備えている。続きを読む
高速に実行する
Dは、効率的なネイティブ・コードに自然にコンパイルされる。
Dは、ほとんどの「明白な」コードが高速かつ安全であるように設計されている。 安全であるように設計されている。時には、究極のスピードと制御を実現するために、「型安全性」の制約から逃れなければならない関数があるかもしれない。 の制約から逃れて、究極のスピードと制御が必要になることもある。そのようなまれなケースに対して、Dは以下を提供する。 ネイティブ・ポインタ、型キャスト、翻訳を介さないC関数へのアクセス、手動メモリ管理、型安全性の制約から逃れる必要がある場合もある。 任意のC関数へのアクセス、手動メモリ管理、カスタムアロケータ さらにはインライン・アセンブラのコードもある。
import core.stdc.stdlib; void livingDangerously() { // C言語のmallocとfreeプリミティブへのアクセス enum bytes = float.sizeof * 1024 * 1024; auto buf = malloc(bytes); // スコープ終了時に自動的にfree scope(exit) free(buf); // メモリを浮動小数点数の配列として解釈する auto floats = cast(float[]) buf[0 .. bytes]; // スタック確保も可能 auto moreBuf = alloca(4096 * 100); //... } // x86での高速化のためにインラインasmを使う uint checked_multiply(uint x, uint y) { uint result; version (D_InlineAsm_X86) { // インラインアセンブラはDの変数とラベルを"見る"。 asm { mov EAX,x ; mul EAX,y ; mov result,EAX ; jc Loverflow ; } return result; } else { result = x * y; if (!y || x <= uint.max / y) return result; } Loverflow: throw new Exception("multiply overflow"); } void main() { // ... }
@safe 、@trusted 、@system の"関数"属性は、プログラマーが最適な選択をすることを可能にする。 属性は、プログラマーがアプリケーションの安全性と効率性のトレードオフを最適に決定することを可能にする。 トレードオフを決定し、コンパイラに一貫性をチェックさせることができる。 整合性をチェックさせることができる。もっと読む。
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku