in reply to Re^2: Best way to sum an array?
in thread Best way to sum an array?

With List::Util::sum() running 100x faster than the best pure perl equivalent, why wouldn't you use it even if you don't need the speed

It's a good question. The only answer which springs to mind is that you want to avoid loading List::Util in the first place because:

They are all edge cases anyway. And of course if you are one of the 99% who do have enough RAM etc. to load List::Util you get all the other good stuff in that module other than sum() essentially for free.

In summary: yes, I'd use it everywhere unless there's a demonstrable penalty.

Replies are listed 'Best First'.
Re^4: Best way to sum an array?
by BrowserUk (Patriarch) on May 25, 2017 at 15:44 UTC
    You are actually concerned about speed but it's faster to run a short script without loading List::Util if the arrays being summed are tiny

    Hm.

    1. constrained environment: I guess 600k might make a difference somewhere.

      Hard to see where though. Most phones have 4GB and even the original Raspberry Pi had 512MB.

    2. "faster ... without loading List::Util: Given WithListUtil.pl:
      #! perl -sl use List::Util qw[ sum ]; our $N //= 10; print sum( 1 .. $N );

      And WithoutListUtil.pl:

      #! perl -sl #use List::Util qw[ sum ]; our $N //= 10; my $t = 0; $t += $_ for 1 .. $N; print $t;

      Darned if I can find any significant difference for as few as 3 numbers to add. Pretty consistently 4-5/100ths for both to start perl, count the numbers and return to the prompt:

      [16:27:32.60] C:\test>for /l %i in (1,1,10) do WithListUtil.pl -N=3 [16:27:55.68] C:\test>WithListUtil.pl -N=3 [16:27:55.73] C:\test>WithListUtil.pl -N=3 [16:27:55.79] C:\test>WithListUtil.pl -N=3 [16:27:55.85] C:\test>WithListUtil.pl -N=3 [16:27:55.90] C:\test>WithListUtil.pl -N=3 [16:27:55.95] C:\test>WithListUtil.pl -N=3 [16:27:56.00] C:\test>WithListUtil.pl -N=3 [16:27:56.05] C:\test>WithListUtil.pl -N=3 [16:27:56.10] C:\test>WithListUtil.pl -N=3 [16:27:56.15] C:\test>WithListUtil.pl -N=3 [16:27:56.20] C:\test>for /l %i in (1,1,10) do WithoutListUtil.pl -N=3 [16:28:22.44] C:\test>WithoutListUtil.pl -N=3 [16:28:22.49] C:\test>WithoutListUtil.pl -N=3 [16:28:22.54] C:\test>WithoutListUtil.pl -N=3 [16:28:22.59] C:\test>WithoutListUtil.pl -N=3 [16:28:22.63] C:\test>WithoutListUtil.pl -N=3 [16:28:22.67] C:\test>WithoutListUtil.pl -N=3 [16:28:22.71] C:\test>WithoutListUtil.pl -N=3 [16:28:22.76] C:\test>WithoutListUtil.pl -N=3 [16:28:22.80] C:\test>WithoutListUtil.pl -N=3 [16:28:22.84] C:\test>WithoutListUtil.pl -N=3 [16:28:22.88] C:\test>

      It's hard to see the loading time of List::Util being a significant factor in any real code.

    3. XS isn't feasible so you're stuck with the PP version:

      I thought it came with the core for most distributions. I 'spose someone somewhere might be running a bastardized, cut-down version.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority". The enemy of (IT) success is complexity.
    In the absence of evidence, opinion is indistinguishable from prejudice. Suck that fhit
      Darned if I can find any significant difference for as few as 3 numbers to add. Pretty consistently 4-5/100ths for both to start perl, count the numbers and return to the prompt

      Interesting. Using precisely your 2 scripts, I see the withListUtil.pl taking about 60-70% longer.

      $ time for i in {1..1000}; do perl withListUtil.pl > /dev/null; done real 0m6.512s user 0m3.820s sys 0m2.867s $ time for i in {1..1000}; do perl withoutListUtil.pl > /dev/null; don +e real 0m3.880s user 0m1.538s sys 0m2.497s

      For the record, this is perl v5.20.3 with List::Util v1.42 on 64-bit Linux.

        I guess my point (in my reply to you), is that if the cost of loading a (small, mostly precompiled binary) module is a significant factor in the runtime of a given application, then Perl is probably the wrong choice of language.

        But really, the "why wouldn't you" in the post to which you replied was a throw away comment rather than a scientific pronouncement; you seem to be making an issue of a non-issue.

        S'funny, I'm normally on the other side of this discussion. I rarely advocate the use of a module over one line of perl; but in this case, the benefits equation really does bias one way in 99% of cases.

        But I guess I'll go back to lurking...


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority". The enemy of (IT) success is complexity.
        In the absence of evidence, opinion is indistinguishable from prejudice. Suck that fhit
Re^4: Best way to sum an array?
by LanX (Saint) on May 25, 2017 at 13:01 UTC
  • You want to learn about algorithms and Perl's limitations?