<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.lang.ruby.devel">
    <title>gmane.comp.lang.ruby.devel</title>
    <link>http://blog.gmane.org/gmane.comp.lang.ruby.devel</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19713"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19712"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19711"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19710"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19709"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19708"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19707"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19706"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19705"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19704"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19703"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19702"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19701"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19700"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19699"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19698"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19697"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19696"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19695"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19694"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19713">
    <title>[ruby-dev:45678] Re: [ruby-trunk - Bug #6479][Assigned] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19713</link>
    <description>&lt;pre&gt;こんばんは、かみやです。
ご返信有難うございます。

2012年5月23日 17:23 U.Nakamura &amp;lt;usa&amp;lt; at &amp;gt;garbagecollect.jp&amp;gt;:

確かに、どの環境でもこの辺のチェックを経由するようになれば
安心感が増すと思います。
追加される IPSocket.valid_v4? だと 、「0埋めは3桁まで許容」
「末尾の改行文字は許容」 になる感じでしょうか


ただ、現在Windows上でこれらのパターンを弾いてくれているのと、
ipaddrライブラリの require前でも、
Socket::AF_INET6 の定義されていることが気になりました。

## Windows(7) / ruby 1.9.3p194 (2012-04-20) [i386-mingw32]

    require 'socket'

    Socket.const_defined? :AF_INET6 #=&amp;gt; true
    Socket::AF_INET6                #=&amp;gt; 23


何か根本的に勘違いしているようであれば申し訳ありません。


&lt;/pre&gt;</description>
    <dc:creator>Kenichi Kamiya</dc:creator>
    <dc:date>2012-05-24T15:03:08</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19712">
    <title>[ruby-dev:45677] [ruby-trunk - Feature #3447] argument delegation</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19712</link>
    <description>&lt;pre&gt;
Issue #3447 has been updated by nobu (Nobuyoshi Nakada).

Description updated


----------------------------------------
Feature #3447: argument delegation
https://bugs.ruby-lang.org/issues/3447#change-26800

Author: nobu (Nobuyoshi Nakada)
Status: Feedback
Priority: Low
Assignee: 
Category: 
Target version: 


=begin
なかだです。

((&amp;lt;URL:http://www.rubyist.net/~matz/20100615.html#p01&amp;gt;))を実装してみました。
(({foo(...)}))でブロックまでコミ、(({foo(..)}))はブロック抜きにしてあります。
 
 
 diff --git i/compile.c w/compile.c
 index 4621cd9..d769c56 100644
 --- i/compile.c
 +++ w/compile.c
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2729,7 +2729,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret,
  return 1;
  
        case NODE_SUPER:
 -      case NODE_ZSUPER:
  ADD_INSN(ret, nd_line(node), putnil);
  ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_ZSUPER), 0,
    needstr);
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2919,6 +2918,67 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; setup_args(rb_iseq_t *iseq, LINK_ANCHOR *args, NODE *argn, unsigned long *flag)
      POP_ELEMENT(args);
      break;
    }
 +  case NODE_DELEGATE: {
 +    int i;
 +    rb_iseq_t *liseq = iseq-&amp;gt;local_iseq;
 +
 +    if (argn-&amp;gt;nd_state) *flag |= VM_CALL_SUPER_BIT;
 +    argc = INT2FIX(liseq-&amp;gt;argc);
 +
 +    /* normal arguments */
 +    for (i = 0; i &amp;lt; liseq-&amp;gt;argc; i++) {
 +int idx = liseq-&amp;gt;local_size - i;
 +ADD_INSN1(args, nd_line(argn), getlocal, INT2FIX(idx));
 +    }
 +
 +    if (!liseq-&amp;gt;arg_simple) {
 +if (liseq-&amp;gt;arg_opts) {
 +    /* optional arguments */
 +    int j;
 +    for (j = 0; j &amp;lt; liseq-&amp;gt;arg_opts - 1; j++) {
 +int idx = liseq-&amp;gt;local_size - (i + j);
 +ADD_INSN1(args, nd_line(argn), getlocal, INT2FIX(idx));
 +    }
 +    i += j;
 +    argc = INT2FIX(i);
 +}
 +
 +if (liseq-&amp;gt;arg_rest != -1) {
 +    /* rest argument */
 +    int idx = liseq-&amp;gt;local_size - liseq-&amp;gt;arg_rest;
 +    ADD_INSN1(args, nd_line(argn), getlocal, INT2FIX(idx));
 +    argc = INT2FIX(liseq-&amp;gt;arg_rest + 1);
 +    *flag |= VM_CALL_ARGS_SPLAT_BIT;
 +}
 +
 +if (liseq-&amp;gt;arg_post_len) {
 +    /* post arguments */
 +    int post_len = liseq-&amp;gt;arg_post_len;
 +    int post_start = liseq-&amp;gt;arg_post_start;
 +
 +    if (liseq-&amp;gt;arg_rest != -1) {
 +int j;
 +for (j=0; j&amp;lt;post_len; j++) {
 +    int idx = liseq-&amp;gt;local_size - (post_start + j);
 +    ADD_INSN1(args, nd_line(argn), getlocal, INT2FIX(idx));
 +}
 +ADD_INSN1(args, nd_line(argn), newarray, INT2FIX(j));
 +ADD_INSN (args, nd_line(argn), concatarray);
 +/* argc is setteled at above */
 +    }
 +    else {
 +int j;
 +for (j=0; j&amp;lt;post_len; j++) {
 +    int idx = liseq-&amp;gt;local_size - (post_start + j);
 +    ADD_INSN1(args, nd_line(argn), getlocal, INT2FIX(idx));
 +}
 +argc = INT2FIX(post_len + post_start);
 +    }
 +}
 +    }
 +
 +            break;
 +          }
    default: {
      rb_bug("setup_arg: unknown node: %s\n", ruby_node_name(nd_type(argn)));
    }
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4115,8 +4175,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
  }
  break;
        }
 -      case NODE_SUPER:
 -      case NODE_ZSUPER:{
 +      case NODE_SUPER: {
  DECL_ANCHOR(args);
  VALUE argc;
  unsigned long flag = 0;
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4124,72 +4183,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
  
  INIT_ANCHOR(args);
  iseq-&amp;gt;compile_data-&amp;gt;current_block = Qfalse;
 -if (nd_type(node) == NODE_SUPER) {
 -    argc = setup_args(iseq, args, node-&amp;gt;nd_args, &amp;amp;flag);
 -}
 -else {
 -    /* NODE_ZSUPER */
 -    int i;
 -    rb_iseq_t *liseq = iseq-&amp;gt;local_iseq;
 -
 -    argc = INT2FIX(liseq-&amp;gt;argc);
 -
 -    /* normal arguments */
 -    for (i = 0; i &amp;lt; liseq-&amp;gt;argc; i++) {
 -int idx = liseq-&amp;gt;local_size - i;
 -ADD_INSN1(args, nd_line(node), getlocal, INT2FIX(idx));
 -    }
 -
 -    if (!liseq-&amp;gt;arg_simple) {
 -if (liseq-&amp;gt;arg_opts) {
 -    /* optional arguments */
 -    int j;
 -    for (j = 0; j &amp;lt; liseq-&amp;gt;arg_opts - 1; j++) {
 -int idx = liseq-&amp;gt;local_size - (i + j);
 -ADD_INSN1(args, nd_line(node), getlocal, INT2FIX(idx));
 -    }
 -    i += j;
 -    argc = INT2FIX(i);
 -}
 -
 -if (liseq-&amp;gt;arg_rest != -1) {
 -    /* rest argument */
 -    int idx = liseq-&amp;gt;local_size - liseq-&amp;gt;arg_rest;
 -    ADD_INSN1(args, nd_line(node), getlocal, INT2FIX(idx));
 -    argc = INT2FIX(liseq-&amp;gt;arg_rest + 1);
 -    flag |= VM_CALL_ARGS_SPLAT_BIT;
 -}
 -
 -if (liseq-&amp;gt;arg_post_len) {
 -    /* post arguments */
 -    int post_len = liseq-&amp;gt;arg_post_len;
 -    int post_start = liseq-&amp;gt;arg_post_start;
 -
 -    if (liseq-&amp;gt;arg_rest != -1) {
 -int j;
 -for (j=0; j&amp;lt;post_len; j++) {
 -    int idx = liseq-&amp;gt;local_size - (post_start + j);
 -    ADD_INSN1(args, nd_line(node), getlocal, INT2FIX(idx));
 -}
 -ADD_INSN1(args, nd_line(node), newarray, INT2FIX(j));
 -ADD_INSN (args, nd_line(node), concatarray);
 -/* argc is setteled at above */
 -    }
 -    else {
 -int j;
 -for (j=0; j&amp;lt;post_len; j++) {
 -    int idx = liseq-&amp;gt;local_size - (post_start + j);
 -    ADD_INSN1(args, nd_line(node), getlocal, INT2FIX(idx));
 -}
 -argc = INT2FIX(post_len + post_start);
 -    }
 -}
 -    }
 -}
 +argc = setup_args(iseq, args, node-&amp;gt;nd_args, &amp;amp;flag);
  
  /* dummy receiver */
  ADD_INSN1(ret, nd_line(node), putobject,
 -  nd_type(node) == NODE_ZSUPER ? Qfalse : Qtrue);
 +  (flag &amp;amp; VM_CALL_SUPER_BIT) ? Qfalse : Qtrue);
 +flag &amp;amp;= ~VM_CALL_SUPER_BIT;
  ADD_SEQ(ret, args);
  ADD_INSN3(ret, nd_line(node), invokesuper,
    argc, parent_block, LONG2FIX(flag));
 diff --git i/gc.c w/gc.c
 index 58e4550..0d5fbad 100644
 --- i/gc.c
 +++ w/gc.c
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1671,7 +1671,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; gc_mark_children(rb_objspace_t *objspace, VALUE ptr, int lev)
      goto again;
  
    case NODE_ZARRAY:/* - */
 -  case NODE_ZSUPER:
 +  case NODE_DELEGATE:
    case NODE_VCALL:
    case NODE_GVAR:
    case NODE_LVAR:
 diff --git i/insns.def w/insns.def
 index f75007d..6c1efdc 100644
 --- i/insns.def
 +++ w/insns.def
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -993,10 +993,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; send
  {
      const rb_method_entry_t *me;
      VALUE recv, klass;
 -    rb_block_t *blockptr = 0;
 +    rb_block_t *blockptr = (op_flag &amp;amp; VM_CALL_SUPER_BIT) ? GET_BLOCK_PTR() : 0;
      int num = caller_setup_args(th, GET_CFP(), op_flag, (int)op_argc,
  (rb_iseq_t *)blockiseq, &amp;amp;blockptr);
 -    rb_num_t flag = op_flag;
 +    rb_num_t flag = op_flag &amp;amp; ~VM_CALL_SUPER_BIT;
      ID id = op_id;
  
      /* get receiver */
 diff --git i/node.c w/node.c
 index 65bc541..f2900d3 100644
 --- i/node.c
 +++ w/node.c
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -408,10 +408,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; dump_node(VALUE buf, VALUE indent, int comment, NODE *node)
  F_NODE(nd_args, "arguments");
  break;
  
 -      case NODE_ZSUPER:
 -ANN("super invocation with no argument");
 -ANN("format: super");
 -ANN("example: super");
 +      case NODE_DELEGATE:
 +        if (node-&amp;gt;nd_state) {
 +    ANN("argument delegation with block");
 +    ANN("format: ...");
 +    ANN("example: foo(...)");
 +        }
 +else {
 +    ANN("argument delegation without block");
 +    ANN("format: ..");
 +    ANN("example: foo(..)");
 +}
  break;
  
        case NODE_ARRAY:
 diff --git i/node.h w/node.h
 index f8cf7de..74320c0 100644
 --- i/node.h
 +++ w/node.h
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -96,8 +96,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; enum node_type {
  #define NODE_VCALL       NODE_VCALL
      NODE_SUPER,
  #define NODE_SUPER       NODE_SUPER
 -    NODE_ZSUPER,
 -#define NODE_ZSUPER      NODE_ZSUPER
 +    NODE_DELEGATE,
 +#define NODE_DELEGATE    NODE_DELEGATE
      NODE_ARRAY,
  #define NODE_ARRAY       NODE_ARRAY
      NODE_ZARRAY,
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -414,7 +414,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef struct RNode {
  #define NEW_FCALL(m,a) NEW_NODE(NODE_FCALL,0,m,a)
  #define NEW_VCALL(m) NEW_NODE(NODE_VCALL,0,m,0)
  #define NEW_SUPER(a) NEW_NODE(NODE_SUPER,0,0,a)
 -#define NEW_ZSUPER() NEW_NODE(NODE_ZSUPER,0,0,0)
 +#define NEW_DELEGATE(b) NEW_NODE(NODE_DELEGATE,0,0,b)
  #define NEW_ARGS(m,o) NEW_NODE(NODE_ARGS,o,m,0)
  #define NEW_ARGS_AUX(r,b) NEW_NODE(NODE_ARGS_AUX,r,b,0)
  #define NEW_OPT_ARG(i,v) NEW_NODE(NODE_OPT_ARG,i,v,0)
 diff --git i/parse.y w/parse.y
 index 9fac5bd..735d1bf 100644
 --- i/parse.y
 +++ w/parse.y
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2399,6 +2399,20 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; opt_paren_args: none
  
  opt_call_args: none
  | call_args
 +| tDOT2
 +    {
 +    /*%%%*/
 +$$ = NEW_DELEGATE(0);
 +    /*%
 +    %*/
 +    }
 +| tDOT3
 +    {
 +    /*%%%*/
 +$$ = NEW_DELEGATE(1);
 +    /*%
 +    %*/
 +    }
  ;
  
  call_args: command
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3647,7 +3661,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; method_call: operation paren_args
  | keyword_super
      {
      /*%%%*/
 -$$ = NEW_ZSUPER();
 +$$ = NEW_SUPER(NEW_DELEGATE(1));
      /*%
  $$ = dispatch0(zsuper);
      %*/
 diff --git i/test/ruby/test_method.rb w/test/ruby/test_method.rb
 index 7be70b0..a04a285 100644
 --- i/test/ruby/test_method.rb
 +++ w/test/ruby/test_method.rb
 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -345,4 +345,38 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class TestMethod &amp;lt; Test::Unit::TestCase
      obj.extend(m)
      assert_equal([:m1, :a], obj.public_methods(false), bug)
    end
 +
 +  def test_argument_delegate
 +    class &amp;lt;&amp;lt; (o = Object.new)
 +      def foo(*args)
 +        yield(*args)
 +      end
 +      def foo1(*)
 +        foo(...)
 +      end
 +      def foo2(*)
 +        foo1(...)
 +      end
 +      def bar(*args, &amp;amp;block)
 +        [args, block]
 +      end
 +      def bar1(*)
 +        bar(..)
 +      end
 +      def bar2(*)
 +        bar1(..)
 +      end
 +    end
 +    called = nil
 +    assert_equal([42], o.foo1(42) {|*x| called = x})
 +    assert_equal([42], called)
 +    called = nil
 +    assert_equal([42], o.foo2(42) {|*x| called = x})
 +    assert_equal([42], called)
 +    called = :not_called
 +    assert_equal([[42], nil], o.bar1(42) {|*x| called = true})
 +    assert_equal(:not_called, called)
 +    assert_equal([[42], nil], o.bar2(42) {|*x| called = true})
 +    assert_equal(:not_called, called)
 +  end
  end
 
 
 
&lt;/pre&gt;</description>
    <dc:creator>nobu (Nobuyoshi Nakada</dc:creator>
    <dc:date>2012-05-24T14:54:09</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19711">
    <title>[ruby-dev:45676] Re: Bug?: level argument of caller</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19711</link>
    <description>&lt;pre&gt;　ご意見ありがとうございます．では，修正します．

(2012/05/24 11:09), KOSAKI Motohiro wrote:


&lt;/pre&gt;</description>
    <dc:creator>SASADA Koichi</dc:creator>
    <dc:date>2012-05-24T03:33:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19710">
    <title>[ruby-dev:45675] Re: Bug?: level argument of caller</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19710</link>
    <description>&lt;pre&gt;2012/5/23 Urabe Shyouhei &amp;lt;shyouhei&amp;lt; at &amp;gt;ruby-lang.org&amp;gt;:

同じく。

あからさまにおかしい奴にたいして、バグに依存してるやつが・・・とか考え出すとキリがないですよ。こういうのはギャっと言われてから考えるしかないと思う


&lt;/pre&gt;</description>
    <dc:creator>KOSAKI Motohiro</dc:creator>
    <dc:date>2012-05-24T02:09:44</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19709">
    <title>[ruby-dev:45674] Re: Bug?: level argument of caller</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19709</link>
    <description>&lt;pre&gt;callerの引数は0と1以外使ってるの見たことないので、どうでもいいんじゃないでしょうか。
修正してしまうのに一票。

On 05/24/2012 12:54 AM, SASADA Koichi wrote:


&lt;/pre&gt;</description>
    <dc:creator>Urabe Shyouhei</dc:creator>
    <dc:date>2012-05-24T01:38:02</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19708">
    <title>[ruby-dev:45673] Bug?: level argument of caller</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19708</link>
    <description>&lt;pre&gt;　ささだです．

　caller(level) のように，caller メソッドでは何段上からバックトレースを
持ってくるか，というのを level という引数で指定できます．

　なんとなく，level 分だけバックトレースの情報が減るように思えるのです
が，つまり

    caller(0).size - level == caller(level).size

となりそうなもんですが，実際はそうなりません．


例：

a = [1]
a.map{
  a.map{
    a.map{
      10.times{|i|
        p [i, caller(i).size]
      }
    }
  }
}
#=&amp;gt;
ruby 2.0.0dev (2012-05-04 trunk 35535) [i386-mswin32_100]
[0, 9]
[1, 8]
[2, 8] # 上と変わらない
[3, 7]
[4, 6]
[5, 6] # 上と変わらない
[6, 5]
[7, 4]
[8, 4] # 上と変わらない
[9, 3]

　理由は，level を，VM のスタックフレームを level 個スキップする，と扱っ
ているのですが，スタックフレームの種類によってはバックトレースに出てこな
い場合もあるので，そのスキップされた分を level でスキップする数にいれて
いるから，という理由です．

　1.8 だと期待通り（？）動きます．

#=&amp;gt; ruby 1.8.7 (2012-02-08 patchlevel 358) [i386-cygwin]
[0, 9]
[1, 8]
[2, 7]
[3, 6]
[4, 5]
[5, 4]
[6, 3]
[7, 2]
[8, 1]
[9, 0]


　というわけで，バグな気もするんですが，どうしたもんでしょう．これまで苦
情も来てないから，どうでもいいような気もするんですが．2.0 から直します？

&lt;/pre&gt;</description>
    <dc:creator>SASADA Koichi</dc:creator>
    <dc:date>2012-05-23T15:54:02</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19707">
    <title>[ruby-dev:45672] Re: [ruby-trunk - Bug #6479][Assigned] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19707</link>
    <description>&lt;pre&gt;こんにちは、なかむら(う)です。

In message "[ruby-dev:45671] [ruby-trunk - Bug #6479][Assigned] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる"
    on May.23,2012 16:16:40, &amp;lt;knu&amp;lt; at &amp;gt;ruby-lang.org&amp;gt; wrote:

Socket::AF_INET6がない場合にIPSocket.getaddressを上書きしてい
るコードがipaddr.rbの冒頭にあると思いますので、プラットフォー
ム提供のそれが信用できないならこっちを常に有効にするのもあり
かもしれません。
Windowsだとたぶんそれを使ってるんだと思います。


それでは。
&lt;/pre&gt;</description>
    <dc:creator>U.Nakamura</dc:creator>
    <dc:date>2012-05-23T08:23:23</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19706">
    <title>[ruby-dev:45671] [ruby-trunk - Bug #6479][Assigned] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19706</link>
    <description>&lt;pre&gt;
Issue #6479 has been updated by knu (Akinori MUSHA).

Status changed from Open to Assigned
Assignee set to knu (Akinori MUSHA)


----------------------------------------
Bug #6479: ipaddr.rbの受け付ける書式が、プラットフォームによって異なる
https://bugs.ruby-lang.org/issues/6479#change-26781

Author: kachick (Kenichi Kamiya)
Status: Assigned
Priority: Normal
Assignee: knu (Akinori MUSHA)
Category: lib
Target version: 1.9.3
ruby -v: ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]


# 状況

標準添付ライブラリの ipaddr.rb に於いて、アドレス書式チェック時の厳しさがプラットフォームによって異なるよう感じました。
IPv4で気がついた限りですが、次の2点でWindowsだと常に例外を吐き、Linuxだと書式によっては(自分にとって)想定し難い値を返します。

* 0埋めを含んだ場合
* 改行文字を含んだ場合

動作例を載せます。

## 共通

    require 'ipaddr'

    p IPAddr.new("11.22.33.45") #=&amp;gt; #&amp;lt;IPAddr: IPv4:11.22.33.45/255.255.255.255&amp;gt;


## Windows(7) / ruby 1.9.3p194 (2012-04-20) [i386-mingw32]

    # 以下全てで、同じ例外を吐きます。
    p IPAddr.new("011.22.33.45")
    p IPAddr.new("011.0022.00033.000045")
    p IPAddr.new("011.0022.00033.000045\n")
    p IPAddr.new("011.0022.00033.000045\nfoo32/0024/bar \n/foobar  ")
    p IPAddr.new("011.0022.00033.000045\n056.0067.00078.00089\nfoo32/0024/bar \n/foobar  ")
    
    # 例外
    ArgumentError: invalid address
    from C:/Ruby193/lib/ruby/1.9.1/ipaddr.rb:496:in `rescue in initialize'

## Linux(Mint12) / ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]

    # Windowsの際と同じ引数に対して、一つも例外を吐きません
    p IPAddr.new("011.22.33.45")                                                            #=&amp;gt; #&amp;lt;IPAddr: IPv4:11.22.33.45/255.255.255.255&amp;gt;
    p IPAddr.new("011.0022.00033.000045")                                                   #=&amp;gt; #&amp;lt;IPAddr: IPv4:11.22.33.45/255.255.255.255&amp;gt;
    p IPAddr.new("011.0022.00033.000045\n")                                                 #=&amp;gt; #&amp;lt;IPAddr: IPv4:11.22.33.45/255.255.255.255&amp;gt;
    p IPAddr.new("011.0022.00033.000045\nfoo32/0024/bar \n/foobar  ")                       #=&amp;gt; #&amp;lt;IPAddr: IPv4:11.22.33.0/255.255.255.0&amp;gt;
    p IPAddr.new("011.0022.00033.000045\n056.0067.00078.00089\nfoo32/0024/bar \n/foobar  ") #=&amp;gt; #&amp;lt;IPAddr: IPv4:45.67.78.0/255.255.255.0&amp;gt;

# 希望

Windows環境下の例にみるよう、上記全てのパターンで例外を吐いてくれる方が自然に感じました。
特にLinux上での0埋めに関しては、桁数に制限が見られ無い点と、IPSocket.getaddress(8進数?)と返す値の異なってしまう点が気になります。

## Linux(Mint12) / ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]

    require 'socket'
    
    p IPSocket.getaddress("011.0022.00033.000045") #=&amp;gt; "9.18.27.37"
    

# 参考

ipaddr.rbを自分なりに読んでみた限り、次の要素に起因するのではないかとあたりをつけてみましたが・・・確信はありません。

* 全体的に、チェック用正規表現のメタ文字へ \A\z を使わず、 \A\Z や ^$ で括っていること
* #initialize で、 IPSocket.getaddress が例外を返すかどうかに、正常異常の判断を大きく委ねていること
* #in_addr で、1つのオクテットを \d+ のみでキャプチャしていること

とりあえず、#in_addrのみを次のように上書きした際、Windowsと同様に動作することまでは確認できました。

    require 'ipaddr'

    class IPAddr

      private

      remove_method :in_addr

      def in_addr(addr)
        if addr =~ /\A(?:(?:0|[1-9]\d{0,2})\.){3}(?:0|[1-9]\d{0,2})\z/  
          return addr.split('.').inject(0) { |i, s|
            n = s.to_i
            raise ArgumentError, 'invalid address' unless n &amp;lt;= 255

            i &amp;lt;&amp;lt; 8 | n
          }
        end
        return nil
      end

    end


&lt;/pre&gt;</description>
    <dc:creator>knu (Akinori MUSHA</dc:creator>
    <dc:date>2012-05-23T07:16:40</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19705">
    <title>[ruby-dev:45670] [ruby-trunk - Bug #6479][Open] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19705</link>
    <description>&lt;pre&gt;
Issue #6479 has been reported by kachick (Kenichi Kamiya).

----------------------------------------
Bug #6479: ipaddr.rbの受け付ける書式が、プラットフォームによって異なる
https://bugs.ruby-lang.org/issues/6479

Author: kachick (Kenichi Kamiya)
Status: Open
Priority: Normal
Assignee: 
Category: lib
Target version: 1.9.3
ruby -v: ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]


# 状況

標準添付ライブラリの ipaddr.rb に於いて、アドレス書式チェック時の厳しさがプラットフォームによって異なるよう感じました。
IPv4で気がついた限りですが、次の2点でWindowsだと常に例外を吐き、Linuxだと書式によっては(自分にとって)想定し難い値を返します。

* 0埋めを含んだ場合
* 改行文字を含んだ場合

動作例を載せます。

## 共通

    require 'ipaddr'

    p IPAddr.new("11.22.33.45") #=&amp;gt; #&amp;lt;IPAddr: IPv4:11.22.33.45/255.255.255.255&amp;gt;


## Windows(7) / ruby 1.9.3p194 (2012-04-20) [i386-mingw32]

    # 以下全てで、同じ例外を吐きます。
    p IPAddr.new("011.22.33.45")
    p IPAddr.new("011.0022.00033.000045")
    p IPAddr.new("011.0022.00033.000045\n")
    p IPAddr.new("011.0022.00033.000045\nfoo32/0024/bar \n/foobar  ")
    p IPAddr.new("011.0022.00033.000045\n056.0067.00078.00089\nfoo32/0024/bar \n/foobar  ")
    
    # 例外
    ArgumentError: invalid address
    from C:/Ruby193/lib/ruby/1.9.1/ipaddr.rb:496:in `rescue in initialize'

## Linux(Mint12) / ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]

    # Windowsの際と同じ引数に対して、一つも例外を吐きません
    p IPAddr.new("011.22.33.45")                                                            #=&amp;gt; #&amp;lt;IPAddr: IPv4:11.22.33.45/255.255.255.255&amp;gt;
    p IPAddr.new("011.0022.00033.000045")                                                   #=&amp;gt; #&amp;lt;IPAddr: IPv4:11.22.33.45/255.255.255.255&amp;gt;
    p IPAddr.new("011.0022.00033.000045\n")                                                 #=&amp;gt; #&amp;lt;IPAddr: IPv4:11.22.33.45/255.255.255.255&amp;gt;
    p IPAddr.new("011.0022.00033.000045\nfoo32/0024/bar \n/foobar  ")                       #=&amp;gt; #&amp;lt;IPAddr: IPv4:11.22.33.0/255.255.255.0&amp;gt;
    p IPAddr.new("011.0022.00033.000045\n056.0067.00078.00089\nfoo32/0024/bar \n/foobar  ") #=&amp;gt; #&amp;lt;IPAddr: IPv4:45.67.78.0/255.255.255.0&amp;gt;

# 希望

Windows環境下の例にみるよう、上記全てのパターンで例外を吐いてくれる方が自然に感じました。
特にLinux上での0埋めに関しては、桁数に制限が見られ無い点と、IPSocket.getaddress(8進数?)と返す値の異なってしまう点が気になります。

## Linux(Mint12) / ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]

    require 'socket'
    
    p IPSocket.getaddress("011.0022.00033.000045") #=&amp;gt; "9.18.27.37"
    

# 参考

ipaddr.rbを自分なりに読んでみた限り、次の要素に起因するのではないかとあたりをつけてみましたが・・・確信はありません。

* 全体的に、チェック用正規表現のメタ文字へ \A\z を使わず、 \A\Z や ^$ で括っていること
* #initialize で、 IPSocket.getaddress が例外を返すかどうかに、正常異常の判断を大きく委ねていること
* #in_addr で、1つのオクテットを \d+ のみでキャプチャしていること

とりあえず、#in_addrのみを次のように上書きした際、Windowsと同様に動作することまでは確認できました。

    require 'ipaddr'

    class IPAddr

      private

      remove_method :in_addr

      def in_addr(addr)
        if addr =~ /\A(?:(?:0|[1-9]\d{0,2})\.){3}(?:0|[1-9]\d{0,2})\z/  
          return addr.split('.').inject(0) { |i, s|
            n = s.to_i
            raise ArgumentError, 'invalid address' unless n &amp;lt;= 255

            i &amp;lt;&amp;lt; 8 | n
          }
        end
        return nil
      end

    end


&lt;/pre&gt;</description>
    <dc:creator>kachick (Kenichi Kamiya</dc:creator>
    <dc:date>2012-05-22T17:49:37</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19704">
    <title>[ruby-dev:45669] Re: [ruby-trunk - Feature #6218] struct.cのrb_struct_s_members_m()について</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19704</link>
    <description>&lt;pre&gt;遠藤です。

2012/05/22 Yukihiro Matsumoto &amp;lt;matz&amp;lt; at &amp;gt;ruby-lang.org&amp;gt;:


すみません。Glass_saga さんのコミッタ化は #6173 のチケット内で
提案したつもりでした。[ruby-dev:45460]

https://bugs.ruby-lang.org/issues/6173

でもこういう話はチケットじゃなくてメールで送るべきですね。
申し訳ないです。以後気をつけます。

&lt;/pre&gt;</description>
    <dc:creator>Yusuke Endoh</dc:creator>
    <dc:date>2012-05-22T03:24:13</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19703">
    <title>[ruby-dev:45668] Re: [ruby-trunk - Feature #6218] struct.cのrb_struct_s_members_m()について</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19703</link>
    <description>&lt;pre&gt;
まあその、もうちょっとそのままコミットできる率が上がってからでいいと思いますよ。
そういう意味で、もうちょっと時間がかかりそうは大変正しい。


&lt;/pre&gt;</description>
    <dc:creator>KOSAKI Motohiro</dc:creator>
    <dc:date>2012-05-22T01:47:43</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19702">
    <title>[ruby-dev:45667] Re: [ruby-trunk - Feature #6218] struct.cのrb_struct_s_members_m()について</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19702</link>
    <description>&lt;pre&gt;まつもと ゆきひろです

In message "Re: [ruby-dev:45665] [ruby-trunk - Feature #6218] struct.cのrb_struct_s_members_m()について"
    on Tue, 22 May 2012 00:11:56 +0900, "mame (Yusuke Endoh)" &amp;lt;mame&amp;lt; at &amp;gt;tsg.ne.jp&amp;gt; writes:

|Glass_saga さんのコミッタ化にはもうちょっと時間がかかりそうみたいなので、
|とりあえず私がやっちゃいます。

時間がかかりそうもなにも、これ、私に直接依頼されていないんで
すが。もしかして、空気を読んでコミッタ化を承認するとかしない
といけなかった？


&lt;/pre&gt;</description>
    <dc:creator>Yukihiro Matsumoto</dc:creator>
    <dc:date>2012-05-22T00:15:19</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19701">
    <title>[ruby-dev:45666] Re: [Ruby 1.9-Feature#3917][Open] [proposal] called_from() which is much faster than caller()</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19701</link>
    <description>&lt;pre&gt;桑田さん

　ささだです．

　1.5 年もお待たせしてしまって申し訳ありません．1つだけデザインについて
相談させて下さい．

(2010/10/10 1:25), Makoto Kuwata wrote:

　ここは，見逃していました．すみません．


　配列 ([filaneme, line, methodname]）と，メソッドでアクセスするオブジェ
クト（frame.filename, frame.line, frame.method みたいな）だと，どちらが
いい，とかありますか？　例では多重代入で一発でやっていましたが．

&lt;/pre&gt;</description>
    <dc:creator>SASADA Koichi</dc:creator>
    <dc:date>2012-05-21T23:14:16</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19700">
    <title>[ruby-dev:45665] [ruby-trunk - Feature #6218] struct.cのrb_struct_s_members_m()について</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19700</link>
    <description>&lt;pre&gt;
Issue #6218 has been updated by mame (Yusuke Endoh).

Assignee changed from Glass_saga (Masaki Matsushita) to mame (Yusuke Endoh)

Glass_saga さんのコミッタ化にはもうちょっと時間がかかりそうみたいなので、
とりあえず私がやっちゃいます。

&lt;/pre&gt;</description>
    <dc:creator>mame (Yusuke Endoh</dc:creator>
    <dc:date>2012-05-21T15:11:56</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19699">
    <title>[ruby-dev:45664] [ruby-trunk - Feature #6082][Rejected] io_binwrite()内でwritev()を使う</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19699</link>
    <description>&lt;pre&gt;
Issue #6082 has been updated by mame (Yusuke Endoh).

Status changed from Feedback to Rejected

あまり意義がなさそうとのことなので、とりあえず閉じます。
同期モードで高速化してほしいユースケースはあるとか、その他何か意見があったら
reopen してください。

&lt;/pre&gt;</description>
    <dc:creator>mame (Yusuke Endoh</dc:creator>
    <dc:date>2012-05-21T15:10:46</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19698">
    <title>[ruby-dev:45663] [ruby-trunk - Bug #6456][Assigned] [readline] Readline.point when history edited</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19698</link>
    <description>&lt;pre&gt;
Issue #6456 has been updated by mame (Yusuke Endoh).

Status changed from Open to Assigned
Assignee set to kouji (Kouji Takao)


----------------------------------------
Bug #6456: [readline] Readline.point when history edited
https://bugs.ruby-lang.org/issues/6456#change-26738

Author: no6v (Nobuhiro IMAI)
Status: Assigned
Priority: Normal
Assignee: kouji (Kouji Takao)
Category: ext
Target version: 
ruby -v: ruby 2.0.0dev (2012-05-19 trunk 35705) [x86_64-linux]


=begin
以下のように、履歴をたどって編集した時に Readline.point の値がおかしくなるようです。

 require "readline"
 
 RUBY_DESCRIPTION  # =&amp;gt; "ruby 2.0.0dev (2012-05-19 trunk 35705) [x86_64-linux]"
 Readline::VERSION # =&amp;gt; "6.2"
 
 IO.pipe do |r, w|
   Readline.input = r
   w &amp;lt;&amp;lt; "123\n\cP456\n\cP\n"
   Readline.readline("", true) # =&amp;gt; "123"
   Readline.point              # =&amp;gt; 3
   Readline.readline("", true) # =&amp;gt; "123456"
   Readline.point              # =&amp;gt; 3
   Readline.readline("", true) # =&amp;gt; "123456"
   Readline.point              # =&amp;gt; 6
 end
 # &amp;gt;&amp;gt; 123
 # &amp;gt;&amp;gt; 123456
 # &amp;gt;&amp;gt; 123456
=end



&lt;/pre&gt;</description>
    <dc:creator>mame (Yusuke Endoh</dc:creator>
    <dc:date>2012-05-21T10:24:45</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19697">
    <title>[ruby-dev:45662] [ruby-trunk - Bug #6455][Assigned] IRB.conf[:RC_NAME_GENERATOR] と IRB.conf[:SAVE_HISTORY] を同時に設定すると irb が起動できないのを修正する</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19697</link>
    <description>&lt;pre&gt;
Issue #6455 has been updated by mame (Yusuke Endoh).

Status changed from Open to Assigned


----------------------------------------
Bug #6455: IRB.conf[:RC_NAME_GENERATOR] と IRB.conf[:SAVE_HISTORY] を同時に設定すると irb が起動できないのを修正する
https://bugs.ruby-lang.org/issues/6455#change-26737

Author: sho-h (Sho Hashimoto)
Status: Assigned
Priority: Normal
Assignee: keiju (Keiju Ishitsuka)
Category: lib
Target version: 2.0.0
ruby -v: ruby 1.8.7 (2010-08-16 patchlevel 302) [i486-linux]


るりまを書いている最中に気づいたのですが、IRB.conf[:RC_NAME_GENERATOR] と IRB.conf[:SAVE_HISTORY] を同時に設定すると irb の起動時にヒストリファイルの読み込みで例外が発生して irb が起動できません。

  $ irb
  /usr/lib/ruby/1.8/irb/ext/save-history.rb:77:in `exist?': can't convert nil into String (TypeError)
          from /usr/lib/ruby/1.8/irb/ext/save-history.rb:77:in `load_history'
          ...
  $

IRB.rc_file("_history") が nil を返すようになるためではないかと思います。

  $ irb -f
  irb(main):001:0&amp;gt; IRB.conf[:RC_NAME_GENERATOR] = Proc.new { |rc|
  irb(main):002:1*   ["/tmp/myirb.#{rc}"].detect { |path| File.exists?(path) }
  irb(main):003:1&amp;gt; }
  irb(main):004:0&amp;gt; IRB.rc_file("_history")
  =&amp;gt; nil

1.8.7 で試しましたが、trunk でも同様ではないかと思います。

lib/irb/ext/save-history.rb で IRB.rc_file("_history") が nil であればデフォルト値を使うなどされた方がいいかもしれません。


&lt;/pre&gt;</description>
    <dc:creator>mame (Yusuke Endoh</dc:creator>
    <dc:date>2012-05-21T10:24:18</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19696">
    <title>[ruby-dev:45661] [ruby-trunk - Bug #6473][Assigned] Enumerable#count</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19696</link>
    <description>&lt;pre&gt;
Issue #6473 has been updated by mame (Yusuke Endoh).

Status changed from Open to Assigned
Assignee set to drbrain (Eric Hodel)

Hello, drbrain

This is a doc issue of Enumerable#count.
Could you check and import Nobuhiro's patch?


English translation:

The rdoc of Enumerable#count says:

  Returns the number of items in &amp;lt;i&amp;gt;enum&amp;lt;/i&amp;gt; if it responds to a #size call,
  otherwise the items are counted through enumeration.  If an argument is

but actually it behaves as below:

  class E
    include Enumerable

    def each
    end

    def size
      1
    end
  end

  e = E.new
  e.size  # =&amp;gt; 1
  e.count # =&amp;gt; 0

As you see, it does not call #size.  1.8 series and 1.9.1 returns 1 instead of 0.

As r25603 seemed to finally decide to stop calling #size, I'm attaching a patch
that changes the rdoc.
The patch just changes the first line, though it looks bigger because of new line.

&lt;/pre&gt;</description>
    <dc:creator>mame (Yusuke Endoh</dc:creator>
    <dc:date>2012-05-21T10:24:03</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19695">
    <title>[ruby-dev:45660] [ruby-trunk - Bug #6473] Enumerable#count</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19695</link>
    <description>&lt;pre&gt;
Issue #6473 has been updated by no6v (Nobuhiro IMAI).

File enum_count.patch added

最終的に r25603 で size は呼ばなくなったようなので、コメントを修正したパッチを添付します。
改行位置の関係で行数が多いですが、内容は1文目しか変更してません。

----------------------------------------
Bug #6473: Enumerable#count
https://bugs.ruby-lang.org/issues/6473#change-26735

Author: no6v (Nobuhiro IMAI)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 
ruby -v: ruby 2.0.0dev (2012-05-19 trunk 35705) [x86_64-linux]


=begin
Enumerable#count には、

 Returns the number of items in &amp;lt;i&amp;gt;enum&amp;lt;/i&amp;gt; if it responds to a #size call,
 otherwise the items are counted through enumeration.  If an argument is

というコメントが書いてありますが、実際には

 class E
   include Enumerable
 
   def each
   end
 
   def size
     1
   end
 end
 
 e = E.new
 e.size  # =&amp;gt; 1
 e.count # =&amp;gt; 0

size は呼ばれていないようです。1.8 系や 1.9.1 の頃は 0 ではなく 1 が返っていたようです。
=end



&lt;/pre&gt;</description>
    <dc:creator>no6v (Nobuhiro IMAI</dc:creator>
    <dc:date>2012-05-21T06:19:43</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19694">
    <title>[ruby-dev:45659] [ruby-trunk - Bug #6473][Open] Enumerable#count</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19694</link>
    <description>&lt;pre&gt;
Issue #6473 has been reported by no6v (Nobuhiro IMAI).

----------------------------------------
Bug #6473: Enumerable#count
https://bugs.ruby-lang.org/issues/6473

Author: no6v (Nobuhiro IMAI)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 
ruby -v: ruby 2.0.0dev (2012-05-19 trunk 35705) [x86_64-linux]


=begin
Enumerable#count には、

 Returns the number of items in &amp;lt;i&amp;gt;enum&amp;lt;/i&amp;gt; if it responds to a #size call,
 otherwise the items are counted through enumeration.  If an argument is

というコメントが書いてありますが、実際には

 class E
   include Enumerable
 
   def each
   end
 
   def size
     1
   end
 end
 
 e = E.new
 e.size  # =&amp;gt; 1
 e.count # =&amp;gt; 0

size は呼ばれていないようです。1.8 系や 1.9.1 の頃は 0 ではなく 1 が返っていたようです。
=end



&lt;/pre&gt;</description>
    <dc:creator>no6v (Nobuhiro IMAI</dc:creator>
    <dc:date>2012-05-20T09:36:48</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19693">
    <title>[ruby-dev:45658] [ruby-trunk - Bug #4387][Feedback] test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.ruby.devel/19693</link>
    <description>&lt;pre&gt;
Issue #4387 has been updated by naruse (Yui NARUSE).

Status changed from Rejected to Feedback

[ruby-list:38139] にもスレがありますね。

まとめると、
1. connect_nonblock を呼ぶ
2.1. ECONNREFUSED が返る (localhost など結果が瞬間的に返る場合)
2.2.1. EINPROGRESS が返る
2.2.2. select で待つ→成功か失敗に収束
2.2.3.1. EISCONN が返る (成功)
2.2.3.2. EINVAL が返る (失敗)
って事のようです。
ここで EINVAL が返るのはFreeBSD や NetBSD もそうです。
Linux の場合、とりあえず手元で試した「localhost の開いていないポートに接続」というケースでは、
ECONNABORTED が返ってきました。

さて、ここでの悩みどころは改めて connect_nonblock して EINVAL が返ってきてしまうと、
もはや失敗した理由はわからなくなってしまう事です。
これは、例えば以下のように connect_nonblock の前に getsockopt すれば理由がわかります。
diff --git a/test/socket/test_addrinfo.rb b/test/socket/test_addrinfo.rb
index 3240b9d..1e047c9 100644
--- a/test/socket/test_addrinfo.rb
+++ b/test/socket/test_addrinfo.rb
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -159,6 +159,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class TestSocketAddrinfo &amp;lt; Test::Unit::TestCase
       s2.connect_nonblock(ai)
     rescue IO::WaitWritable
       IO.select(nil, [s2])
+      r = s2.getsockopt(Socket::SOL_SOCKET, Socket::SO_ERROR)
+      assert_equal(0, r.int, "NOERROR is expected but #{r.inspect}")
       begin
         s2.connect_nonblock(ai)
       rescue Errno::EISCONN
----------------------------------------
Bug #4387: test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する
https://bugs.ruby-lang.org/issues/4387#change-26722

Author: kosaki (Motohiro KOSAKI)
Status: Feedback
Priority: Normal
Assignee: 
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3dev (2011-02-09 trunk 30831) [i386-mswin32_100]


=begin
 １割ぐらいの確率でtest-allが以下のエラーを吐きます
 
  57) Error:
 test_socket_connect_nonblock(TestSocketAddrinfo):
 Errno::EINVAL: Invalid argument - connect(2)
     C:/ruby/trunk/test/socket/test_addrinfo.rb:163:in `connect_nonblock'
     C:/ruby/trunk/test/socket/test_addrinfo.rb:163:in `rescue in test_socket_con
 nect_nonblock'
     C:/ruby/trunk/test/socket/test_addrinfo.rb:158:in `test_socket_connect_nonbl
 ock'
 
 
 なお、OSレベルでは WSAGetLastError() が WSAEINVALを返しています。
 
 MSDNからそれっぽい部分をいくつかピックアップすると
 http://msdn.microsoft.com/en-us/library/ms737625(v=vs.85).aspx
 
 WSAEALREADY: A nonblocking connect call is in progress on the specified socket.
              Note  In order to preserve backward compatibility, this error is reported as
              WSAEINVAL to Windows Sockets 1.1 applications that link to either Winsock.dll or
              Wsock32.dll.
 WSAEINVAL: The parameter s is a listening socket.
 
 とあるので、
  o selectが正しく動いておらず、connect完了する前に処理がもどってしまうので、connectがEINVALを返している
  o selectはちゃんと動いているけど、connectがトチ狂ってEISCONNを返さずにEINVALを返している
 
 の２択なんですが、どちらなのかは切り分けできませんでした。誰か良い案があれば教えてください。
 
 
 これだけではアレなので、いくつか調査報告など
 
 w3cのhttpのサンプルコードだと、EINVALはEISCONNと同等の処理をするようになっています。
 http://www.w3.org/Library/src/HTTCP.c
 
 NetBSDのconnectにも昔EINVALを返す問題があったそうですが、どう対処したのかはよく分かりませんでした
 http://mail-index.netbsd.org/netbsd-bugs/2003/08/18/0002.html
 ↑ なんと報告者は Kambeさん
 
 ruby-talkでそれっぽい話をしているログをみつけたのですが、こちらも結論分からず。
 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/16632
=end



&lt;/pre&gt;</description>
    <dc:creator>naruse (Yui NARUSE</dc:creator>
    <dc:date>2012-05-19T22:58:51</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.lang.ruby.devel">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.lang.ruby.devel</link>
  </textinput>
</rdf:RDF>

