Skip to content
This repository was archived by the owner on Jun 1, 2023. It is now read-only.

Commit 6b068dd

Browse files
author
Reini Urban
committed
cperl-5.24.2 released
add new 5.25 cdeltas, update memory sizes and perlhist, STATUS.
1 parent 1dc5d4b commit 6b068dd

File tree

11 files changed

+2097
-213
lines changed

11 files changed

+2097
-213
lines changed

MANIFEST

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5070,6 +5070,9 @@ pod/perl5223cdelta.pod cperl changes in version 5.22.3c
50705070
pod/perl5224cdelta.pod cperl changes in version 5.22.4c
50715071
pod/perl5240cdelta.pod cperl changes in version 5.24.0c
50725072
pod/perl5241cdelta.pod cperl changes in version 5.24.1c
5073+
pod/perl5250cdelta.pod cperl changes in version 5.25.0c
5074+
pod/perl5251cdelta.pod cperl changes in version 5.25.1c
5075+
pod/perl5252cdelta.pod cperl changes in version 5.25.2c
50735076
pod/perl561delta.pod Perl changes in version 5.6.1
50745077
pod/perl56delta.pod Perl changes in version 5.6
50755078
pod/perl581delta.pod Perl changes in version 5.8.1

STATUS.md

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,8 @@ on two unrelated core tests (issignaling setpayloadsig + chmod linked in).
3030
Windows is smoked with MSVC 10 and 12 for 32 and 64bit.
3131

3232
The current stable release is
33-
[5.24.1c](https://github.com/perl11/cperl/releases/tag/cperl-5.24.2) - [perl5241cdelta](perl5241cdelta.html),
34-
the latest development release [5.25.1c](https://github.com/perl11/cperl/releases/tag/cperl-5.25.0) - [perl5251cdelta](perl5251cdelta.html).
35-
See the current changelog [cperl-5.25.2 delta](perlcdelta.html).
33+
[5.24.2c](https://github.com/perl11/cperl/releases/tag/cperl-5.24.2) - [perl5242cdelta](perl5242cdelta.html),
34+
the latest development release [5.25.2c](https://github.com/perl11/cperl/releases/tag/cperl-5.25.2) - [perl5252cdelta](perl5252cdelta.html).
3635
We also have [5.22.4c](https://github.com/perl11/cperl/releases/tag/cperl-5.22.4), [perl5224cdelta](perl5224cdelta.html).
3736

3837
All tests pass. CPAN works.
@@ -52,10 +51,8 @@ the patches are all provided in my
5251
upgrade is seemless. E.g. Test2 (the new Test::Simple) broke >15
5352
modules without any patches.
5453

55-
cperl-5.24.0c and cperl-5.24.1c have [about 24 fixes](perldelta.html#Known-Problems-fixed-elsewhere),
56-
for problems which are not fixed in perl-5.24.2.
57-
Ditto cperl-5.22.4c has about 20 fixes which are not in the latest
58-
perl-5.22.3.
54+
v5.24.0c, v5.24.1c and v5.24.2c have [about 24 fixes](perldelta.html#Known-Problems-fixed-elsewhere), for problems which are not fixed in perl-5.24.1.
55+
Ditto cperl-5.22.4c has about 20 fixes which are not in the latest perl-5.22.3.
5956

6057
![Memory usage: perl -e0](cperl-m0.png)
6158

@@ -75,7 +72,7 @@ For all versions see [bench-all/](bench-all/index.html)
7572
* function return types declarations as attribute
7673
* many more builtin function attributes
7774
* shaped arrays with compile-time checks and optims
78-
* static loop optims
75+
* static loop optims, eliminated run-time bounds checks
7976
* fast arithmetic overflow
8077
* convert static method to subs
8178
* Config as XS
@@ -90,7 +87,7 @@ For all versions see [bench-all/](bench-all/index.html)
9087
* improved build system (make -s, faster, CC vs LD confusion)
9188
* hash keys keep the tainted info. see [perlsec](http://perldoc.perl.org/perlsec.html#Taint-mode)
9289
There are no known taint loopholes anymore.
93-
* fix ops using lexical `$_`. The lexical topic feature is supported.
90+
* fixes ops and modules using lexical `$_`. The lexical topic feature is supported.
9491
* readonly packages can be cloned with threads.
9592
* security and overlarge data fixes for Storable, YAML not yet.
9693
* include B-C, Cpanel::JSON::XS, YAML::XS, Devel::NYTProf, Term::ReadKey
@@ -99,7 +96,7 @@ For all versions see [bench-all/](bench-all/index.html)
9996
versions with a 'c' suffix, and 10x faster JSON and YAML usage. (esp. with cpan).
10097
* many typed and modernized core modules, where signatures and types make
10198
sense and cause not much trouble.
102-
* some security fixes for Unicode confusables, but more are needed (use strict 'names').
99+
* many security fixes for Unicode symbols. no mixed scripts, normalized, no \0.
103100
* handle method calls on protected stashes.
104101
* disallow silent overflows of hash and array indices or string/name lengths.
105102
New "Too many elements" error and many new "overlarge" or "too large" panics.
@@ -110,8 +107,11 @@ For all versions see [bench-all/](bench-all/index.html)
110107
* special handling for security warnings: protect against hash flood DoS. Warn on
111108
all known public attacks, as metasploit bind/reverse shells or the Storable attack
112109
with the new `warn_security` API.
113-
Since 5.25.1 such security warnings are logged at STDERR/syslog with the
110+
Since v5.25.1c such security warnings are logged at STDERR/syslog with the
114111
remote user/IP.
112+
* Support clang LTO "link time optimizations", using proper linkage attributes.
113+
-fsanitize=cfi instead of -fstack-protector not yet.
114+
* Reproducible builds are default since v5.25.2c
115115

116116
Most of them only would have a chance to be merged upstream if a p5p
117117
committer would have written it.
@@ -310,6 +310,17 @@ are limited. So they are based on master.
310310

311311
compile/dump to native code via emacs unexec, on most platforms.
312312

313+
* [feature/gh141-smallstring](https://github.com/perl11/cperl/issues/141)
314+
315+
[code](http://github.com/perl11/cperl/commits/feature/gh141-smallstring)
316+
317+
optimize space for small strings.
318+
319+
and various [hash tables refactorings]((https://github.com/perl11/cperl/issues/24):
320+
321+
feature/gh24-base-hash feature/gh24-he-array feature/gh24-oldnew-hash-table
322+
featurex/gh24-array_he featurex/gh24-hash-loop featurex/gh24-hash-loop+utf8
323+
featurex/gh24-hash-utf8
313324

314325
## A bit more work is needed for
315326

@@ -347,6 +358,10 @@ They also revert some wrong decisions p5p already made.
347358
class, method and multi keywords but no dispatch, subtyping and type checks yet.
348359
in work.
349360

361+
* various more hash tables:
362+
363+
featurex/gh24-one-word-ahe featurex/gh24-open-hash
364+
350365
## Soon
351366

352367
* user facing classes, multiple dispatch (fast for binary, slow for mega)
@@ -355,4 +370,4 @@ They also revert some wrong decisions p5p already made.
355370

356371
* builtin ffi
357372

358-
2016-10-28 rurban
373+
2016-12-16 rurban

cpan/Test-Simple/t/new_ok.t

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,5 @@ use Test::More tests => 13;
3737

3838
# And what if we give it nothing?
3939
eval q(new_ok(););
40-
like $@, qr/Not enough arguments for subroutine entry Test::More::new_ok\. Missing \$class at \(eval \d\) line 1, near "\(\)"\n/;
40+
like $@, qr/Not enough arguments for subroutine entry Test::More::new_ok\. Missing \$class at \(eval \d+\) line 1, near "\(\)"\n/;
4141
#is $@, sprintf "new_ok() must be given at least a class at %s line %d.\n", $0, __LINE__ - 2;

pod/perl.pod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,9 @@ aux c2ph h2ph h2xs cperlbug pl2pm pod2html pod2man splain xsubpp
228228

229229
perlcperl Perl notes for cperl (variant)
230230
perlcdelta cperl changes since previous version
231+
perl5252cdelta cperl changes in version 5.25.2c
232+
perl5251cdelta cperl changes in version 5.25.1c
233+
perl5250cdelta cperl changes in version 5.25.0c
231234
perl5241cdelta cperl changes in version 5.24.1c
232235
perl5240cdelta cperl changes in version 5.24.0c
233236
perl5224cdelta cperl changes in version 5.22.4c

pod/perl5250cdelta.pod

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
=encoding utf8
2+
3+
=head1 NAME
4+
5+
perl5250cdelta - what is new for cperl v5.25.0
6+
7+
=head1 DESCRIPTION
8+
9+
This document describes perl-only differences between the cperl 5.24.0
10+
release and the cperl 5.25.0 release.
11+
12+
If you are upgrading from an earlier release such as 5.22.3, first read
13+
L<perl5240cdelta>, which describes differences between 5.22.3 and 5.24.0.
14+
15+
=head1 Notice
16+
17+
perl5.24.1 was security update to a non-existing problem. cperl added
18+
PERLIO_DEBUG as optional handle to redirect DEBUGGING outout via -Dx
19+
switches to. This is only usable with DEBUGGING perls, which are not
20+
used in production, only during development.
21+
perl5.24.1 changed PERLIO_DEBUG to only be active for PerlIO debugging
22+
together with -Di.
23+
24+
=head1 Performance Enhancements
25+
26+
=over 4
27+
28+
=item *
29+
30+
for loops got several enhancements:
31+
32+
new special B<iter_ary> C<for (@ary)> and B<iter_lazyiv> C<for (0..9)>
33+
ops to avoid a run-time switch in the generic iter op.
34+
35+
more aelem_u optimizations, less run-time out of bounds checks for
36+
shaped arrays in loops. E.g. in C<my @a[5]; $a[$_] for (0..4);> the
37+
compilers knows that the max index for C<@a> will be C<4>, which is
38+
within the allowed shape of C<@a>.
39+
40+
=item *
41+
42+
The C<multideref> OP has a new C<MDEREF_INDEX_uoob> flag. This is
43+
used for unchecked out-of-bounds checks for arrays, to use the
44+
previous AvSHAPED array optimizations (aelem_u, aelemfast_lex_u) or
45+
loop out-of-bounds elimination with multideref OPs also. Such
46+
multideref ops appear pretty often even with single indices. E.g. in
47+
C<my @b=(0..4); for (0..$#b) { $b[$_] = 0; }> C<$b[$_]> is converted
48+
to a multideref, which previously was not optimized.
49+
50+
Those optimized indices are marked with a new " _u" suffix in the dumped
51+
multideref stringification.
52+
53+
C<MDEREF_MASK> changed to 0x10F, the C<MDEREF_SHIFT> size from 7 to 8.
54+
The shift can also use faster intrinsics now.
55+
56+
The loop out-of-bounds elimination was fixed for simple lexical
57+
indices (e.g. C<for my $i (0..$#a){ $a[$i] }>, which leads now to
58+
more aelem_u ops and subsequent mderef_u optimizations also.
59+
60+
=item *
61+
62+
The new C<strQEc>/C<strNEc> macros are used instead of
63+
C<strEQ(s,"constant")>. This enables word-wise comparison via memcpy,
64+
in opposite of byte-wise comparisons via strcmp with already known
65+
sizes. This is a 10% performance improvement under most optimization
66+
levels.
67+
68+
=back
69+
70+
=head1 Modules and Pragmata
71+
72+
=head2 Updated Modules and Pragmata
73+
74+
=over 4
75+
76+
=item *
77+
78+
L<Opcode> has been upgraded from version 1.34c to 1.35c, with the new
79+
iter_ary and iter_lazyiv ops.
80+
81+
=back
82+
83+
=head1 Diagnostics
84+
85+
The following additions or changes have been made to diagnostic output,
86+
including warnings and fatal error messages. For the complete list of
87+
diagnostic messages, see L<perldiag>.
88+
89+
=head2 New Diagnostics
90+
91+
=head3 New Errors
92+
93+
=over 4
94+
95+
=item Invalid for range iterator (%d .. %d)
96+
97+
(F) A range with constant integers as a for loop cannot be reversed.
98+
99+
We check now at compile-time that a range with C<for> loops with
100+
constant integers is incremental, the 2nd number must be higher. We
101+
don't support reverse loops with ranges, i.e. C<for (9..0)> is
102+
invalid, but C<for (0..$#ary)> with C<$#ary> being C<-1> is valid.
103+
104+
Reverse constant strings ranges are still valid and lead to an empty
105+
loop. i.e. C<for ('z'..'a')> is currently valid.
106+
107+
=back
108+
109+
=head1 Platform Support
110+
111+
=head2 Platform-Specific Notes
112+
113+
=over 4
114+
115+
=item mingw
116+
117+
Compilation under mingw (32 and/or 64bit) was fixed by removing a
118+
duplicate F<pp_sys.c> entry in F<win32/GNUMakefile>.
119+
120+
=item linux
121+
122+
Check for null in pp_ghostent et al.
123+
124+
On some platforms (such as Gentoo Linux with torsocks),
125+
hent->h_aliases (where hent is a struct hostent *) may be null after a
126+
gethostent call.
127+
128+
L<RT#128740|https://rt.perl.org/Public/Bug/Display.html?id=128740>
129+
130+
=back
131+
132+
=head1 Internal Changes
133+
134+
=over 4
135+
136+
=item *
137+
138+
The B<negate> op has now it's own B<ck_negate> callback.
139+
140+
=back
141+
142+
=head1 Selected Bug Fixes
143+
144+
=over 4
145+
146+
=item SvREADONLY_off: allow calls as argument
147+
148+
No multiple evaluation of its argument anymore.
149+
150+
=back
151+
152+
=head1 Acknowledgements
153+
154+
Perl 5.25.0 represents approximately 2 weeks of development since Perl 5.24.0c
155+
and contains approximately 6,300 lines of changes across 120 files from 4
156+
authors.
157+
158+
Excluding auto-generated files, documentation and release tools, there were
159+
approximately 3,900 lines of changes to 53 .pm, .t, .c and .h files.
160+
161+
Perl continues to flourish into its third decade thanks to a vibrant community
162+
of users and developers. The following people are known to have contributed the
163+
improvements that became Perl 5.25.0:
164+
165+
Reini Urban, Father Chrysostomos, Daniel Dragan, Tony Cook.
166+
167+
The list above is almost certainly incomplete as it is automatically generated
168+
from version control history. In particular, it does not include the names of
169+
the (very much appreciated) contributors who reported issues to the Perl bug
170+
tracker.
171+
172+
For a more complete list of all of Perl's historical contributors, please see
173+
the F<AUTHORS> file in the Perl source distribution.
174+
175+
=head1 Reporting Bugs
176+
177+
If you find what you think is a bug, you might check the articles recently
178+
posted to the comp.lang.perl.misc newsgroup and the perl bug database at
179+
https://rt.perl.org/ . There may also be information at
180+
http://www.perl.org/ , the Perl Home Page.
181+
182+
If you believe you have an unreported bug, please run the L<cperlbug> program
183+
included with your release. Be sure to trim your bug down to a tiny but
184+
sufficient test case. Your bug report, along with the output of C<perl -V>,
185+
will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
186+
187+
If the bug you are reporting has security implications which make it
188+
inappropriate to send to a publicly archived mailing list, then see
189+
L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
190+
for details of how to report the issue.
191+
192+
=head1 SEE ALSO
193+
194+
The F<Changes> file for an explanation of how to view exhaustive details on
195+
what changed.
196+
197+
The F<INSTALL> file for how to build Perl.
198+
199+
The F<README> file for general stuff.
200+
201+
The F<Artistic> and F<Copying> files for copyright information.
202+
203+
=cut

0 commit comments

Comments
 (0)