# New Ticket Created by Aaron Sherman # Please include the string: [perl #128692] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/Ticket/Display.html?id=128692 >
The core issue is this simple code: my @a = lazy gather { say 'we actually run' }; sink @a; Which gives: OUTPUT«WARNINGS for <tmp>:Useless use of @a in sink context (line 1)we actually run» Note that if you insert "quietly" before sink, it still gives the warning, which is also questionable. >From the discussion on IRC: [11:59] <harmil> Speaking of sink, I'm not convinced that the warning for useless use of iterables in sink context should be a thing. e.g.: [11:59] <harmil> m: sink ^1000 [11:59] <+camelia> rakudo-moar 86843a: OUTPUT«WARNINGS for <tmp>:Useless use of "^" in expression "^1000" in sink context (line 1)» [12:00] <harmil> I'm explicitly asking for the expansion of the sequence to be performed and ignored. That's not something that should get a warning, is it? [12:00] <jnthn> I don't think it's a warning for iterables in general [12:00] <jnthn> It's for a useless use of the (known pure) range constructor [12:01] <jnthn> m: sink 1, 1, *+* ... 8 [12:01] <+camelia> rakudo-moar 86843a: ( no output ) [12:01] <jnthn> Note no warning there [12:02] <harmil> m: my @foo = 1,1,*+*...8; sink @foo [12:02] <+camelia> rakudo-moar 86843a: OUTPUT«WARNINGS for <tmp>:Useless use of @foo in sink context (line 1)» [12:03] <jnthn> The assignment to the array is already eager in that case [12:05] <harmil> jnthn: that's not why we get the warning. I won't do the version with 8 replaced by * as it never terminates, but it also gives the warning. [12:06] <unmatched}> m: sink 1, 1, *+* ... * [12:06] <+camelia> rakudo-moar 86843a: OUTPUT«Memory allocation failed; could not allocate 1146880 bytes» [12:06] <jnthn> m: my @foo = 1,1,*+*...8; sink @foo; [12:06] <+camelia> rakudo-moar 86843a: OUTPUT«WARNINGS for <tmp>:Useless use of @foo in sink context (line 1)» [12:06] <jnthn> But that terminates. [12:07] <harmil> It just feels to me as if "sink" means "just do it" and getting a warning that "it" isn't useful just doesn't sit well with me. YMMV. [12:08] <jnthn> It's not telling you it isn't useful, it's telling you there's nothing to do and you wrote dead code. [12:09] <jnthn> Which the vast majority of the time implies a confused programmer. [12:09] <harmil> Except it doesn't know that. @a might be anything, and iterating over it might be extremely useful (e.g. it might do a full read from a DB, and I might be timing that) [12:09] <unmatched}> m: quietly sink ^1000 [12:09] <+camelia> rakudo-moar 86843a: ( no output ) [12:10] <jnthn> m: my @a = lazy gather { say 'we actually run' }; sink @a [12:10] <+camelia> rakudo-moar 86843a: OUTPUT«WARNINGS for <tmp>:Useless use of @a in sink context (line 1)we actually run» [12:10] <harmil> Nice example. [12:10] <unmatched}> m: my @a = lazy gather { say 'we actually run' }; quietly sink @a [12:10] <+camelia> rakudo-moar 86843a: OUTPUT«WARNINGS for <tmp>:Useless use of @a in sink context (line 1)we actually run» [12:10] <jnthn> Yeah, that one is more interesting, but now I want to know why the ... one up above didn't hang [12:10] <unmatched}> m: my @a = lazy gather { say 'we actually run' }; sink quietly @a [12:10] <+camelia> rakudo-moar 86843a: OUTPUT«WARNINGS for <tmp>:Useless use of @a in sink context (line 1)we actually run» [12:11] <jnthn> oh wait, 'cus I wrote it wrong [12:11] <unmatched}> Interesting. [12:11] <jnthn> m: my @foo = 1,1,*+*...*; sink @foo; [12:11] <+camelia> rakudo-moar 86843a: OUTPUT«(signal SEGV)WARNINGS for <tmp>:Useless use of @foo in sink context (line 1)» [12:11] <jnthn> Yeah, I'd agree on a variable it's rather dubious. [12:11] <harmil> You get the segv award! [12:12] <jnthn> On sink ^1000 I think it's spot on [12:12] <harmil> Yeah, at best ^n is just a weird sort of timing test, and I could reasonably expect to have to quiet that manually. [12:12] <jnthn> But yeah, feel free to file it against the @foo case. That does look a bit bogus [12:12] <harmil> And I might expect that the optimizer would not be my friend there -- Aaron Sherman, M.: P: 617-440-4332 Google Talk, Email and Google Plus: a...@ajs.com Toolsmith, developer, gamer and life-long student.