ここのところ、D言語中心にさまざまなことを調べてきましたが、どうにもこうにもならないことがあって、ふたたびWeb上で使用する言語について調べなおしているところ。
どうにもならならないのは、D言語のメモリ管理。
ガベージコレクションのある言語と言うことで、メモリリークについては完全に忘れることができるかと思ってましたが、単純なサンプルでもリークを解消することができません。
調べてみると、D言語が採用している保守的ガベージコレクションと言うのが、Webのように長時間プロセスが生き続けるシステムとは相性が悪いということのようです。
パフォーマンスが高く、ライブラリが充実していて、フレームワークを記述する上で必須条件となるオブジェクト指向も使える言語と言うことでふたたびさまざまな言語を試しているところです。
そんなわけで、上に挙げた条件に合致しそうな言語として、C++を調べてみることにしたのでありました。
C++もCのライブラリを直接使用することができますので、基本的なところはCのライブラリをラップして使ってしまえばよいかなと言うところ。
fastcgi のライブラリも本来ラップしてしまえばよいわけですが、今回はすなおにそのまま使用することにしたのでありました。
以下にC++版のfastcgiサンプルを。
#include <fcgi_stdio.h>
class Hello {
public:
void sayHello() {
printf("Content-Type: text/plain; charset=UTF-8\r\n\r\n");
printf("Hello World!");
}
};
int main() {
Hello hello;
while (FCGI_Accept() >= 0) {
hello.sayHello();
}
return 0;
}
C言語版と区別するため、無理にC++のクラスを使ってますが、本質的にC版となんら変わる部分はありません。
処理速度も、-O2であれば、C言語版と変わらないようです。
メモリの確保(Helloクラス)も一度だけですし、スタック上ですからオーバーヘッドもほぼゼロ。
D言語版で悩まされたメモリリークも発生しませんし(これぐらいであれば当たり前のはず)、高速かつ省メモリと言うのはそれだけでうれしいものですね。
