From: Koji Arai Date: 2002-03-31T17:53:26+09:00 Subject: [ruby-dev:16690] Re: ライブラリ拡大計画 新井です。 In message "[ruby-dev:16689] Re: ライブラリ拡大計画" on 31 Mar 2002 17:00:13 +0900, WATANABE Hirofumi wrote: > わたなべです。 > > Yukihiro Matsumoto writes: > > :|削除とはちょっと違うんですが、 > :|個人的にはdbmがところに依って、ndbmだったりgdbmだったり > :|BerkeleyDBだったりするのがちょと使い辛いです。 > :|OSを上げたら、いつのまにかndbm互換ライブラリが、 > :|gdbmからBerkeleyDBに変更されてたりするので。 > :| > :|というわけでdbmはsdbmを使うというのはどうでしょう? > :|gdbmやBerkeleyDBが使いたいなら別にありますし、 > :|OSに付属のndbmを使いたいという人はあまりいないと思うし。 > : > :現状のdbmをndbmにするのはどうでしょう? > :gdbm対応とかは取り除いて。 > > これはndbmはgdbmやBerkeley DBの互換インターフェースは使わないという意味? > libcに含まれる*BSDはそのままでいいということかな。 > となるとLinuxではndbm拡張ライブラリは存在しないことになりそう。 > #本物のndbmを取ってくれば別だけど。 その前に以下の仕様はどうあるべきかが曖昧なようです。 require 'dbm' require 'sdbm' require 'gdbm' for c in [DBM, SDBM, GDBM] puts "--" + c.to_s + "--" STDOUT.flush dbm = c.open("/tmp/hoge") dbm["foo"] = nil rescue nil p dbm["foo"] end ruby 1.7.2 (2002-03-29) [i586-linux] --DBM-- "" --SDBM-- nil --GDBM-- Exception `TypeError' at -:8 - failed to convert nil into String nil つまり、nil の代入に関して DBM は、空文字列の代入 SDBM は、要素の削除(昔のHashと同じ) GDBM は、TypeError となっています。(私がSDBM以外をいじったかも^^;) できればいずれかに決めていただけますでしょうか? -- 新井康司 (Koji Arai)