D言語によるCGIの優位性


D言語で書くCGIの優位性

ネイティブ言語でありながら、JavaやC#のような特徴をもち、 かつスクリプト言語のような性質をもつライブラリをもっており、 高速CGIを簡単に書くことが可能です。

ヒアドキュメント的な文字列定義ができる。

用は改行を文字列定義に含めることができるということ。

printf(`content-type: text/html

hello world!`);

と書ける。

ネィティブ言語なので起動が高速。perlの10倍は速いだろう(ベンチマークが必要)

Perl等で作成されている1台のサーバで運用しているようなケースで、 チャットやゲームなどマシンパワーを食うCGIを作る際や、巨大掲示板を作成する場合 起動の速いCやC++が使われますが、Dもネイティブ言語なので同様に高速なCGIを書くことができます。

  • ネイティブであれば起動が高速かと言えば、必ずしもそうではありません。PerlやPHPには起動オーバーヘッドを減らすための方法が多数あります。mod_perlやFastCGIなどを使った場合はおそらくPerlの方が起動オーバーヘッドは小さいでしょう。CやC++で起動オーバーヘッドを小さくする場合はCGIとして作らずApacheモジュールとして作る必要があります。*1
  • 処理自体はD言語で作成したものの方が高速と考えて間違いないでしょう。これには言語の特性による理由と実装の特性による理由があります。

正規表現が標準ライブラリとして用意されており、簡単に文字列操作できる。

文字列操作の多いCGIのプログラムに正規表現があると非常に便利です。 D言語では標準ライブラリとして正規表現を実装しているのでわざわざ正規表現ライブラリを探してくる必要はありません。

正規表現を用いる場合にエスケープシーケンスを使わない文字列表現があるので、"\\\\"を`\\`と書けエスケープシーケンスに変換する余計な頭をつかうことなく正規表現を書くことができます。

高機能な文字列処理関数群があります。

split,join,replace等スクリプティング言語並の簡単に用いることができる関数群(std.string)が用意されています。


Javaの特徴をもちつつスクリプト言語のような感覚で使えます。

正規表現や、簡単で高機能なライブラリはスクリプト言語で書くような感覚でCGIを書くことが可能です。そのため、高速な処理を必要としないような大きなアプリケーションにも対応できます。コンパイル速度が速いのもスクリプト言語に近いといえる要因でしょう。

ハッシュを言語仕様にもっています。

char[][char[]] hash;
hash["c"]="1ccc";
hash["a"]="2aaa";
hash["b"]="3bbb";
hash["d"]="4ddd";
foreach(char[] tmp;hash.sort){
    printf("%.*s\n",tmp);
}

出力

2aaa
3bbb
1ccc
4ddd

コンパイルが高速。

プリプロセッサの排除等によりコンパイルが高速です。ですから、コンパイルする手間はかかりますが、時間待ちのストレスを感じずに作業を行うことが可能です。

文字列操作メソッドを自分で拡張できる。

2chやニュースグループで話題になっていたのですが、できちゃいます。隠し機能的ですが。 私は英語が苦手なので詳しいことは、わからーん。

個人レベルで作成したCGIを簡単にクロスコンパイルして無料サイトで利用できる。

  • クロスコンパイラをバイナリ配布しているため、手軽に無料サイトで利用できます。
    • 現在確認しているサーバは(aaacafe freebsd)です。
    • xrea.com用のLinuxクロスコンパイラも準備中です。

ガーベジコレクションによる、メモリ管理。

JavaやC#同様ガーベジコレクタが内蔵されているのでメモリ管理がずいぶんと楽になります。

ソケットライブラリが標準で用意されています。

高速チャット、ゲームCGI、大型掲示板に向いている。

高負荷のCGIを作成するのにはネイティブ言語を使われることがあります。 スクリプト言語的な側面をもつので、仕様が大きなプログラムを書くことが可能となります。

サーブレット的なアプリケーションフレームワークが研究されている。

  • mangotreeというアプリケーションフレームワークが研究されています。
    • サーブレットをネィティブ言語でというアプローチです。

新しい言語なのでフロンティアである。

ほとんど、Dで書かれたCGIはないので、作ればD言語界で有名になれる。

  • Dblog
  • Dスレッド型掲示板
  • Dチャット
  • Dの高機能Wiki

しかも、作ったものは高速で動作する。ウマー。


Wikiによるよりよいサンプルプログラムをドキュメントに書き込めるサイトが存在する。

問題点

  • DBに接続する例がほとんどない。PostGresの例があるが。ただ、高速なのでファイルでも結構いけるんじゃないかな。2chみたいに。
  • リフレクションがない。シンボルバイナリ変換されるので。
  • evalできない。スクリプト言語ではないので。
  • ヴァージョンがまだ、1になっていないので、仕様変更が結構多い。
  • プロセス間ロック機構がない。
    • OSによって変わってしまう、ファイルロッキングについて悩まなくてよいライブラリを準備中。
      • windowsでは、mutex。
      • freebsdでは、flock。
      • linuxでは、lockf。 といったファイルロッキングについて悩まないですむクラスライブラリを準備中です。

{
 auto class lock = new Lock("lockfile");
 char file = cast(char[])read("bbs.txt");
 ロック時処理内容。
 write("bbs.txt",dat);
}

といった風に書くと、ブロック内ではロックがかかるようなライブラリを考えております。

  • 現在ほとんど、参考になるソースがない。

*MenuBar

人気の10件

  • counter: 4893
  • today: 1
  • yesterday: 0
  • online: 1


*1 起動するのはごく小さい実行ファイルとし、実際に処理を行うプロセスは常時起動しておくなどの方法もあります。