最終更新:2009-09-23 (水) 07:52:46 (5491d)  

D言語
Top / D言語

http://www.digitalmars.com/d/

http://www.kmonos.net/alang/d/

  • D はシステムプログラミング言語です。 C言語C++の高いパフォーマンスと、RubyPythonのような現代的な言語がプログラマにもたらした生産性とを併せ持つことに焦点をあわせています。特に、品質保証?、ドキュメンテーション、管理、可搬性、信頼性を実現することに留意して設計されています。
  • D は静的型付けの言語で、機械語に直接コンパイルされます。マルチパラダイム言語あり、多数のプログラミングスタイル ‐ 手続き型、オブジェクト指向テンプレートメタプログラミング? ‐ に対応しています。 C系の構文を持つ言語のひとつであり、ぱっと見た感じはC++に非常によく似ています。

サンプル

#!/usr/bin/dmd -run
/* シェルスクリプト形式の実行もサポート */

/* Hello World in D
   コンパイルする場合:
     dmd hello.d
   最適化つき:
     dmd -O -inline -release hello.d
*/

import std.stdio;

void main(string[] args)
{
    writefln("Hello World, Reloaded");

    // 自動型推論と、組み込みのforeach
    foreach (argc, argv; args)
    {
        // オブジェクト指向プログラミング
        auto cl = new CmdLin(argc, argv);
        // 型安全な改良printf
        writefln(cl.argnum, cl.suffix, " arg: ", 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;
    }
}

関連

参考