D言語
テンプレート:Infobox プログラミング言語 テンプレート:プログラミング言語 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言語ファミリーとの比較
- 静的型付けの強化
- テンプレート、メタプログラミングのための機能
- 並列化
- スレッド (スレッドクラス(std.thread)、クリティカルセクション)
- グローバル変数/static変数が標準でスレッド局所記憶 (従来のグローバル変数/static変数も使用可能)【D2】
- モダンな機能
- 例外処理、スコープガード
- 実行時型情報
- 文字列switch、goto case文、名前付きblock
- ガベージコレクション[10]
- 関数の強化
- ネストされた関数
- レキシカルクロージャ【D2】
- 遅延評価が可能
- コンパイル時の強力な副処理
- 文字列をコードとして生成する文字列ミックスイン
- 任意のファイルをコンパイル時に読み込み、文字列リテラルとして参照
- 関数のコンパイル時の実行
- 開発支援のための言語標準の機能
- バージョン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を公開
外部リンク
リファレンス
- D Programming Language(D言語リファレンス)
- プログラミング言語 D(上記リソースの日本語訳)
リソース
- D Wiki - 公式Wiki
- わかったつもりになるD言語(通称わなD。D memoの2007年版)
- C/C++に疲れた人のD言語2.0
- D言語の四方山話
- D言語入門
- D language site
その他
- Walter Bright's Homepage
- GDC - D Programming Language for GCC - GCC版Dコンパイラ(最近x64に対応した)
- Wiki4D - 公式Wikiが作られる前の公認Wiki
- dsource.org
ライブラリ
- Tango - 標準ライブラリに置き換わることを目指して作成されたライブラリ。その後置き換えは断念されている。D2への対応が遅れていたが、2012年2月にようやくポーティングがなされた。[12]
- DFL - D言語の主要なGUIライブラリ
- DFL and Tango - 上記のDFLとTangoを組み合わせたライブラリ
- ゲームヘル2000 - ゲーム製作用ライブラリ「dHell」
- ゲームヘル2000 - dHell2 - dHellの続編
参考文献
- ↑ D 2.0 の 1.0 からの違い - プログラミング言語 D 2.0
- ↑ ABI - プログラミング言語 D 2.0
- ↑ Cとのインターフェイス - プログラミング言語 D 2.0
- ↑ C++とのインターフェイス - プログラミング言語 D 2.0
- ↑ インラインアセンブラ - プログラミング言語 D 2.0
- ↑ 文 - プログラミング言語 D 2.0#Goto 文
- ↑ Cプリプロセッサ vs D - プログラミング言語 D 2.0
- ↑ 文 - プログラミング言語 D 2.0 # Foreach 文
- ↑ 構造体, 共用体 - プログラミング言語 D 2.0
- ↑ ガベージコレクション - プログラミング言語 D 2.0
- ↑ 埋め込みドキュメント - プログラミング言語 D 2.0
- ↑ Tango for D2