3-b1. 標準ライブラリひとめぐり

初出: 2007/03/07
最新: 2007/09/14
[3. D言語各論] に戻る

標準ライブラリひとめぐり

D言語の標準ライブラリは Phobos と言います。火星の衛星から名前がとられています。

入出力

// input.txtの中身を標準出力に表示しつつoutput.txtにコピー
import std.stream;
import std.cstream;

void main()
{
    File inp = new File("input.txt",  FileMode.In);
    File oup = new File("output.txt", FileMode.OutNew);

    foreach( string line; inp )
    {
        oup.writeLine(line);
        dout.writeLine(line);
    }
}

入出力全般を抽象化したクラス Stream の派生クラスを使って入出力します。 例えば std.stream で定義されている File クラスのインスタンスや、std.cstream にある 標準入出力ストリーム din, dout, derr などなど。

ネットワーク

// Windowsでビルドするときは
//    dmd hoge.d ws2_32.lib
// のようにws2_32.libのリンクが必要
import std.socket;
import std.socketstream;
import std.cstream;

void main()
{
    auto sok = new SocketStream( new TcpSocket(new InternetAddress("www.google.co.jp", 80)) );
    sok.writeString( "GET / HTTP/1.0\r\n" );
    sok.writeString( "HOST: www.google.co.jp\r\n" );
    sok.writeString( "\r\n" );

    dout.writeLine( sok.readLine() );
}

ソケットやアドレス解決の機能は std.socket にあります。普通は上の例のように std.socketstream で Stream にラップして使うのが便利です。HTTPやSMTPなど上位のプロトコルを話してくれるクラスは、 標準ライブラリには用意されていません。

マルチスレッド

import std.thread;
import std.cstream;

class MyThread : Thread
{
    override int run()
    {
        for(int i=0; i<1000000; ++i)
            {dout.write('A'); dout.flush();}
        return 0;
    }
}

void main()
{
    Thread t = new MyThread;
    t.start();
    for(int i=0; i<1000000; ++i)
        {dout.write('B'); dout.flush();}
    t.wait();
}

A が出たり B が出たりします。Thread クラスから派生して run メソッドをオーバーライドしたクラスを、 新しいスレッドとして走らせることができます。同期は Java 等と同じ synchronized 文/修飾子 を使います。

数学関係

math は三角関数や対数関数などなどよくある数学関数です。random は乱数です。 ただの線形合同法よりはマトモに見えますが、どのくらい良い乱数なのかはちょっと不明です。

文字列

システム周り

時間・時刻

import std.perf;
import std.cstream;

void main()
{
    auto ct = new PerformanceCounter;
    ct.start();
        for(int i=0; i<100000000; ++i) {}
    ct.stop();
    dout.writefln( ct.microseconds(), "us" );
}

std.date は、何年何月何日何時何分何秒みたいな情報を扱います。std.perf は、プログラム実行中の 経過時間を詳細に調べることができて、パフォーマンス測定などに便利です。

その他

ほかに、コンパイラや言語機能サポートのためのライブラリがいくつかありますが、 普通に使うのはこんなところだと思います。あ、あとメタプログラミング用の補助ライブラリが あります。これは後述ということで。

[3. D言語各論] に戻る

presented by k.inaba   under NYSDL.