[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: RFC: Bump minimum Perl to 5.18.0 for next major release of both Auto
From: |
Zack Weinberg |
Subject: |
Re: RFC: Bump minimum Perl to 5.18.0 for next major release of both Autoconf and Automake |
Date: |
Wed, 17 Feb 2021 22:41:55 -0500 |
On Fri, Jan 29, 2021 at 5:54 PM Karl Berry <karl@freefriends.org> wrote:
I don't know why, but I only received this message today.
> But, I think it would be wise to give users a way to override the
> requirement, of course with the caveat "don't blame us if it doesn't
> work", unless there are true requirements such that nothing at all would
> work without 5.18.0 -- which seems unlikely (and undesirable, IMHO).
> 2013 is not that long ago, in autotime.
This is a reasonable suggestion but Perl makes it difficult. You
specify the interpreter version requirement for a Perl script with a
statement like
use 5.006; # what we have now
at the top of the script. The number has to be a constant, and it has
to appear at the top of every .pm file as well as the main script. I
don't think it makes sense to use a config.status substitution
variable for this -- then we'd have to generate _all_ of the .pm files
through config.status!
What we could do is something like this instead:
use 5.008; # absolute minimum requirement
use if $] >= 5.016, feature => ':5.16'; # enable a number of
desirable features from newer perls
+ documentation that we're only _testing_ with the newer perls.
I did some more research on perl's version history (notes at end) and
I think the right thresholds are 5.10 for absolute minimum and 5.16
for 'we aren't going to test with anything older than this'. 5.10 is
the oldest perl that shipped Digest::SHA, which I have a specific need
for in autom4te; it is also the oldest perl to support `state`
variables and the `//` operator, both of which could be quite useful.
The new features in 5.12, 5.14, and 5.16 mostly have to do with
Unicode, which we do not strictly _need_ but which, if we turn them
on, give us a better chance of Just Doing The Right Thing with
user-supplied Unicode text. The top-of-each-file boilerplate would
look something like this:
use 5.010;
use strict;
use warnings FATAL => ’all';
use utf8;
use if $] >= 5.016, feature => ’:5.16';
no if $] >= 5.022, warnings => 'experimental::re_strict';
use if $] >= 5.022, re => 'strict';
_Possibly_ we would also want `use open qw(:std :utf8)`, I'm not sure.
(That means "treat all files as encoded in UTF-8 unless overridden
below.")
Perl 5.10 shipped in 2007, so that's another six years of compatibility window.
zw
----
# perl 5.8
- released 2002-07
- support for `open FH, "-|", LIST`
- Definitely useful modules: `Storable`, `Time::HiRes`, `if`, `open`,
`threads` (already in use when available)
- Possibly useful modules: `Digest::MD5`, `MIME::Base64`
# perl 5.10
- released 2007-12
- first version supporting `use feature`, `state`, the `//`
operator, named capture groups, and a bunch of other regex
enhancements
- Possibly useful modules: `Digest::SHA`, `Compress::Zlib`
# perl 5.12
- released 2010-04
- first version for which `use 5.xx` implies `use strict`
# perl 5.14
- released 2011-05
- support for `s///r` (returns result of substitution, input variable
is not modified)
- first complete implementation of `use feature 'unicode_strings'`
- Possibly useful module: `HTTP::Tiny`
# perl 5.16
- released 2012-05
- a whole bunch of unicode-related bug fixes
- bugs relevant to autotools were fixed in `FindBin` and `IPC::Open3`
# perl 5.18
- released 2013-05
- first version with `experimental` warnings category
- oldest version typically available on cloud platforms due to
important security fixes (which are not directly relevant for
use in autotools)
- oldest version in which HTTP::Tiny implements HTTPS correctly