[#51329] [ruby-trunk - Feature #7677][Open] YAML load mode that does instantiate Ruby — "trans (Thomas Sawyer)" <transfire@...>
7 messages
2013/01/09
[#51347] [ruby-trunk - Bug #7679][Open] IRB history is broken — "zzak (Zachary Scott)" <zachary@...>
15 messages
2013/01/10
[#51348] [ruby-trunk - Bug #7680][Open] IRB autocompletion doesn't autocomplete methods — "zzak (Zachary Scott)" <zachary@...>
8 messages
2013/01/10
[#51389] [ruby-trunk - Bug #7688][Open] Error hiding with rb_rescue() on Comparable#==, #coerce and others — "Eregon (Benoit Daloze)" <redmine@...>
34 messages
2013/01/11
[#59674] [ruby-trunk - Feature #7688] Error hiding with rb_rescue() on Comparable#==, #coerce and others
— "marcandre (Marc-Andre Lafortune)" <ruby-core@...>
2014/01/09
[#59675] [ruby-trunk - Feature #7688] Error hiding with rb_rescue() on Comparable#==, #coerce and others
— "marcandre (Marc-Andre Lafortune)" <ruby-core@...>
2014/01/09
[#59679] Re: [ruby-trunk - Feature #7688] Error hiding with rb_rescue() on Comparable#==, #coerce and others
— "Martin J. Dürst" <duerst@...>
2014/01/10
On 2014/01/10 7:42, marcandre (Marc-Andre Lafortune) wrote:
[#51391] [ANN] Implementer Meeting — Aaron Patterson <tenderlove@...>
Hey everyone,
9 messages
2013/01/11
[#51421] Re: [ANN] Implementer Meeting
— Mark Rada <markrada26@...>
2013/01/14
Hello Aaron,
[#51431] Re: [ANN] Implementer Meeting
— Marc-Andre Lafortune <ruby-core-mailing-list@...>
2013/01/14
I'm worried about issues with Enumerator::Lazy. Should we discuss this at
[#51399] [ruby-trunk - Bug #7689][Open] Crash @enumerator.so with ruby 1.9.3/thin/RoR 3.2.11 — "saepia (Marcin Lewandowski)" <marcin@...>
6 messages
2013/01/12
[#51441] [ruby-trunk - Bug #7699][Open] rubyspec failed: BigDecimal#divmod Can be reversed with * and + — "mrkn (Kenta Murata)" <muraken@...>
8 messages
2013/01/15
[#51453] [REMINDER] Implemeter Meeting — Aaron Patterson <tenderlove@...>
Hey everyone,
5 messages
2013/01/15
[#51454] [CommonRuby - Feature #7701][Open] Non-optional (required) keyword args — "headius (Charles Nutter)" <headius@...>
31 messages
2013/01/15
[#53256] [CommonRuby - Feature #7701] Non-optional (required) keyword args
— "headius (Charles Nutter)" <headius@...>
2013/03/09
[#51496] Ruby 2.0 Meeting Schedule — Aaron Patterson <tenderlove@...>
At the Implemeters Meeting, we talked about meeting again in 2 weeks
5 messages
2013/01/17
[#51497] Schedule next developer meeting — Aaron Patterson <tenderlove@...>
At the last meeting, we agreed upon having another meeting four weeks
5 messages
2013/01/17
[#51499] [ruby-trunk - Feature #7712][Open] Add .txt extensions to all plain-text documentation files for Windows users — "postmodern (Hal Brodigan)" <postmodern.mod3@...>
9 messages
2013/01/18
[#51545] Haiku port problem — Paulo Geyer <paulogeyer@...>
I'm trying to port ruby 1.9.3-p347 to Haiku (http://www.haiku-os.org/)
5 messages
2013/01/21
[#51578] [ruby-trunk - Bug #7729][Open] __dir__ returns a absolute dir path — "authorNari (Narihiro Nakamura)" <authorNari@...>
8 messages
2013/01/23
[#51623] [ruby-trunk - Feature #7739][Open] Define Hash#| as Hash#reverse_merge in Rails — "alexeymuranov (Alexey Muranov)" <redmine@...>
24 messages
2013/01/24
[#51726] [ruby-trunk - Feature #7751][Open] How to encapsulate File.delete and File.rename into one 'transaction'? — "mghomn (Justin Peal)" <yujianbin@...>
5 messages
2013/01/29
[#51735] [ruby-trunk - Bug #7752][Open] Rational/Float/Fixnum/Bignum `.to_s.encoding` is US-ASCII — "coffeejunk (Maximilian Haack)" <mxhaack@...>
6 messages
2013/01/29
[ruby-core:51551] [ruby-trunk - Bug #7696] Lazy enumerators with state can't be rewound
From:
"marcandre (Marc-Andre Lafortune)" <ruby-core@...>
Date:
2013-01-21 19:44:15 UTC
List:
ruby-core #51551
Issue #7696 has been updated by marcandre (Marc-Andre Lafortune).
shugo (Shugo Maeda) wrote:
> So, the following behavior is intended, right?
>
> $ ruby1.9.3 -I ~/src/backports/lib -r backports -r backports/2.0.0/enumerable -e "a = (1..3).lazy.zip(('a'..'z').each); p a.to_a; p a.to_a"
> [[1, "a"], [2, "b"], [3, "c"]]
> [[1, "d"], [2, "e"], [3, "f"]]
That's a very good question.
It probably would be best to call `to_enum` instead of `each`. Calling `next|rewind` on an enumerator should really only affect other calls to `next`. With `to_enum`, we'll get the same result every time.
Similarly, we expect `(1..3).zip(('a'..'z').each.tap(&:next))` to return `[[1, 'a'], ...`, and not `[[1, 'b'], ...` even though `next` was called on the given enumerator.
> If the above behavior is intended, the patch looks acceptable.
Thanks for reviewing it. I'll commit it, changing the call to `each` to `to_enum` (unless there are objections). I'll use the same technique to fix the other 3 lazy enumerators with state.
> > For the public api, should there be a public Yielder#memo and a guarantee that there is exactly one yielder object per iteration? or instead an extra state yielded when required?
>
> It might be too late to introduce a new API for 2.0.0, so how about to move it to next minor?
I understand. On the other hand, the API for Lazy.new was never decided upon and really should be finalized before 2.0.0!
If we opt for the Yielder#memo way (and agree on the name), maybe we can convince mame to accept such a trivial change. In that case, the biggest "change" is the explicit guarantee of a different yielder per iteration. It's already the case (also for JRuby and rubinius), but AFAIK it's never been official.
With the modified yielding way, it would be nice to include it in Lazy.new's api in this version, especially since it is still being finalized.
At the very least, a note in the documentation about handling state would be needed for 2.0.0.
----------------------------------------
Bug #7696: Lazy enumerators with state can't be rewound
https://bugs.ruby-lang.org/issues/7696#change-35516
Author: marcandre (Marc-Andre Lafortune)
Status: Open
Priority: High
Assignee:
Category: core
Target version: 2.0.0
ruby -v: r38800
The 4 lazy enumerators requiring internal state, i.e. {take|drop}{_while}, don't work as expected after a couple `next` and a call to `rewind`.
For example:
e=(1..42).lazy.take(2)
e.next # => 1
e.next # => 2
e.rewind
e.next # => 1
e.next # => StopIteration: iteration reached an end, expected 2
This is related to #7691; the current API does not give an easy way to handle state.
Either there's a dedicated callback to rewind, or data must be attached to the yielder.
--
http://bugs.ruby-lang.org/