なぜホームページを作るのですか?作るだけでは終わらない千客万来亭

fastcgi 再び その3(D言語)

C言語の FastCGI に続いて、次は D言語版。

D言語版と言っても、使用しているライブラリは、C言語で使った libfcgi なので、C言語版と差はありません。

今回使用した libfcgi 以外にも、D言語ネイティブな FastCGI ライブラリもあるようなのですが、tango の方がずいぶんと新しくなってしまったことで使えませんでした。

しょうがないので、libfcgi-dev にあったヘッダを htod で変換できるように手を入れ、さらに変換された .d ファイルもコンパイルが通るように手を入れてあります。

こいつを dmd の -I オプションで import できる位置に配置してあげれば libfcgi ライブラリを D言語から使用できるようになります。

てなわけで、D言語版 FastCGI プログラムサンプルを以下に。

import com.fastcgi.fcgi_stdio;

void main() {
  while (FCGI_Accept() >= 0) {
    printf("Content-Type: text/plain; charset=UTF-8\r\n\r\n");
    printf("Hello World!");
  }
}

tango 版でコンパイルする分には問題ないようですが、なぜか phobos 版では、printf がコンフリクトを起こすみたいです。phobos 版だと以下のようにしてあげてください。

import com.fastcgi.fcgi_stdio;

void main() {
  while (FCGI_Accept() >= 0) {
    com.fastcgi.fcgi_stdio.printf("Content-Type: text/plain; charset=UTF-8\r\n\r\n");
    com.fastcgi.fcgi_stdio.printf("Hello World!");
  }
}

処理速度を計測すると、ごくわずかではありますが、C言語版より遅い(計測誤差の範囲?)結果が出てきます。

fastcgi 関連記事