[#43467] [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...>

kosakiです

15 messages 2011/05/08
[#43482] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — SASADA Koichi <ko1@...> 2011/05/08

 ささだです.

[#43486] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...> 2011/05/09

>  ささだです.

[#43487] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — SASADA Koichi <ko1@...> 2011/05/09

 ささだです.

[#43488] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...> 2011/05/09

>  ささだです.

[#43489] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...> 2011/05/09

自己解決しました

[#43500] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — SASADA Koichi <ko1@...> 2011/05/09

 ささだです.

[#43501] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...> 2011/05/09

>> ということは危ないのは RUBY_VM_SET_INTERRUPT() がロストしたときに、タイムアウトなしの

[#43468] Re: [ruby-changes:19438] Ruby:r31478 (trunk): * test/date/*.rb: use skip /w messages. — KOSAKI Motohiro <kosaki.motohiro@...>

2011/5/8 tadf <ko1@atdot.net>:

8 messages 2011/05/08

[#43476] [Ruby 1.9 - Feature #4653][Open] [PATCH 1/1] new method Enumerable#rude_map — Shyouhei Urabe <shyouhei@...>

16 messages 2011/05/08

[#43493] [Ruby 1.9 - Feature #4657][Open] add option to hide skip messages on unit/test — Shota Fukumori <sorah@...>

11 messages 2011/05/09

[#43502] draft schedule of Ruby 1.9.3 — "Yuki Sonoda (Yugui)" <yugui@...>

-----BEGIN PGP SIGNED MESSAGE-----

23 messages 2011/05/09
[#43505] Re: draft schedule of Ruby 1.9.3 — "U.Nakamura" <usa@...> 2011/05/10

Hello,

[#43513] Re: draft schedule of Ruby 1.9.3 — KOSAKI Motohiro <kosaki.motohiro@...> 2011/05/10

(ruby-coreはずしました)

[#43587] [Ruby 1.9 - Feature #4788][Open] resolv.rb refactoring — Makoto Kishimoto <redmine@...>

15 messages 2011/05/27

[ruby-dev:43477] [Ruby 1.9 - Feature #4653][Assigned] [PATCH 1/1] new method Enumerable#rude_map

From: Shyouhei Urabe <shyouhei@...>
Date: 2011-05-08 14:01:19 UTC
List: ruby-dev #43477
Issue #4653 has been updated by Shyouhei Urabe.

Status changed from Open to Assigned


----------------------------------------
Feature #4653: [PATCH 1/1] new method Enumerable#rude_map
http://redmine.ruby-lang.org/issues/4653

Author: Shyouhei Urabe
Status: Assigned
Priority: Normal
Assignee: Yukihiro Matsumoto
Category: core
Target version: 1.9.3


From e6dd7bd9b5769bae5d81416da7a2b4003a43ba06 Mon Sep 17 00:00:00 2001
Message-Id: <e6dd7bd9b5769bae5d81416da7a2b4003a43ba06.1304863013.git.shyouhei@ruby-lang.org>
From: URABE, Shyouhei <shyouhei@ruby-lang.org>
Date: Sun, 8 May 2011 22:51:28 +0900
Subject: [PATCH 1/1] new method Enumerable#rude_map

時としてmapが配列を返さない方がいいのにと思うことがあります。

例としてはlzmaで圧縮されており解凍するととても大きくなるテキストファ
イルがあったとして、それを解凍して行番号をふってからHTML escapeして
<pre></pre>ではさんでから連結したものをlzmaで圧縮しなおす必要があっ
たとします(注:実話)。ここで「行番号をふって」と「HTML escapeして」を
素直に考えると、lzcatをpopenしたものに対して
io.each_line.map.with_index.map. ... とかいう構造がRubyとしては自然
かと思います。が、mapが配列を作ってしまうというのがメモリ消費量的に
よくありません。できればEnumeratorですっきりと処理したいところです。

というわけでmapなんだけど配列じゃなくてEnumeratorを返すmapの変種があ
るといいとおもうのですがどうでしょうか。1.9にはもうflat_mapがあるの
でなんとか_mapが増える心理的抵抗は少ないかなと思うので新規メソッドに
してみました。いきなりmapの戻り値の型が変わるのでも私はいいですけど
ちょっとやりすぎかとも思います。

Signed-off-by: URABE, Shyouhei <shyouhei@ruby-lang.org>

diff --git a/enum.c b/enum.c
index 584b838..449406b 100644
--- a/enum.c
+++ b/enum.c
@@ -462,6 +462,41 @@ enum_flat_map(VALUE obj)
     return ary;
 }
 
+static VALUE
+rude_map_ii(VALUE i, VALUE y, int c, VALUE *v)
+{
+    return rb_funcall(y, rb_intern("<<"), 1, enum_yield(c, v));
+}
+
+static VALUE
+rude_map_i(VALUE y, VALUE i, int c, VALUE *v)
+{
+    return rb_block_call(i, id_each, 0, 0, rude_map_ii, y);
+}
+
+/*
+ *  call-seq:
+ *     enum.rude_map {| obj | block }  -> enumerator
+ *     enum.rude_map                   -> enumerator
+ *
+ *  Identical to Enumerable#map, except that it returns an enumerator
+ *  rather than an array.
+ *
+ *  Without a block it is just another Object#to_enum.
+ *
+ */
+
+static VALUE
+enum_rude_map(VALUE obj)
+{
+    VALUE ret;
+    RETURN_ENUMERATOR(obj, 0, 0);
+
+    ret = rb_obj_alloc(rb_cEnumerator);
+    rb_block_call(ret, rb_intern("initialize"), 0, 0, rude_map_i, obj);
+    return ret;
+}
+
 /*
  *  call-seq:
  *     enum.to_a      ->    array
@@ -2679,6 +2714,7 @@ Init_Enumerable(void)
     rb_define_method(rb_mEnumerable, "collect", enum_collect, 0);
     rb_define_method(rb_mEnumerable, "map", enum_collect, 0);
     rb_define_method(rb_mEnumerable, "flat_map", enum_flat_map, 0);
+    rb_define_method(rb_mEnumerable, "rude_map", enum_rude_map, 0);
     rb_define_method(rb_mEnumerable, "collect_concat", enum_flat_map, 0);
     rb_define_method(rb_mEnumerable, "inject", enum_inject, -1);
     rb_define_method(rb_mEnumerable, "reduce", enum_inject, -1);
-- 
1.7.0.4




-- 
http://redmine.ruby-lang.org

In This Thread