develooper Front page | perl.perl5.porters | Postings from January 2011

Re: Time to update

Thread Previous | Thread Next
Nicholas Clark
January 30, 2011 01:03
Re: Time to update
Message ID:
On Sat, Jan 29, 2011 at 09:46:32PM -0500, Eric Brine wrote:
> On Sat, Jan 29, 2011 at 5:48 PM, Mark Overmeer <> wrote:
> > The unsplit file is 1024 lines (21kb).  It does not use function
> > signatures, but checks parameter list length manually...
> >
> There's no way to simply check parameter list length using "function
> signatures", if by that you mean prototypes,

Indeed, given that prototype checking can be disabled by calling using a &
If it *matters* that the parameter list length is correct, then it still
needs to be checked, even with prototypes.

> Attached is my compact rework of the POSIX module (434 lines, 15kb), as
> >
> example how small the module actually is. No regression tests run yet.
> > All fancy tricks removed. But it may trigger some debate first ;-)
> >
> What about the fancy tricks you added? Prototypes change parsing rules, so
> by definition, it is a backwards incompatible change. For example, your
> changes causes
> perl -e"use POSIX qw( ); @args=2; POSIX::exit(@args);"
> to exit with code 1 instead of 2.

And also breaks any existing code which has marshaled the arguments for a
2 or 3 argument function into an array before calling it. At least it breaks
*that* at compile time.

I'm really not convinced that prototypes (as is) add any value in the general
case. To my mind, they complicate reading the code, because they provide
action-at-a-distance on how the parser is going to treat function calls.

There seemed to be a fashion for using them extensively around 5.003-5.004
time (for example, a lot of the regen code in the core), and looking at that
code now, it feels dated to me, and lacking some KISS.

Nicholas Clark

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About