Perlの代替として(1)

D言語は、本来C++の代替と捉えるべきと思うが、
ここではPerlのように書けるがずっと高速な言語と位置づけて、
Perlで書いたプログラムをD言語で書いてみる。
Perlもたまに遅いと感じることがあるので、
それをDで書き直してみたいというのはあるが、
実際には、これを通じてD言語を勉強していこうというのが趣旨である。


D言語の使い方は、このへんから。
http://www.kmonos.net/alang/wnd/

最初の一歩

cat代替のようなプログラムを書いてみる。
Perlだとこんな感じだろうか。


while(<>) {
print;
}

これをD言語にしてみる。


import std.stream;
import std.cstream;

void main(char[][] arg) {
foreach(char [] a ; arg[1..length]) {
File inp = new File(a, FileMode.In);
foreach(char [] line ; inp) {
dout.writeLine(line);
}
inp.close();
}
}

importというのは、Cの#includeみたいなもの。


import std.stream;
import std.cstream;

使いたいライブラリを書いておく。


さすがにmain関数はいる。


void main(char[][] arg) {

型はちゃんとある。
char は char ** みたいなもの。ただし、配列。
Dの配列は長さを持っているので、int argcのようなものは必要ない。


foreachが同じように使える。


foreach(char [] a ; arg[1..length]) {

ただし、argの最初に入っているのは実行ファイルのパスなので、
Perlと同じようにスライシングを使って最初のは捨てている。
Perlと違って、上のように書くと、
arg[1]からarg[length-1]までが実行される。


読み書きは上のよう。
doutが標準出力。