D言語

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
D言語
パラダイム マルチパラダイム
登場時期 1999年
開発者 ウォルター・ブライト
最新リリース 2.065.0 2014年2月24日
1.076 2012年12月31日
型付け 強い静的型付け
主な処理系 DMD, GDC, LDC
影響を受けた言語 C言語, C++, C#, Java, Ruby, 関数型言語
ウェブサイト dlang.org

D言語(ディーげんご、D programming language)は、プログラミング言語のひとつ。

Digital Mars社のウォルター・ブライトによって開発された。C言語の後継を目指したものだが、マルチパラダイムプログラミング言語であり、オブジェクト指向プログラミングも可能である。

概要[編集]

開発の経緯[編集]

C言語は、元々オペレーティングシステムの記述用に開発された言語であり、複雑高度なアプリケーションを書くための機能が充実しているとは言い難い。一方で幅広いプラットフォームでの動作実績には抜きん出たものがあり、結局、開発者の最大公約数としてC言語を用いることが一般化している。このような状況に対して、C言語をより適切な言語で置き換えようという試みがなされてきたが、どれも決定打に欠けているのが現状である。

C言語の後継としてはC++が有名であるが、その複雑さも随一である。Javaは複雑さを適度に抑えて豊富な標準ライブラリを持つが、仮想機械を必要とするためパフォーマンスを求める場合には敬遠される。かといってC言語では低レベルすぎるといった、それぞれの言語の使いづらさに対して現実主義的な回答を模索した言語がD言語だといえる。

2007年1月3日(現地時間1月2日)にようやくDMD(Digital Mars社製のD言語コンパイラ)のバージョン1.0がリリースされた。

特徴[編集]

比較的新しい言語であるため、近年発達してきた概念や機能が多く取り込まれている。具体的には、例外処理テンプレートなどへの対応がなされているほか、正規表現やスレッドソケットなども標準ライブラリに含まれている。事前・事後条件のチェックや不変条件のチェック、debug 識別子の導入など、プログラムのデバッグ・保守に対して重点的にサポートしている点もこの言語の特徴である。またコンパイラの作成を非常に重視しており、言語仕様そのものがコンパイラ側の効率を意識して作られている。これはC言語が幅広く普及した背景に処理系のポーティングの容易さがあったことを踏まえており、関連する解析ツールなどの開発環境までを含めて「言語の実用性」ととらえた現実的な考え方を反映している。

D1とD2[編集]

D1は、機能的には成熟したとされ、メンテナンスモードに移行している。標準ライブラリの非力さを補うためTangoライブラリとセットで利用されることが多い。なお、D1は2012年いっぱいでのサポート停止がアナウンスされた。

D2は、新しい機能を積極的に取り込むための開発系バージョンとして分離された。文字列型(string)が変更不可能な配列となり、スレッド局所変数がデフォルトとなったなど、言語機能のさまざまな変更[1]が行われ、上位互換ではない。大きな特徴としては、標準ライブラリphobosの強化が挙げられる。

2012年5月時点では2ヶ月ごとにバージョンアップされている。言語機能やライブラリの破壊的変更が頻繁に起きるのも特徴の一つである。

特徴[編集]

  • C言語ファミリーとの比較
  • 静的型付けの強化
    • 型のプロパティへのアクセス(init, min/max, sizeofなど)
    • 複素数、虚数、列挙型、function型、delegate型
    • 機能強化された配列(動的サイズ変更、スライシング、連想配列、組み込みの文字列)
    • 配列演算【D2】
    • 強力な foreach文[8]
    • 参照型のクラス (Objectから派生)
    • 多くのリテラル(関数リテラル、delegateリテラル、連想配列リテラル、構造体リテラルなど)
    • 値型の高機能な構造体[9] (コンストラクタ、アラインメントの変更)【D2】
    • 変数や配列のアクセス制御(immutable、const、enum 記号定数)【D2】
  • テンプレート、メタプログラミングのための機能
    • 改良されたテンプレート構文、テンプレートミックスイン、可変個引数、タプル
    • 関数テンプレートの戻り値推論
    • 暗黙の型推論
    • 型の別名定義、強い型付け(2.057より非推奨)
    • 参照でのリターン【D2】
    • 委譲 (opDispatch、Alias This) 【D2】
    • Traits(型特性、関数特性、クラス特性など。)【D2】
    • 関数の引数の束縛(std.bind)、Variantクラス(std.variant。)【D2】
    • ユーザー定義の属性【D2】(2.061)
  • 並列化
  • モダンな機能
  • 関数の強化
  • コンパイル時の強力な副処理
    • 文字列をコードとして生成する文字列ミックスイン
    • 任意のファイルをコンパイル時に読み込み、文字列リテラルとして参照
    • 関数のコンパイル時の実行
  • 開発支援のための言語標準の機能
  • バージョン2.0以降に実装の計画があるものの仕様が定まっていない機能(2006年現在)

開発ツール[編集]

デバッガはC言語やC++と同じobjectフォーマットを使用するためCやC++用に書かれたものが使える。既存の開発ツールについては以下のページが詳しい。
http://wiki.dlang.org/IDEs http://wiki.dlang.org/Editors

  • Visual D[1](Windows専用)

Microsoft社の統合開発環境 Visual Studio 向けのプラグイン。無償利用可能な Visual Studio Shell にも対応。

歴史[編集]

  • 1999年12月にウォルター・ブライトが考案。
  • 2007年1月にバージョン1.0リリース。
  • 2007年6月にバージョン2のブランチが切られる。
  • 2007年8月にD言語の第1回国際カンファレンス[2]がアメリカ合衆国のシアトルで開催された。
  • 2012年12月にバージョン1.0の最終リリース(1.076)。
  • 2013年5月にDConf2013[3]がシリコンバレーの Facebook 社屋を借りて開催された。
  • 2014年5月にDConf2014[4]が同じ場所で開催予定。

サンプルコード[編集]

Hello, world![編集]

import std.stdio;  // シンボルを読み込む
 
void main()  // プログラムのエントリーポイントは C と同じ main
{
    writeln("Hello, world!");
}

引数の和[編集]

import std.stdio, std.conv : to;
 
void main(string[] args)  // D の配列は要素数の情報を持っている
{
    int sum;              // 値型はコンパイラにより0で初期化される
    foreach(arg; args[1..$])  // 変数 arg は型推論により string 型になる
    {                         // 配列のスライシングも組込みでサポートされる
        sum += to!(int)(arg);  // to はテンプレート関数
    }
    writeln(sum);
}

関連項目[編集]

  • ABA Games - D言語を使用したゲーム開発で有名
  • Eclipse (統合開発環境) - プラグインを利用することでD言語の開発環境として利用できる
  • Code::Blocks - D言語開発環境としても利用可能
  • ゲームヘル2000 - D言語を含む、多種多様な言語を用いた実験ゲームを製作するゲーム製作者コミュニティ ゲーム製作用ライブラリ「dHell」等のデータベースと新規者向けの導入Tipsを公開

外部リンク[編集]

リファレンス[編集]

リソース[編集]

その他[編集]

ライブラリ[編集]

  • Tango - 標準ライブラリに置き換わることを目指して作成されたライブラリ。その後置き換えは断念されている。D2への対応が遅れていたが、2012年2月にようやくポーティングがなされた。[12]
  • DFL - D言語の主要なGUIライブラリ
  • DFL and Tango - 上記のDFLとTangoを組み合わせたライブラリ
  • ゲームヘル2000 - ゲーム製作用ライブラリ「dHell」
  • ゲームヘル2000 - dHell2 - dHellの続編

参考文献[編集]

  1. ^ D 2.0 の 1.0 からの違い - プログラミング言語 D 2.0
  2. ^ ABI - プログラミング言語 D 2.0
  3. ^ Cとのインターフェイス - プログラミング言語 D 2.0
  4. ^ C++とのインターフェイス - プログラミング言語 D 2.0
  5. ^ インラインアセンブラ - プログラミング言語 D 2.0
  6. ^ 文 - プログラミング言語 D 2.0#Goto 文
  7. ^ Cプリプロセッサ vs D - プログラミング言語 D 2.0
  8. ^ 文 - プログラミング言語 D 2.0 # Foreach 文
  9. ^ 構造体, 共用体 - プログラミング言語 D 2.0
  10. ^ ガベージコレクション - プログラミング言語 D 2.0
  11. ^ 埋め込みドキュメント - プログラミング言語 D 2.0
  12. ^ Tango for D2