From: Akinori MUSHA Date: 2006-12-11T13:05:12+09:00 Subject: [ruby-dev:30005] Re: digest/sha2.rb is installed in a wrong place At Sun, 10 Dec 2006 19:07:13 +0900, sheepman wrote: > 僕の手元の環境だけかも知れませんが、digest/sha2.rb が > digest/digest/sha2.rb にインストールされています。 > > $ ls /usr/local/lib/ruby/1.9/digest/digest/ > sha2.rb > > $ ls /usr/local/lib/ruby/1.8/digest/digest/ > sha2.rb > > 本来は /usr/local/lib/ruby/1.x/digest/ にインストールされる > べきなんだと思います。  すみません。ミスです。修正をコミットしました。 > あと、最近の議論でrubyの開発ポリシー関して質問です。 > Digest::SHA1.new('a') がエラーになるように変更されました(Wed Oct 25 17:23:28 2006)。  その変更はポリシー確立前(立てようという話も出る前)なので別です。 また、この変更を含むリリースはまだ出ておらず、特にアナウンスもして いません。(もちろん ChangeLog/commit log には詳しく書いています) > 最近の ruby-dev を読んでいても ruby の開発ポリシーが結局どう決まったのか > 良く分からないのですが、こういった仕様変更を ruby_1_8 でもどんどん行うということでしょうか?  今後は先に提案のポリシーに沿って行うことになりますので、同様の 変更を入れることは難しいと思います。 * * *  ご参考までに、先の変更の背景は次の通りです。 - RAAやRubyforgeに登録されているmessage digest関連のモジュールを 見ると ext/digest のインターフェースを使っているものは皆無。 OpenSSL::Digest とは似たインターフェースなのに実装を共有できて いない。つまり、旧来の実装側APIは再利用性に問題があった。 そこでユーザ側インターフェースはほぼ保ちつつ、実装側APIを大幅に 改修した。C用APIを改良し、Ruby用APIを新たに設けた。 - パラメータ付きのアルゴリズムに対応するため、コンストラクタを サブクラスに解放した。これによって、 OpenSSL::Digest のように アルゴリズム名を指定するものや、ビット長を指定するもの(SHA2等) などを Digest(::Class) のサブクラスにできるようになった。一方で 一部互換性を失った。  後方互換性は保持したかったのですが、 new に引数を与える使い方は 使用例が多くなく、比較的容易に使用箇所が検出できて書き換えも容易な ため、 1.9 以降との互換性の方に重きを置いて 1.8 にも適用した次第 です。  具体的な書き換え方法は以下です。 - Digest::MD5.new(str).hexdigest のような使い方はそもそも冗長で、 Digest::MD5.hexdigest(str) で良い。(.to_s や .digest も同様) - md = Digest::MD5.new(str) のような使い方は、申し訳ないが md = Digest::MD5.new.update(str) と書き換えて欲しい。  なお、新しいAPIで Tiger と Whirlpool を実装してみたものが以下に 置いてあります。 http://rubyforge.org/viewvc/?root=digest  従来はRuby本体のソースなしに単独ビルドすることが難しかったので、 別配布できることは今回の成果と考えています。(よほど普及しない限り 標準配布に加える気はないので) -- / /__ __ Akinori.org / MUSHA.org / ) ) ) ) / FreeBSD.org / Ruby-lang.org Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp "Different eyes see different things, Different hearts beat on different strings -- But there are times for you and me when all such things agree"