Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^5: Avoiding Globals with OO Perl

by BrowserUk (Patriarch)
on Oct 21, 2011 at 00:06 UTC ( [id://932790]=note: print w/replies, xml ) Need Help??


in reply to Re^4: Avoiding Globals with OO Perl
in thread Avoiding Globals with OO Perl

Look again and re-assess. There is no exaggeration.

Both tests set and reference the variable 1000 times each. The reason for including a loop inside the both benchmark subs is to amortise the cost of that subroutine call across the 1000 iterations of the code under test. Without it, the code would be benchmarking the calling of the benchmark sub, not the code under test.

If the benchmark is not to your taste, then consider this. Setting and then referencing a single scalar value involves:

  • Using the object
    1. 4 hash lookups
    2. two subroutine calls
    3. two multi-element list assignments
    4. one conditional test.
    5. plus the cost of stacking parameters and returning the results.

    And finally one each of setting or reading the value of the actual scalar.

  • Using a variable
    • one each of setting or reading the value of the actual scalar
    • Errrrrr. That's all folks"

All in all, it is quite remarkable that the pointless OO code is only 7 1/2 times slower.


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".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^6: Avoiding Globals with OO Perl
by chromatic (Archbishop) on Oct 21, 2011 at 01:35 UTC
    Both tests set and reference the variable 1000 times each.

    Yep. Would you write code like that in a real program?

    I haven't either, but thanks for doing that benchmark. If I ever need to micro-optimize pointless silly busywork for speed, I'll be sure to keep in mind that some useless loops are faster than others in this one example.


    Improve your skills with Modern Perl: the free book.

      Both tests set and reference the variable 1000 times each. Yep. Would you write code like that in a real program?

      Set and reference the value of scalars. Yes, I do that in every program I write. And so do you!

      silly busywork

      Okay, I can see you're wearing your dOOgma head today so there'll be no placating you.

      But, for those readers concerned with actually understanding what is going on in the benchmark, the loop within the subs is common to both and is therefore irrelevant to the relative performance -- the percentage figures -- produced by the benchmark.

      The benchmark is sound.

      The relevance of the benchmark depends upon real-world usage, but since the OP hasn't posted any real-world usage -- and it would be specific to his application even if he had -- it is up to each reader to decide upon the importance of performance to their knowledge of their applications.

      Your attempts at blanket derisory dismissal serve no one.


      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".
      In the absence of evidence, opinion is indistinguishable from prejudice.
        Learned a new word 'dOOgma'. Thanks, very nice!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://932790]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2024-04-23 06:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found