D言語について調べてみた

先日、FacebookがD言語の採用を始めたというニュースが流れた。

以下、ニュース元(http://japan.internet.com/webtech/20131018/5.html)より一部引用

Facebook が「D 言語」の利用を開始

プログラミング言語「D」のファンは喜んでいることだろう。米国 Facebook が、プロダクションレベルでの D コードの利用を開始した。

著名な D 言語の開発者  Andrei Alexandrescu 氏は、D で書かれた5,112 行のコードを Facebook のリポジトリにコミットした。同氏は、D 言語で書かれたコードは、ソースコードサイズ、ビルド速度、ランタイムパフォーマンスのすべてで、C++ コードよりも優れていると述べている。

「D は C++ の影響下からの離脱を果たした言語だ。D は C++ が苦手とする分野が得意である上、C++ が得意とする分野も得意なのだ」

(引用ここまで)

正直、このニュースを聞くまで、D言語なる言語の存在を全く知りませんでした。
最初聞いた時は、Delphiと何か関係があるのかなと思ったくらいです。(そういや、いつの間にかDelphi使わなくなったなあ。いい言語だったのに)
そんなわけで、せっかくの機会なので、少しだけ調べてみることにしました。
ちなみに、↓が、D言語のマスコットキャラクターらしい。(笑)
d3

まずは、困った時のWikipediaを探ってみると、

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

C言語は、元々オペレーティングシステムの記述用に開発された言語であり、複雑高度なアプリケーションを書くための機能が充実しているとは言い難い。一方で幅広いプラットフォームでの動作実績には抜きん出たものがあり、結局、開発者の最大公約数としてC言語を用いることが一般化している。このような状況に対して、C言語をより適切な言語で置き換えようという試みがなされてきたが、どれも決定打に欠けているのが現状である。
C言語の後継としてはC++が有名であるが、その複雑さも随一である。Javaは複雑さを適度に抑えて豊富な標準ライブラリを持つが、仮想機械を必要とするためパフォーマンスを求める場合には敬遠される。かといってC言語では低レベルすぎるといった、それぞれの言語の使いづらさに対して現実主義的な回答を模索した言語がD言語だといえる。

Wikipediaを見る限りでは、C言語から派生した言語で、C++やJavaの欠点を補った言語という解釈ができます。
さて、ここでマルチパラダイムプログラミング言語という言葉が出てくるのですが、これは一体何でしょう?
これも、Wikipediaから参照してみますが、

マルチパラダイムプログラミング言語 (multiparadigm programming language)は、複数のプログラミングパラダイムに対応するプログラミング言語の総称である。「1つのプログラムは複数のプログラミングパラダイムを使う」とビャーネ・ストロヴストルップは述べている。マルチパラダイムプログラミング言語の設計目標は、問題解決に当たって最良の道具になることである。たとえばOzでは、論理型、関数型、オブジェクト指向、データフローコンカレントなど、多数のパラダイムを内包している。Ozは10年かけて従来のプログラミングパラダイムが調和するよう設計されたのである。

要するに、複数のパラダイムを持つ言語ということらしいのですが、読んでいても今一つピンとこないので、実際のコードがどんな感じなのかを見てみたいと思います。
これも、Wikipediaに記載のコードを挙げてみます。

 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);
}

これだけのコードでは、何とも判断しがたいですが、それでもいくつかの特徴は見られます。
D言語は、型指定を行うことも、行わないこともできるようです。
型指定を行わない場合は、、コンパイラが自動的に型を推論するようです。
この辺は、JavaScriptを使い慣れている人にとっては、ありがたいかもしれません。
なるほど、これが複数のパラダイムに対応ということなのでしょう。
イメージとしては、C/C++言語をベースに、スクリプト言語の機能を搭載したという感じでしょうか?
また、D言語は、テンプレートも使用できます。
C++の<>と異なり、テンプレート名!()の形式のようですが、こちらの方がすっきりしているかもしれません。
もちろん、クラスや関数、デリゲートなどの機能も持ってますし、他言語を学んだ人なら、比較的楽にD言語を取得できるかもしれません。

ちなみに、D言語のコンパイラですが、DMDコンパイラというのが有名なようです。
DMDコンパイラは、D PROGRAMMING LANGUAGEからダウンロードできるようです。
Linux版とWindows版があるようですが、これはコマンドラインベースでのビルドのようなので、統合開発環境に慣れている方にとっては、若干不便を感じるかもしれません。
しかし、これはこれで、自分なりの開発環境を作っていくという楽しみもあります。
私も昔、Javaの開発環境がコマンドラインしかなかった時は、自分でエディタのマクロ機能などを駆使して開発環境を作ったものです。
ただ、コマンドラインは苦手という人も、ご心配なく。
最近では、Visual DというD言語用のVisual Studioプラグインや、DDT – D Development ToolsというEclipse用プラグインもあり、統合開発環境も整備されてきたので、開発者の敷居は下がってきていると思います。
Facebookが採用したからといって、いきなりD言語が主流になるとは思えませんが、D言語自体は洗練された言語なので、それなりのニーズは出てくるのではないかと思います。
特に、LinuxとWindowsのマルチプラットフォームで開発する場合は、D言語も選択肢の一つとなりそうな気がします。

コメント

  1.   より:

    >なるほど、これが複数のパラダイムに対応ということなのでしょう。

PAGE TOP
タイトルとURLをコピーしました