pperl 0.6.12#
2026-08-07 to 2026-08-14, 94 commits.
JIT and parallelization#
The new JIT engine is the default. The rebuilt JIT replaces the previous engine. It compiles the hot path of a loop to machine code and leaves the code around the loop, and the branches the loop rarely takes, to the interpreter. A loop whose compiled code keeps falling back to the interpreter is handed back to the interpreter entirely.
The previous JIT engine remains available with
PPERL_JIT2=0. It is still faster on loops whose bodies hold many statements: the Benchmarks Game’s mandelbrot at size 16,000 takes 36.8 s on it and 204.7 s on the new engine. It is also the only one of the two that runs loops in parallel, so under the new default, auto-parallelization no longer applies to loops.Arithmetic in compiled loops: integer and floating-point
+,-,*,/,%and**, the assignments+=,-=,*=,/=and%=, numeric comparisons including<=>, the bitwise and shift operators,int,abs, unary minus,!,sqrt,sin,cos,exp,log,++and--compile, on lexical and package variables. Integer values stay integers in compiled code, as they do in perl5. Benchmark loops of addition, multiplication, division and modulus run 4.27 to 5.06 times as fast as on perl5.Strings in compiled loops:
length,eq,ne,lt,gt,le,ge,cmp, concatenation, interpolation,.=,uc,lc,ucfirst, scalarreverse,ord,chr,substrandindexcompile, as do assignments of strings to variables. Loops that concatenate run 2.09 to 2.48 times as fast as on perl5, and loops usingsubstrorindex2.90 and 2.99 times.Arrays and hashes in compiled loops: reading and assigning elements of lexical arrays and hashes,
$a[$i],$a[3]and$h{$k}, compiles, as dopush,popand list assignments such as@a = (...),%h = (...),($x, $y) = ($y, $x)andmy ($p, $q) = (...). A benchmark loop writing array elements runs 4.57 times as fast as on perl5, one reading them 3.10 times.Conditionals in compiled loops:
if/elseblocks, the conditional operator?:,mydeclarations anddefinedinside a loop body compile with the rest of the loop. A loop assigning a conditional expression runs 2.89 times as fast as on perl5.
Modules#
Encode encodes into the single-byte encodings, such as Latin-1, without searching a table for every character: a 1 KB string encodes at 5.8 times perl5’s speed, where it ran at 0.69 times. Strings of 64 KiB and more are encoded on several cores unless
--no-parallelis given.List::Util:
sum,min,maxandproductover 65,536 or more integers are computed on several cores unless--no-parallelis given.
Documentation#
Module reference translations: the pages of
B,IO,Data::Dumper,PerlIO::mmapandTime::HiResin all 41 translation languages follow their corrected English text. Changed descriptions read in English until they are translated again.