プログラミング言語 D 1.0
「"新しい"言語って、結局ほとんどは二つに分類できるような気がする。 一つは、アカデミックな世界から出てくる根本的に新しいパラダイムに基づいた言語で、 もう一つは、大会社が作るようなRADとかWebアプリに目を向けた言語。でもそろそろ、 コンパイラ実装の実経験に裏打ちされた新しい言語が生まれる時なんだろうね。」 -- Michael
"Great, just what I need.. another D in programming." -- Segfault
D の本 Learn to Tango with D (Kris Bell, Lars Ivar Igesund, Sean Kelly, Michael Parker 著) が発売されました。
D はシステムプログラミング言語です。 C や C++ の高いパフォーマンスと、 Ruby や Python のような現代的な言語がプログラマにもたらした生産性とを併せ持つことに焦点をあわせています。 特に、 品質保証、 ドキュメンテーション、 管理、 可搬性、 信頼性を実現することに留意して設計されています。
D は静的型付きの言語で、機械語に直接コンパイルされます。 マルチパラダイム言語であり、多数のプログラミングスタイル ─ 手続き型、オブジェクト指向、テンプレートメタプログラミング ─ に対応しています。 C系の構文を持つ言語のひとつであり、ぱっと見た雰囲気は C++ に非常によく似ています。 D の特徴的な点をざっと掴むには、特徴リストのページ をご覧下さい。
企業の戦略的なロードマップや、 偉大なプログラミング理論によって方向が決まっているような言語ではありません。 D言語コミュニティ からの要望や提案・協力が、向かう先を決めていきます。
D言語の言語仕様には二つのバージョンがあります:
- D version 1 は、メンテナンスモードに入っています。
- D version 2 が、新しいプロジェクトでの使用には推奨されます。
現在、4つの実装が存在しています:
- Digital Mars dmd: Windows 版 1.0 2.0, x86 Linux 版 1.0 2.0, Mac OS X 版 1.0 2.0, x86 FreeBSD 版 1.0 2.0
- LLVM D Compiler ldc。 D version 1 対応です。
- Gnu D compiler gdc
- D.NET compiler アルファ版です。.NET 向けで、D version 2 に対応しています。
Dを使ったオープンソースプロジェクト向けのホスティングサービス dsource に、多くのプロジェクトが集まっています。 D言語に関するWikiやライブラリ、ツール、メディア記事などのリンク集、 dlinks にまとまっています。
この文書には、 PDF版(英語) や、 本家英語版 、 ポルトガル語版 があります。 ドイツ語の書籍 Programming in D: Introduction to the new Programming Language と、 日本語の書籍 D言語パーフェクトガイド、 さらにトルコ語の書籍 D Programlama Dili Dersleri も発売されています。
以下は、D言語の機能の一部を紹介するサンプルです:
#!/usr/bin/dmd -run /* シェルスクリプト形式の実行もサポート */ /* Hello World in D コンパイルする場合: dmd hello.d 最適化つき: dmd -O -inline -release hello.d */ import std.stdio; void main(string[] args) { writeln("Hello World, Reloaded"); // 自動型推論と、組み込みのforeach foreach (argc, argv; args) { // オブジェクト指向プログラミング auto cl = new CmdLin(argc, argv); // 型安全な改良printf writefln(cl.argnum, cl.suffix, " arg: %s", cl.argv); // 自動的または明示的なメモリ管理を選択可能 delete cl; } // 内部構造体・クラス struct specs { // 全てのメンバは自動的に初期化 int count, allocated; } // 内部関数は、 // 例えばargsの様な外の変数を参照できる specs argspecs() { specs* s = new specs; // '->' 演算子は不要 s.count = args.length; // 配列の長さは .length で s.allocated = typeof(args).sizeof; // 組み込みの型情報 foreach (argv; args) s.allocated += argv.length * typeof(argv[0]).sizeof; return *s; } // 組み込みの文字列と、典型的な文字列操作 writefln("argc = %d, " ~ "allocated = %d", argspecs().count, argspecs().allocated); } class CmdLin { private int _argc; private string _argv; public: this(int argc, string argv) // コンストラクタ { _argc = argc; _argv = argv; } int argnum() { return _argc + 1; } string argv() { return _argv; } string suffix() { string suffix = "th"; switch (_argc) { case 0: suffix = "st"; break; case 1: suffix = "nd"; break; case 2: suffix = "rd"; break; default: break; } return suffix; } }
注意: D言語やコンパイラへのフィードバックは歓迎です。ただし、 著作権や特許などの知的財産のからむ項目があなたの貢献に含まれている場合、そのことを明確にするよう注意して下さい。 我々は、D をオープンで自由に使えるものとし続けたいと考えており、 コンパイラへのパッチを投稿した誰かの権利請求に捕まえられるような事態は望みません。 (原文: We welcome feedback about the D compiler or language, but please be explicit about any claims to intellectual property rights with a copyright or patent notice if you have such for your contributions. We want D to remain open and free to use, and do not wish to be caught by someone posting a patch to the compiler, and then later claim compensation for that work.)