初出: 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 は、プログラム実行中の 経過時間を詳細に調べることができて、パフォーマンス測定などに便利です。
ほかに、コンパイラや言語機能サポートのためのライブラリがいくつかありますが、 普通に使うのはこんなところだと思います。あ、あとメタプログラミング用の補助ライブラリが あります。これは後述ということで。