[#43465] GVL改善案 — KOSAKI Motohiro <kosaki.motohiro@...>
小崎です
[#43467] [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...>
kosakiです
ささだです.
> ささだです.
ささだです.
> ささだです.
自己解決しました
ささだです.
>> ということは危ないのは RUBY_VM_SET_INTERRUPT() がロストしたときに、タイムアウトなしの
>>> ということは危ないのは 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 <[email protected]>:
> 表示したい場合を除いてはskipよりもreturnを使うようお願いしています。
>> 表示したい場合を除いてはskipよりもreturnを使うようお願いしています。
[#43476] [Ruby 1.9 - Feature #4653][Open] [PATCH 1/1] new method Enumerable#rude_map — Shyouhei Urabe <shyouhei@...>
遠藤です。
(05/08/2011 11:21 PM), Yusuke ENDOH wrote:
遠藤です。
卜部です。
At Mon, 9 May 2011 16:35:31 +0900,
遠藤です。
[#43493] [Ruby 1.9 - Feature #4657][Open] add option to hide skip messages on unit/test — Shota Fukumori <sorah@...>
> -q, --hide-skipでskipメッセージが表示されなくなります。
(05/09/2011 06:31 PM), Shota Fukumori wrote:
> (05/09/2011 06:31 PM), Shota Fukumori wrote:
2011/5/9 KOSAKI Motohiro <[email protected]>:
> 2011/5/9 KOSAKI Motohiro <[email protected]>:
[#43502] draft schedule of Ruby 1.9.3 — "Yuki Sonoda (Yugui)" <yugui@...>
-----BEGIN PGP SIGNED MESSAGE-----
Hello,
(ruby-coreはずしました)
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
[#43549] RubyKaigi2011に'CRuby'コミッタの皆さまを招待いたします(締切:2011-06-15) — Kakutani Shintaro <shintaro.kakutani@...>
'CRuby'コミッタの皆さまへ
[#43554] [Ruby 1.9 - Bug #4696][Assigned] thread.c#lock_func() が spurious wakeup unsafe — Motohiro KOSAKI <kosaki.motohiro@...>
[#43606] [Ruby 1.9 - Bug #4808][Open] thread_wait_for() eats 100% of CPU power — Hidetoshi Nagai <nagai@...>
> いつからかは把握できていませんが (少なくとも 1.9.2p0 では発生しません),
[ruby-dev:43477] [Ruby 1.9 - Feature #4653][Assigned] [PATCH 1/1] new method Enumerable#rude_map
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 <[email protected]> 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 <[email protected]> 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