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

Re^6: When every microsecond counts: Parsing subroutine parameters

by BrowserUk (Patriarch)
on May 18, 2008 at 07:18 UTC ( [id://687183]=note: print w/replies, xml ) Need Help??


in reply to Re^5: When every microsecond counts: Parsing subroutine parameters
in thread When every microsecond counts: Parsing subroutine parameters

Yeah, there's a much better and cheaper way - don't name them, name the indices into @_ via constant subs,

Yeah! I demonstrated the potential for that back in Micro optimisations can pay off, and needn't be a maintenance problem & despite the jury's verdict, the performance gains attributable to minimising subroutine call overhead in that type of cpu intensive, heavily iterative (3d graphics with hidden line removal) are distinctly measurable.

I'd only use this for subs that are unavoidably called at the centre of several levels of loop. The 2D & 3D Vector classes in the code in Re: Re^2: Micro optimisations can pay off, and needn't be a maintenance problem (I don't believe it) are a perfect example of the sort of code that can benefit from this technique.

Any particular reason for using constant subs? It achieves the same thing, but to me use constant is just clearer of the intent and saves a little typing:

use constant { FOO => 0, BAR => 1 };

What would be really cool is for an alternative sub declaration syntax that declared scoped constants for subs. Eg.

sub Point3D::new( CLASS, X, Y, Z ) { return bless [ @_[ X, Y, Z ] ], $_[ CLASS ]; }

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^7: When every microsecond counts: Parsing subroutine parameters
by shmem (Chancellor) on May 18, 2008 at 08:50 UTC
    Any particular reason for using constant subs?

    Well, er... it's always the same reason for not using a module: I happily hack along, until... it gets boring.

    "Hey, that's boring!", I begin thinking, "isn't there a module?" ;-)

    --shmem

    _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                  /\_¯/(q    /
    ----------------------------  \__(m.====·.(_("always off the crowd"))."·
    ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (2)
As of 2024-04-26 04:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found