From: Wakou Aoyama Date: 2001-11-10T04:31:31+09:00 Subject: [ruby-list:32280] Re: fastcgi.rb and cgi.rb 青山です。 On Fri, Nov 09, 2001 at 02:28:21PM +0900, Shugo Maeda wrote: > 前にも提案しましたが、いっそのこと、CGI_PARAMSやCGI_COOKIESなどの > 定数に計算結果をキャッシュするのを止めてしまってはどうでしょう。 > > 理由は、 > > 1) at_exitの挙動に依存すると汎用性が下がる。 > 2) これらのキャッシュの恩恵を受けるスクリプトは(たぶん)まれである。 以前の提案の時に、導入理由となった要望を思い出そうとして、そのまま忘れ ていました。すみません。 1) はすでに何度か話が出ていますし、私も at_exit 以前に、定数を利用する のは避けたいと思っていますので、無くす事には賛成です。 2) については、確かに本来は不要なのですが、実は別な所に問題があります。 params = CGI.new() html = CGI.new("html4") このようにして使いたい、という要望に対応するものです。あるいは、まれに は、次のような要望もあったと思います。 params = CGI.new() html3 = CGI.new("html3") html4 = CGI.new("html4") つまりは、どちらかというと、パラメータを複数回扱う為のキャッシュではな く、単に、複数の CGI オブジェクトを生成できるようにする為のキャッシュ なわけです。 これは、HTML 生成機能を外に出してしまって、 html = HTML.new("html4") などとしてしまえば良いのですが、とりあえず、HTML 生成機能も含めた CGI ライブラリが欲しい、cgi.rb 内に HTML クラス、というのも変だろう、など というような事から、CGI.pm と同じ仕様として、現状のようになっています。 従って、CGI.pm でもやはり同じような泥臭い事をやっているわけですが、い や、perl にはグローバル変数がどう、とか、at_exit 相当が(一応)無いので、 Apache に頼って、 > if ($CGI::MOD_PERL) { > Apache->request->register_cleanup(\&CGI::Object::_reset_globals); > undef $NPH; > } などと、さらに複雑になっています。 ま、それはそれとして、Ruby での方向としては、 params = CGI.new html = HTML.new("4Tr") などとして良さそうですが、さき程あげた、cgi.rb 内に HTML クラスを含め て良いか、あるいは、HTML 生成機能を別ライブラリに出してしまって良いか、 という議論が必要かと思います。 -- 青山 和光 Wakou Aoyama