Hi Liz, bypassing $*ARGFILES.lines by using $*IN.lines, makes it faster for me than using slurp, and seems like a more logic algorithm to solve the problem. I think that, for any person that seriously thinks about using perl6 for one-liners, using $*IN instead of $*ARGFILES is something to take into consideration.
On Mon, Sep 23, 2019 at 8:16 PM Elizabeth Mattijsen <l...@dijkmat.nl> wrote: > I've tested with a file with 1M numbers between 1..100. > > The quick answer would be: use `say lines.sum`. But since `[+]` is > already internally optimized to `.sum`, that doesn't make much sense. > > If you know that you will only see integer numbers, you can make it a bit > faster by explicitly coercing to `Int` before summing: > > say lines.map(*.Int).sum > > This takes it down from 2.9 seconds to 2.5 seconds for me. > > A quicker way I found is to bypass the overhead of finding lines, by > slurping the whole file in one go, then splitting on newline and then > summing: > > say slurp.split("\n").sum > > This brings it down from 2.9 to about 2 seconds. > > Without resorting to NQP, I think that is what the current state of > affairs is. > > > On 23 Sep 2019, at 19:57, Marc Chantreux <e...@phear.org> wrote: > > > > hello, > > > > question: in raku, is there a faster solution than > > > > say [+] lines > > > > long story; > > > > here is a thread i would like to reply to > > > > > https://stackoverflow.com/questions/450799/shell-command-to-sum-integers-one-per-line > > > > because: > > > > * the perl5 answer is fast compared to the other dynamic langages > > * the shortest solution is very interesting: even if you have an average > > level in dc (i think i have one), this is not that easy to read the > > answer (commented in the post) > > > > dc -f infile -e '[+z1<r]srz1<rp' > > > > obvioulsy: raku would be my prefered answer with: > > > > seq 100000000 | perl6 -e 'say [+] lines' > > > > but ... > > > > seq 100000000 | time perl6 -e 'say [+] lines' > > 5000000050000000 > > perl6 -e 'say [+] lines' 1591,80s user 3,04s system 122% cpu 21:36,63 > total > > > > seq 100000000 | time /usr/bin/perl6 -e 'say [+] lines' > > 5000000050000000 > > /usr/bin/perl6 -e 'say [+] lines' 2171,01s user 4,64s system 129% cpu > 28:04,73 total > > > > when > > > > perl6 -v > > This is Rakudo version 2019.03.1 built on MoarVM version 2019.03 > > implementing Perl 6.d. > > /usr/bin/perl6 -v > > This is Rakudo version 2018.12 built on MoarVM version 2018.12 > > implementing Perl 6.d. > > > > regards > > marc >