Re: [code-review] Hello!

Jeff Yoak <[email protected]> Wed, 04 Feb 2004 13:59:02 -0800
Newsgroups gmane.comp.lang.perl.code-review-ladder
Message-ID <[email protected]>
Hi all,

	First, I wanted to thank all of you for your wonderful comments.  I've 
worked in a few environments that had very useful code review sessions, but 
this is the first time I've seen it done in a distributed fashion for open 
source code.  It is just as useful and I'm really enjoying it.  Thanks.

	Though my position has more or less already been stated by others, I 
wanted to chime in on the question of backward compatibility of new modules 
as I provided the seed for the conversation.
	While I see the value in sticking to reasonably current perls, all sorts 
of people don't do so for all sorts of reasons.  As people have pointed 
out, some people don't have the access to do so easily in the environments 
in which they work.  While I'm aware that in most cases you can install a 
newer perl locally, with only mildly out-dated versions, it isn't worth 
it.  In addition, some people do meaningful work with Perl without the 
expertise required to do that.
	Other people do their work in large organizations that are slow to upgrade 
perl.  Until last October, I worked at a large company that is absolutely 
wonderful with respect to handling technology and in both its use of, and 
contributing to, open source, but is so intensely busy and has such a large 
installed base that upgrades of that sort aren't done casually.  I think 
they're still on a late 5.005.  I'm sure there are many similar 
environments.  I'd hate to cut them off.
	I think the best approach is to be as backwards compatible as is "easily" 
possible.  What I mean by this is that I'll balance using language features 
that I need or want with their likely availability among my intended 
audience.  My module uses lexically scoped variables, for 
instance.  Strictly speaking I could avoid this, but at this point *very* 
few people are stuck with Perl 4, and the only available remedy is making 
the code harder to use, maintain and update.  I don't think that sort of 
backward compatibility is worth the costs.
	By contrast, the issue that got this started was my choice to use an array 
ref to hold values and then accessing the values by numeric subscript.  A 
poster suggested that this isn't as clean as using constant and calling 
those values by name.  This is a much smaller liability than not using 
strict and not having lexicals, so if the choice is between that small lack 
of clarity and backward compatibility, I might choose to allow the lack of 
clarity to exist anyway... but that isn't a choice I need to make.  Perl 
has a handy mechanism for accessing data by name that has been around as 
long as I've used Perl, in hashes.  I can make the change desired in a way 
that doesn't require a newer version of perl than what I'm already 
implicitly requiring through the use of lexicals.
	Finally, I think there is little value to the "political" argument to give 
people reasons to upgrade perl.  What would be the purpose?  perl makes its 
own argument.  New versions are driven by new and better functionality and 
improvement of existing functionality.  Each individual can make informed 
decisions about whether it is worth whatever hurdles he perceives as 
existing to upgrade to a newer version.  What possible motive do I have in 
trying to skew that decision in one direction by creating a new module that 
user might enjoy that requires a particular upgrade decision?
	I think this kind of decision is best, at least for me.  I wouldn't have 
uploaded the module to CPAN in the first place if I hadn't wanted it to be 
available as broadly as possible and be useful to as many people as 
possible.  It seems that any design principle that cuts off usage to some 
people for little to no gain would be self-defeating.

Cheers,
Jeff