[#47790] [ruby-trunk - Bug #7097][Open] Thread locals don't work inside Enumerator — "tenderlovemaking (Aaron Patterson)" <aaron@...>

32 messages 2012/10/01
[#47791] [ruby-trunk - Bug #7097][Assigned] Thread locals don't work inside Enumerator — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...> 2012/10/01

[#47792] Re: [ruby-trunk - Bug #7097][Assigned] Thread locals don't work inside Enumerator — Aaron Patterson <tenderlove@...> 2012/10/01

On Tue, Oct 02, 2012 at 03:05:17AM +0900, kosaki (Motohiro KOSAKI) wrote:

[#47798] Re: [ruby-trunk - Bug #7097][Assigned] Thread locals don't work inside Enumerator — SASADA Koichi <ko1@...> 2012/10/01

(2012/10/02 3:12), Aaron Patterson wrote:

[#47800] Re: [ruby-trunk - Bug #7097][Assigned] Thread locals don't work inside Enumerator — SASADA Koichi <ko1@...> 2012/10/01

(2012/10/02 8:22), SASADA Koichi wrote:

[#47832] [ruby-trunk - Feature #7106][Open] FileUtils.touch should allow touching the symlink itself rather than the file the link points to — "cirrusthinking (Alessandro Diaferia)" <alessandro@...>

18 messages 2012/10/04

[#47847] [ruby-trunk - Bug #7110][Open] CGI: Add support for HTML5 <header> tag — "stomar (Marcus Stollsteimer)" <redmine@...>

16 messages 2012/10/05

[#47870] [ruby-trunk - Bug #7123][Open] Segmentation fault in ruby 1.9.3-p194 — "mscottford (M. Scott Ford)" <scott@...>

13 messages 2012/10/09

[#47880] [ruby-trunk - Bug #7134][Open] Signal handling bug in Mac OS X — "auastro (Andy Kitchen)" <kitchen.andy+rubybug@...>

17 messages 2012/10/10

[#47881] [ruby-trunk - Bug #7135][Open] GC bug in Ruby 1.9.3-p194? — "alexdowad (Alex Dowad)" <alexinbeijing@...>

21 messages 2012/10/10

[#47887] [ruby-trunk - Bug #7137][Open] Date.parse overly lenient when attempting to parse Monday? — "garysweaver (Gary Weaver)" <garysweaver@...>

12 messages 2012/10/10

[#47930] [ruby-trunk - Feature #7148][Open] Improved Tempfile w/o DelegateClass — "Glass_saga (Masaki Matsushita)" <glass.saga@...>

14 messages 2012/10/12

[#47970] [ruby-trunk - Bug #7158][Open] require is slow in its bookkeeping; can make Rails startup 2.2x faster — "gregprice (Greg Price)" <price@...>

30 messages 2012/10/14

[#48027] [Backport93 - Backport #7172][Open] [[Ruby 1.9:]] fix rbconfig for --enable-load-relative (v2) — "mpapis (Michal Papis)" <mpapis@...>

13 messages 2012/10/16

[#48053] [ruby-trunk - Bug #7180][Open] set_trace_func with error in proc block locks up Ruby with 100% cpu usage and no way to exit without killing proc — "garysweaver (Gary Weaver)" <garysweaver@...>

8 messages 2012/10/17

[#48072] [ruby-trunk - Bug #7184][Open] --disable-gems commandline parameter does not show up with ruby -h — "steenslag (siep korteling)" <s.korteling@...>

10 messages 2012/10/18

[#48130] [ruby-trunk - Bug #7200][Open] Setting external encoding with BOM| — "brixen (Brian Ford)" <brixen@...>

14 messages 2012/10/21

[#48191] [ANN] 2.0.0 feature freeze — Yusuke Endoh <mame@...>

Japanese later; 日本語は後で

37 messages 2012/10/24
[#48696] Re: [ANN] 2.0.0 feature freeze — SASADA Koichi <ko1@...> 2012/11/01

(2012/10/24 5:39), Yusuke Endoh wrote:

[#48260] [ruby-trunk - Bug #7214][Open] Ruby 2.0 breaks support for some debugging tools — "banister (john mair)" <jrmair@...>

22 messages 2012/10/25

[#48315] [ruby-trunk - Bug #7220][Open] StringIO#initialize_copy causes aliasing between the objects — "brixen (Brian Ford)" <brixen@...>

13 messages 2012/10/26

[#48413] [ruby-trunk - Bug #7221][Open] Unable to compile kgio under 1.9.3 with error: ruby-1.9.3-<plvl>/lib/ruby/1.9.1/mkmf.rb:597:in `Integer': can't convert nil into Integer (TypeError) — "davidderyldowney (David Deryl Downey)" <me@...>

9 messages 2012/10/27

[#48549] [ruby-trunk - Feature #7240][Open] Inheritable #included/#extended Hooks For Modules — "apotonick (Nick Sutterer)" <apotonick@...>

14 messages 2012/10/29

[#48551] [ruby-trunk - Feature #7241][Open] Enumerable#to_h proposal — "nathan.f77 (Nathan Broadbent)" <nathan.f77@...>

23 messages 2012/10/29

[#48552] [ruby-trunk - Bug #7242][Open] Bignum mathematical accuracy regression in r31695 — "mhall (Matthew Hall)" <mhall@...>

11 messages 2012/10/29

[ruby-core:48491] [ruby-trunk - Feature #6758] Object#sequence

From: "yhara (Yutaka HARA)" <redmine@...>
Date: 2012-10-27 15:20:03 UTC
List: ruby-core #48491
Issue #6758 has been updated by yhara (Yutaka HARA).

Category set to core
Target version set to next minor


----------------------------------------
Feature #6758: Object#sequence
https://bugs.ruby-lang.org/issues/6758#change-31822

Author: merborne (kyo endo)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: next minor


=begin

== Object#sequence

Let me propose a new method ((*Object#sequence*)).

次のような実装の((*Object#sequence*))を提案します。

    class Object
      def sequence(init=true, &blk)
        x = self
        Enumerator.new do |y|
          y << x if init
          loop { y << (x = yield x) }
        end
      end
    end

((*sequence*)) generate a sequence by applying a block recursively to the receiver object. The result is wrapped with a Enumerator object, thus it is set under lazy evaluation.

((*sequence*))は、そのレシーバオブジェクトを初期値として、渡されたブロック(漸化式)を繰り返し適用してシーケンスを生成します。適用の結果はEnumeratorオブジェクトでラップされているので、遅延評価されます。

== Usage;

使い方を示します。

    1.sequence { |x| x + 2 }.take(10) # => [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
    
    3.sequence { |x| x * 2 }.take(10) # => [3, 6, 12, 24, 48, 96, 192, 384, 768, 1536]
    
    [0, 1].sequence { |a, b| [b, a + b] }.take(10).map(&:first) # => [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
    
    [0, 1, 1].sequence { |a, b, c| [b, c, a + b + c] }.take(10).map(&:first) # => [0, 1, 1, 2, 4, 7, 13, 24, 44, 81]
    
    # square root 5
    a = 5
    eps = 0.0001
    1.0.sequence { |x| (x + a/x) / 2.0 }
       .each_cons(2)
       .detect { |a, b| (a - b).abs < eps }[1] # => 2.236067977499978
    
    # Excel label
    'A'.sequence { |x| x.succ }.take(30) # => ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD"]
    
    # random boolean(avoid true-true sequence)
    true.sequence { |prev| prev ? false : [true, false].sample }.take(20) # => [true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, false, false, true, false]
    
== Some background

== 提案の経緯

Let me explain some background of this request.

本件に関しては、ここに至る若干の経緯がありますので、併せて説明します。

1. I introduced this method as ((*Object#repeat*)) on my Japanese blog.

1. 私のブログにおいて、本メソッドを((*Object#repeat*))として紹介する記事を公開。

((<URL:http://melborne.github.com/2012/07/12/object-repeat-take-care-of-sequence/>))

2. Matz tweeted to the article.

    > "um.. the feature is attractive, but the name is.." 

2. 記事に対してMatzがつぶやく。

    > 「うーん、昨日としては魅力的だけど、名前がなあ。」

((<URL:https://twitter.com/yukihiro_matz/status/223790181113806848>))


3. I updated the article to propose ((*Object#repeat_apply*)) or ((*Object#repeat_call*)).

3. Object#repeat_apply, Object#repeat_callを提案するべく記事を更新。

4. Matz tweeted to the article.

    > @merborne more clear. but combining two verbs is wrong. I understand naming is difficult.

4. 記事に対してMatzがつぶやく。

    > @merborne なるほど「repeat_apply」か「repeat_call」ですか。repeat単体よりは誤解を受けにくいとは思いますが、repeatって動詞とapply/callって動詞の組み合わせは感心しませんね。名前って難しい。 

((<URL:https://twitter.com/yukihiro_matz/status/224105896110866432>))

5. Matz tweeted to the article.

    > @merborne I suggest some clue lies around a word "series"..

5. 記事に対してMatzがつぶやく。

    > @merborne 「級数/series」あたりに名前のヒントがありそうな。

((<URL:https://twitter.com/yukihiro_matz/status/224106160591081472>))

6. I tweeted to Matz.

6. 私もつぶやく

    > @yukihiro_matz you are right.. `repeated_apply` `repeated_call`?.. 


    > @yukihiro_matz たしかに.. repeated_apply repeated_callかな.. 

((<URL:https://twitter.com/merborne/status/224108387653259264>))

    > @yukihiro_matz clue! `series_by` ? 


    > @yukihiro_matz ヒント! series_by ? 

((<URL:https://twitter.com/merborne/status/224108809948377088>))

    > @yukihiro_matz `repeated` is adjective..^^; but I don't like `repeatedly_apply`. I thought once `series_by` is good, but it would be better a method is named based on its behavior, not on its function, I think. How about `repeat_by`?


    > @yukihiro_matz repeatedは形容詞でしたね^^; するとrepeatedly_applyですが、今ひとつです。series_byもいいと思ったんですが、できれば機能ではなく動作を言いたい思いがあります。そこでrepeat_byというのはどうでしょうか。

((<URL:https://twitter.com/merborne/status/224324670764220416>))


the conversation closed..

会話終了..

7. Ideas from other Rubyists

Some Japanese Rubyists tweeted or commented me on the name. Candidates are..

7. 他のRubyistの意見

名前に関し何人かのRubyistからアイディアをもらっています。リストアップします。

    iterate
    recur
    recurrence
    recur_with
    unfold
    sequence
    seq



Haskell and Scala have the same functionality with a name of ((*iterate*)).


なお、HaskellとScalaには同種の機能が、((*iterate*))という名前で実装されているそうです。


Also, @makotokuwata-san tweeted that ((*Kernel#seq*))(function style) or ((*Enumerator.seq()*))(a Class method) is better.


また、@makotokuwata氏よりKernel#seqのような関数形式か、Enumerator.seq()のようなクラスメソッドのほうがいいとの意見も頂いています。

    > @yukihiro_matz @merborne 初期値と漸化式から順列を作る機能なので、"sequence"か"seq"に1票。あとKernel#seq(initial,&blk)のほうが好きです。RT 「級数/series」あたりに名前のヒントがありそうな。 

((<URL:https://twitter.com/makotokuwata/status/225806204390227968>))



Thank you for your consideration.

以上、ご検討のほどよろしくお願い致します。


=end



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

In This Thread