[#23884] Ruby 1.8.2 preview1にむけて — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

34 messages 2004/07/13
[#23917] Re: Ruby 1.8.2 preview1にむけて — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/07/16

山本です。

[#23920] Re: Ruby 1.8.2 preview1にむけて — "NAKAMURA, Hiroshi" <nakahiro@...> 2004/07/16

なひです。

[#23922] ruby 1.8.2 preview1 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

27 messages 2004/07/16

[#23995] String#each -> String#each_char — Shugo Maeda <shugo@...>

前田です。

27 messages 2004/07/30
[#23996] Re: String#each -> String#each_char — matz@... (Yukihiro Matsumoto) 2004/07/30

まつもと ゆきひろです

[#23997] Re: String#each -> String#each_char — "U.Nakamura" <usa@...> 2004/07/30

こんにちは、なかむら(う)です。

[#23999] Re: String#each -> String#each_char — matz@... (Yukihiro Matsumoto) 2004/07/30

まつもと ゆきひろです

[#24000] Re: String#each -> String#each_char — "U.Nakamura" <usa@...> 2004/07/30

こんにちは、なかむら(う)です。

[#24005] Re: String#each -> String#each_char — Minero Aoki <aamine@...> 2004/07/31

青木です。

[#24012] Re: String#each -> String#each_char — Shugo Maeda <shugo@...> 2004/08/01

前田です。

[#24014] Re: String#each -> String#each_char — Minero Aoki <aamine@...> 2004/08/02

青木です。

[ruby-dev:23936] Re: Ruby 1.8.2 preview1にむけて

From: "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date: 2004-07-17 09:55:39 UTC
List: ruby-dev #23936
山本です。進展がありました。どうも、通常設定されている
SystemRoot という環境変数がないと、require 自体が遅くなるようです。

/////////////////////////////////
// a.rb

require "benchmark"

Benchmark.bm do |x|
  x.report { IO.popen("e:/ruby_1_8/bin/ruby.exe b.rb 0", "w").close }
  x.report { IO.popen("e:/ruby_1_8/bin/ruby.exe b.rb 1", "w").close }
  x.report { IO.popen("e:/ruby_1_8/bin/ruby.exe b.rb 2", "w").close }
  x.report { IO.popen("e:/ruby_1_8/bin/ruby.exe b.rb 3", "w").close }
end

/////////////////////////////////
// b.rb

hash = nil

case ARGV[0].to_i
when 1
hash = {}
when 2
hash = {"PATH"=>"E:\\Borland\\CBUILD~1\\Projects\\Bpl;E:\\Borland\\CBUILD~1\\Bin;C:\\WINNT\\system32;C:\\WINNT;C:\\WINNT\\System32\\Wbem;d:\\shell\\runtime;e:\\borland\\cbuilder5\\bin;e:\\sun\\jdk1.5.0\\bin;e:\\ruby\\bin;d:\\dos;e:\\ruby\\bin;d:\\win32\\gnupg;e:\\mingw\\bin;E:\\Borland\\CBuilder5\\Source\\RTL\\Tools"}
when 3
hash = {"PATH"=>"E:\\Borland\\CBUILD~1\\Projects\\Bpl;E:\\Borland\\CBUILD~1\\Bin;C:\\WINNT\\system32;C:\\WINNT;C:\\WINNT\\System32\\Wbem;d:\\shell\\runtime;e:\\borland\\cbuilder5\\bin;e:\\sun\\jdk1.5.0\\bin;e:\\ruby\\bin;d:\\dos;e:\\ruby\\bin;d:\\win32\\gnupg;e:\\mingw\\bin;E:\\Borland\\CBuilder5\\Source\\RTL\\Tools", "SystemRoot"=>"C:\\WINNT"}
end

if hash
  ENV.keys.each{|name| ENV.delete(name) }
  hash.each{|k, v| ENV[k] = v if v }
end

exec("e:/ruby_1_8/bin/ruby.exe", "c.rb")

/////////////////////////////////
// c.rb

require "soap/rpc/cgistub"

/////////////////////////////////
// 実行結果

E:\ruby_1_8\bin>ruby a.rb
      user     system      total        real
  0.000000   0.010000   0.010000 (  7.511000) # 本来の環境変数
  0.000000   0.010000   0.010000 ( 16.464000) # 環境変数を全部消した場合
  0.000000   0.010000   0.010000 ( 57.154000) # PATH だけ残した場合
  0.000000   0.000000   0.000000 (  7.481000) # PATH と SystemRoot を残した場合

----------------------------------------------------------------------------------------------------

なぜか、exec 側で環境変数をいじると遅くなるのに、exec された側でいじると遅くなりません。

/////////////////////////////////
// b.rb(変更版)

exec("e:/ruby_1_8/bin/ruby.exe", "c.rb")

/////////////////////////////////
// c.rb(変更版)

hash = nil

case ARGV[0].to_i
when 1
hash = {}
when 2
hash = {"PATH"=>"E:\\Borland\\CBUILD~1\\Projects\\Bpl;E:\\Borland\\CBUILD~1\\Bin;C:\\WINNT\\system32;C:\\WINNT;C:\\WINNT\\System32\\Wbem;d:\\shell\\runtime;e:\\borland\\cbuilder5\\bin;e:\\sun\\jdk1.5.0\\bin;e:\\ruby\\bin;d:\\dos;e:\\ruby\\bin;d:\\win32\\gnupg;e:\\mingw\\bin;E:\\Borland\\CBuilder5\\Source\\RTL\\Tools"}
when 3
hash = {"PATH"=>"E:\\Borland\\CBUILD~1\\Projects\\Bpl;E:\\Borland\\CBUILD~1\\Bin;C:\\WINNT\\system32;C:\\WINNT;C:\\WINNT\\System32\\Wbem;d:\\shell\\runtime;e:\\borland\\cbuilder5\\bin;e:\\sun\\jdk1.5.0\\bin;e:\\ruby\\bin;d:\\dos;e:\\ruby\\bin;d:\\win32\\gnupg;e:\\mingw\\bin;E:\\Borland\\CBuilder5\\Source\\RTL\\Tools", "SystemRoot"=>"C:\\WINNT"}
end

if hash
  ENV.keys.each{|name| ENV.delete(name) }
  hash.each{|k, v| ENV[k] = v if v }
end

require "soap/rpc/cgistub"

/////////////////////////////////
// 実行結果(変更版)

E:\ruby_1_8\bin>ruby a.rb
      user     system      total        real
  0.000000   0.010000   0.010000 (  7.531000)
  0.000000   0.000000   0.000000 (  7.531000)
  0.000000   0.010000   0.010000 (  7.531000)
  0.000000   0.000000   0.000000 (  7.532000)

------------------------------------------------------------------------------------------------------

試しにこうしてみると、

Index: cgi_runner.rb
===================================================================
RCS file: /var/cvs/src/ruby/lib/webrick/httpservlet/cgi_runner.rb,v
retrieving revision 1.1
diff -u -w -b -p -r1.1 cgi_runner.rb
--- cgi_runner.rb	23 Jul 2003 16:51:36 -0000	1.1
+++ cgi_runner.rb	17 Jul 2004 09:45:33 -0000
@@ -35,6 +35,8 @@ hash = Marshal.restore(dump)
 ENV.keys.each{|name| ENV.delete(name) }
 hash.each{|k, v| ENV[k] = v if v }
 
+ENV["SystemRoot"] = "C:\\WINNT"
+
 dir = File::dirname(ENV["SCRIPT_FILENAME"])
 Dir::chdir dir
 
成功します。

E:\ruby_1_8\bin>testrb -v e:/ruby-cvs/ruby_1_8/test/soap/calc/test_calc_cgi.rb
Loaded suite test_calc_cgi.rb
Started
test_calc_cgi(SOAP::Calc::TestCalcCGI): .

Finished in 66.808 seconds.

1 tests, 7 assertions, 0 failures, 0 errors










In This Thread