超個人的なエントリで恐縮です。
先日完全ハッシュ関数に関して調査していたのですが、

perfect hash function(完全ハッシュ関数)の概要|http://blog.broomie.net/index.cgi?id=7

そこで、GNU gperfというアプリケーションが完全ハッシュ関数の生成器として存在するって話を少ししだけれども、かくいう僕もgperfを使わせていただいておるのですが、実際にどんなアプリケーションやユースケースで使われているのかなあ、と興味を持った
ので軽い気持ちで調べてみた。

gperfの本家のマニュアルを調べてみると確かに、それらしいことが書いてある。

gperf currently generates the reserved keyword recognizer for lexical analyzers in several production and research compilers and language processing tools, including GNU C, GNU C++, GNU Java, GNU Pascal, GNU Modula 3, and GNU indent. Complete C++ source code for gperf is available from http://ftp.gnu.org/pub/gnu/gperf/. A paper describing gperf’s design and implementation in greater detail is available in the Second USENIX C++ Conference proceedings or from http://www.cs.wustl.edu/~schmidt/resume.html.

http://www.gnu.org/software/gperf/manual/gperf.html|http://www.gnu.org/software/gperf/manual/gperf.html

gperfは(GNU C, GNU C++, GNU Java, GNU Pascal, GNU Modula 3, GNU indent.)などの様々なプログラミング言語のコンパイラで予約語の認識部分の処理を担っている.

って書いてありますね。予約語のチェックはルックアップ数が多いから、gperfで高速化しているんですね。上のリストには書いてないけれども、Rubyのソースを眺めてみたら、実際にRubyも予約語のチェックはgperfでやっているんですね。Rubyをソースで落とす
とパッケージの中にlex.cというのがあって、それはgperfで出力されたソースになっていました。参考になるので今後じっくり読んでみよう。

lex.cに先頭に以下のようにコメントしてあります。

/* C code produced by gperf version 3.0.3 */
/* Command-line: gperf -C -p -j1 -i 1 -g -o -t -N rb_reserved_word -k'1,3,$' keywords  */

google code searchでgperfというキーワードで検索してみたら、4000件もヒットしたし結構色んなところで使われているんですね。ばばーっと使われている部分を見てたんだけどやっぱり、予約語のチェックみたいに、シンタックスのチェックとかで使われているみたいです。高速で簡単に使えるんだからgperfってもっと色んなところで使われてもいいような気がするんだけどなあ。。。まあ更新ができないっていうのがネックなんだけどね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です