[#28924] IO.popen("echo a") clear O_APPEND of other fds. — Tanaka Akira <akr@...17n.org>
以下のように、IO.popen("echo a") が関係ない他の IO の
なかだです。
[#28942] FUNC_CDECL/FUNC_STDCALL are not defined? — KIMURA Koichi <kimura.koichi@...>
木村です。
こんにちは、なかむら(う)です。
U.Nakamura wrote:
こんにちは、なかむら(う)です。
U.Nakamura wrote:
こんにちは、なかむら(う)です。
U.Nakamura wrote:
In article <44AA3F42.4060800@ttsky.net>,
Tanaka Akira wrote:
Takaaki Tateishi wrote:
卜部です。
URABE Shyouhei wrote:
Takaaki Tateishi wrote:
[#28960] 世代別 GC について — MORITA Naoyuki <mlgetter@...>
森田と申します.
[#28971] [ BUG ] $0 cannot keep the given string — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
[#28988] size of st_data_t — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#29006] block wrapper — Tanaka Akira <akr@...>
以前、[ruby-dev:28747] の pp.rb の問題を解決するのに
まつもと ゆきひろです
In article <1152541094.492146.23781.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1152542689.441125.24418.nullmailer@x31.priv.netlab.jp>,
In article <87psgd8qb2.fsf@fsij.org>,
In article <87r70rdpeg.fsf@fsij.org>,
In article <871wshddvn.fsf@fsij.org>,
In article <87ac5g5a7i.fsf@fsij.org>,
In article <8764foo7s7.fsf@fsij.org>,
In article <87venar27i.fsf@fsij.org>,
まつもと ゆきひろです
In article <1178883053.645482.13087.nullmailer@x31.netlab.jp>,
まつもと ゆきひろです
In article <1178978140.846301.8164.nullmailer@x31.netlab.jp>,
まつもと ゆきひろです
ささだです。
In article <465E1040.7020009@atdot.net>,
まつもと ゆきひろです
In article <E1HtaMS-00041i-6U@x31>,
まつもと ゆきひろです
In article <E1HtenN-0006CM-2a@x31>,
まつもと ゆきひろです
In article <E1Htx6H-00073o-Cw@x31>,
In article <E1Hv3TT-0004LL-L8@x31>,
まつもと ゆきひろです
[#29013] problem in bignorm — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
まつもと ゆきひろです
[#29014] def m(a=nil, b) — Tanaka Akira <akr@...>
ふと、1.9 なら (TCPServer#initialize のように) 第一引数を省
[#29032] rational 1.12 — Tadayoshi Funaba <tadf@...>
ふなばです。
なかだです。
ふなばです。
[#29038] irb completion — Tadayoshi Funaba <tadf@...>
ふなばです。
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
[#29044] block parameters for class_exec,module_exec,instance_exec — Takaaki Tateishi <ttate@...>
class_exec,module_exec,instance_execのブロックパラメータの仕様について
[#29080] UNIXSocket problem with ruby 1.8.5 preview2 on cygwin — Kouhei Yanagita <yanagi@...>
柳田です。
[#29089] test_strtod(TestFloat): ArgumentError: invalid value for Float(): "0." on 1.9 — Tanaka Akira <akr@...>
2006-07-18 以来、1.9 の test-all で (他のたくさんの失敗に紛
[#29093] Re: [ruby-cvs:17195] ruby/test/rss: * object.c (rb_mod_attr): make Module#attr to be an alias to — Tanaka Akira <akr@...>
In article <20060720173258.5D4BAC6781@lithium.ruby-lang.org>,
まつもと ゆきひろです
In article <1153423941.406034.21948.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1153425319.663162.22588.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1153446431.981115.25434.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1153449042.979962.26498.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1153453341.450474.27973.nullmailer@x31.priv.netlab.jp>,
[#29141] テスト2 — Tadayoshi Funaba <tadf@...>
もしかするとスパムかも。
[#29148] Re: [ruby-cvs:17256] ruby, ruby: * time.c (time_to_s): generate RFC822 style date string. — WATANABE Hirofumi <eban@...>
わたなべです。
成瀬です。
まつもと ゆきひろです
卜部です
まつもと ゆきひろです
卜部です。
成瀬です。
まつもと ゆきひろです
成瀬です
まつもと ゆきひろです
成瀬です。
まつもと ゆきひろです
成瀬です。
まつもと ゆきひろです
ふなばです。
まつもと ゆきひろです
> 郵便局の消印は採用できないんですが、なにが良いと思いますか。
まつもと ゆきひろです
なかだです。
ふなばです。
[#29158] backport — "MIYAMUKO Katsuyuki" <miyamuko@...>
みやむこです。
[ruby-dev:29022] Re: block wrapper
In article <87psgd8qb2.fsf@fsij.org>,
Tanaka Akira <akr@fsij.org> writes:
> えー、*ba で 受けて yield(*ba) で送るって、件の
> http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/lib/pp.rb.diff?r1=1.47;r2=1.48
> の変更以前のやりかたそのままじゃないですか。
>
> ということはそれでぜんぶうまくいくはずはなくて、調べてみると
> やっぱりうまくいかない例が出てきます。
系統的に調べる気になって、スクリプトを書いて調べて見ました。
その結果、1.8 でも完全な wrapper は書けていなかった、という
ことが判明してしまいました。
いちばんましなのは 1.8 での {|*v| yield(*v) } ですが、それで
も以下のように違いが出ることがあります。
% ruby-1.8 -ve '
def m() yield [] end
m {|v1,v2| p [v1,v2] }
def w() m {|*v| yield(*v) } end
w {|v1,v2| p [v1,v2] }'
ruby 1.8.4 (2006-06-08) [i686-linux]
[nil, nil]
[[], nil]
いろいろなケースを自動生成し、直接呼ぶのとラッパーを通して呼
ぶのの結果が異なるものを数えてみると、以下のようになりました。
% ~/ruby/18/ruby/ruby check.rb
{|*v| yield(*v) }: 2332/29304 7.95795795795796%
{|v| yield(v) }: 7092/29304 24.2014742014742%
{|*v| b.call(*v) }: 4475/29304 15.2709527709528%
{|v| b.call(v) }: 14545/29304 49.6348621348621%
% ~/ruby/18/ruby/ruby -v
ruby 1.8.5 (2006-07-11) [i686-linux]
% ~/ruby/19/ruby/ruby check.rb
{|*v| yield(*v) }: 11484/43956 26.1261261261261%
{|v| yield(v) }: 18989/43956 43.2000182000182%
{|*v| b.call(*v) }: 12688/43956 28.8652288652289%
{|v| b.call(v) }: 36376/43956 82.7554827554828%
{|*v| b.yield(*v) }: 11751/43956 26.7335517335517%
{|v| b.yield(v) }: 18974/43956 43.1658931658932%
% ~/ruby/19/ruby/ruby -v
ruby 1.9.0 (2006-07-12) [i686-linux]
最初の
{|*v| yield(*v) }: 2332/29304 7.95795795795796%
というのが一番成績が良くて、29304種類のテストのうち、結果が
異なる (ラッパーが影響してしまう) のが 2332種類しかなく、
約8% しか失敗していないということを示しています。
なお、1.8 と 1.9 でテストの数が違うのは Proc#yield の有無で
す。
で、この結果をどう考えるかですが、いままでやってこれたんだか
ら完全なラッパーなんて書けなくても構わない、と考えるか、やは
り欲しいのでどうにか、と考えるか、どうかなぁ。
ただ、1.9 の挙動はラッパーを書くという観点からは悪化していま
すね。少なくともここで生成しているテストの範囲でいえば。
block-wrapper.rb:
ARGS = %W[
#{}
v1
v1,v2
*v1
v1,*v2
v1,v2,*v3
]
YIELDS = %W[
yield
b.yield
b.call
]
YIELDS.delete("b.yield") unless lambda{}.respond_to? :yield
VALUES = %W[
0
[]
[0]
[[]]
[[0]]
[[[]]]
[0,0]
[0,[]]
[[],0]
[[],[]]
]
WRAPPERS = [
"{|*v| yield(*v) }",
"{|v| yield(v) }",
"{|*v| b.call(*v) }",
"{|v| b.call(v) }",
"{|*v| b.yield(*v) }",
"{|v| b.yield(v) }",
]
WRAPPERS.reject! {|b| /b.yield/ =~ b } unless lambda{}.respond_to? :yield
CALLEE = {}
def define_callee
name = "t00"
ns = []
ARGS.each {|as|
vars = as.scan(/v\d/)
vars << '&b'
YIELDS.each {|y|
d = "def #{name}(#{vars.join(',')}) #{y}(#{as}) end"
n = name.dup
CALLEE[n] = d
puts d if $VERBOSE
eval(d)
ns << n
name.succ!
}
}
ns
end
callee_names = define_callee
def perm(vs, n)
if n == 0
yield []
else
perm(vs, n-1) {|vv|
vs.each {|v| yield vv + [v] }
}
end
end
def check_wrapper(callee_names)
error = 0
numtests = 0
callee_names.each {|callee|
arity = method(callee).arity
perm(VALUES, arity) {|vv|
ARGS.each {|as|
vars = as.scan(/v\d/)
block = "{|#{as}| r0 = [#{vars.join(',')}] }"
block1 = block.sub(/r0/, "r1")
block2 = block.sub(/r0/, "r2")
code1 = <<"End".gsub(/^ */, '')
r1 = nil; #{callee}(#{vv.join(',')}) #{block1}
r2 = nil; wrapper(#{([":"+callee]+vv).join(',')}) #{block2}
End
code2 = <<"End".gsub(/^ */, '')
numtests += 1
if r1 != r2
error += 1
if $VERBOSE
puts
puts CALLEE[#{callee.dump}]
puts code1
p r1
p r2
end
end
End
eval code1 + code2
code1 = <<"End".gsub(/^ */, '')
r1 = nil; #{callee}(#{(vv+["&lambda #{block1}"]).join(',')}) rescue r1 = $!
r2 = nil; wrapper(#{([":"+callee]+vv+["&lambda #{block2}"]).join(',')}) rescue r2 = $!
End
eval code1 + code2
}
}
}
[error, numtests]
end
$VERBOSE = nil if !$VERBOSE
WRAPPERS.each {|w|
eval "def wrapper(n, *as, &b) __send__(n, *as) #{w} end"
error, numtests = check_wrapper(callee_names)
puts "#{w}:\t#{error}/#{numtests}\t#{error*100.0/numtests}%"
undef wrapper
}
--
[田中 哲][たなか あきら][Tanaka Akira]