[#56333] [CommonRuby - Feature #8723][Open] Array.any? predicate returns true for empty array. — "nurettin (Nurettin Onur TUGCU)" <onurtugcu@...>
[#56368] [ruby-trunk - Bug #8730][Open] "rescue Exception" rescues Timeout::ExitException — "takiuchi (Genki Takiuchi)" <genki@...21g.com>
2013/8/28 nobu (Nobuyoshi Nakada) <nobu@ruby-lang.org>:
[#56389] [ruby-trunk - Feature #8738][Open] Integer#single_bit? (Actually Fixnum#single_bit? and Bignum#single_bit?) — "akr (Akira Tanaka)" <akr@...>
[#56407] [ruby-trunk - misc #8741][Open] email notification on bugs.ruby-lang.org is broken — "rits (First Last)" <redmine@...>
[#56517] Re: [ruby-cvs:49638] zzak:r42496 (trunk): * lib/time.rb: [DOC] Document constants by @markijbema [Fixes GH-377] — Tanaka Akira <akr@...>
2013/8/11 <zzak@ruby-lang.org>:
[#56523] [ruby-trunk - Bug #8769][Open] [PATCH] process.c (rb_fork_internal): remove cloexec setting — "normalperson (Eric Wong)" <normalperson@...>
[#56524] [ruby-trunk - Bug #8770][Open] [PATCH] process.c: avoid EINTR from Process.spawn — "normalperson (Eric Wong)" <normalperson@...>
[#56536] [ruby-trunk - Feature #8772][Open] Hash alias #| merge, and the case for Hash and Array polymorphism — "trans (Thomas Sawyer)" <redmine@...>
[#56551] [CommonRuby - Feature #8777][Open] Process.mach_absolute_time — "tenderlovemaking (Aaron Patterson)" <tenderlove@...>
[#56567] [ruby-trunk - Feature #8780][Assigned] DBM#to_h alias for #to_hash — "zzak (Zachary Scott)" <e@...>
[#56569] [ruby-trunk - Feature #8781][Open] Use require_relative() instead of require() if possible — "ko1 (Koichi Sasada)" <redmine@...>
On Sat, Aug 17, 2013 at 07:17:50AM +0900, trans (Thomas Sawyer) wrote:
(13/08/17 13:13), Aaron Patterson wrote:
(2013/08/12 15:35), ko1 (Koichi Sasada) wrote:
(2013/08/13 2:25), drbrain (Eric Hodel) wrote:
On Tue, Aug 13, 2013 at 07:38:01AM +0900, SASADA Koichi wrote:
(2013/08/16 14:21), Aaron Patterson wrote:
On Fri, Aug 16, 2013 at 03:00:59PM +0900, SASADA Koichi wrote:
Em 16-08-2013 03:24, Aaron Patterson escreveu:
On Fri, Aug 16, 2013 at 09:35:04AM -0300, Rodrigo Rosenfeld Rosas wrote:
[#56634] [ruby-trunk - Feature #8788][Open] use eventfd on newer Linux instead of pipe for timer thread — "normalperson (Eric Wong)" <normalperson@...>
(2013/08/16 10:47), normalperson (Eric Wong) wrote:
SASADA Koichi <ko1@atdot.net> wrote:
Hi
KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
[#56658] [ruby-trunk - Feature #8796][Open] Use GMP to accelerate Bignum operations — "akr (Akira Tanaka)" <akr@...>
[#56672] Re: [ruby-cvs:49733] eregon:r42591 (trunk): * process.c (rb_clock_gettime): document CLOCK_REALTIME and — Tanaka Akira <akr@...>
2013/8/17 <eregon@ruby-lang.org>:
On 17 August 2013 02:52, Tanaka Akira <akr@fsij.org> wrote:
[#56746] [ruby-trunk - Bug #8803][Open] Another buffer overflow — "user021 (a s)" <user021@...>
[#56753] [ruby-trunk - Feature #8804][Open] ONCE syntax — "ko1 (Koichi Sasada)" <redmine@...>
[#56762] [ruby-trunk - Bug #8805][Open] Ruby GC::Profiler returns incorrect info on Solaris (and relatives) — "sax (Eric Saxby)" <sax@...>
[#56780] [ruby-trunk - Feature #8809][Open] Process.clock_getres — "akr (Akira Tanaka)" <akr@...>
[#56795] [ruby-trunk - Bug #8816][Open] Tempfile.new may return the same name for parallel calls — "375gnu (Hleb Valoshka)" <redmine@...>
[#56809] [ruby-trunk - Feature #8820][Open] Speed up Array#index — "trans (Thomas Sawyer)" <redmine@...>
"trans (Thomas Sawyer)" <redmine@ruby-lang.org> wrote:
[#56824] [ruby-trunk - Feature #8823][Open] Run trap handler in an independent thread called "Signal thread" — "ko1 (Koichi Sasada)" <redmine@...>
2013/8/27 ko1 (Koichi Sasada) <redmine@ruby-lang.org>:
[#56839] [ANN] Ruby Developer Meeting 20130831 — "NARUSE, Yui" <naruse@...>
Hi,
Hi,
[#56861] [ruby-trunk - Feature #3620] Add Queue, SIzedQueue and ConditionVariable implementations in C in addition to ruby ones — "ko1 (Koichi Sasada)" <redmine@...>
"ko1 (Koichi Sasada)" <redmine@ruby-lang.org> wrote:
[#56866] [ruby-trunk - Feature #8834][Open] Kernel#load_relative — "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>
[#56890] [ruby-trunk - Feature #8839][Open] Class and module should return the class or module that was opened — "headius (Charles Nutter)" <headius@...>
[#56894] [ruby-trunk - Feature #8840][Open] Yielder#state — "marcandre (Marc-Andre Lafortune)" <ruby-core@...>
[#56911] [ruby-trunk - Feature #8846][Open] Publicize Module#include — "matsuda (Akira Matsuda)" <ronnie@...>
[ruby-core:56363] [ruby-trunk - Bug #8693] lambda invoked by yield acts as a proc with respect to return
Issue #8693 has been updated by rits (First Last).
alexeymuranov (Alexey Muranov) wrote:
>
> I agree it would be nice if Matz clarified the issue.
>
> rits (First Last) wrote:
> >
> > This notion that & somehow extracts the block from the lambda "shell", throwing the lambda shell away is incorrect.
>
> If you mean that this is not how things work, apparently it is true. But for me it would be the most natural if "(({&}))" was converting a lambda/proc into a block, and "(({&p}))" in the end of the argument list was wrapping the block into a proc called "(({p}))". For me in fact it would be the only non-surprizing behavior.
>
> Consider this:
>
> def m *a
> a.object_id
> end
>
> a = []
>
> a.object_id # => 2155500640
> m *a # => 2155435920 (different)
>
> This looks completely normal to me.
* extracts individual elements and passes them individually, in fact the receiving method can then regroup the individual args in many different ways:
irb(main):010:0> def m1(a, *args, b); [a, args, b] end; m1 *[1, 2, 3, 4]
=> [1, [2, 3], 4]
the original array, by definition, is discarded, only the elements are passed, so this can't work any other way, whereas method(&proc_or_lamda) can theoretically works in both modes (keep and invoke the proc/lambda or "extract" and keep just the block). At a minimum it should be consistent. Currently it keeps and invokes the proc, but with hybrid proc/lambda semantics (argument checking of a lambda, return of a proc). The current behavior is bug regardless of which conceptual model you pick.
As to which model is preferable, I suppose that's debatable. I like the current model of keeping and invoking the proc/lambda (with this bug fixed). More on that below.
>
> However, i am surprised with this:
>
> def m &p
> p.object_id
> end
>
> p = proc{}
>
> p.object_id # => 2154923560
> m &p # => 2154923560 (same)
>
blocks are not first class citizens in ruby, there's no block class or block objects, so conceptually it makes sense to think of blocks as a role (or slot). So the block role can be played a syntactic ruby block or by a proc. If you think of it as a role/slot then the proc does not need to be unwrapped into a block "object" and then re-wrapped, but merely assume the block role or be put into the block slot, and then looked up in the block slot. This model has implication for this bug, yield would check the block slot and if there's a proc there, simply invoke it. I think this is what actually happens (given the evidence I provided: lambda is retained, lambda arity is enforced). The only quirk is the "return"
----------------------------------------
Bug #8693: lambda invoked by yield acts as a proc with respect to return
https://bugs.ruby-lang.org/issues/8693#change-40870
Author: rits (First Last)
Status: Rejected
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 2.0.0p247 (2013-06-27) [x64-mingw32]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
irb(main):004:0> def m1; yield end; def m2; m1 &->{return 0}; 1 end; m2
=> 0
--
http://bugs.ruby-lang.org/