April 2026 Archives

PDL in Rust -- Part Two


Logo.png


Two weeks ago we posted "PDL in Rust - A Native
Reimplementation of the Perl Data Language"
. At the time the
score was 45 tests, all green. That was enough to say "it compiles,
it runs, here is the arithmetic surface." It was not enough to say
"you can use this."

We are now on the second number. The current PDL implementation in pperl covers roughly 3,000 assertions end-to-end: about 1,400 on the Perl-facing connector side and about 1,600 on the engine side. As of this writing roughly 98% of the connector assertions match upstream PDL 2.103 exactly, and most of the remaining couple of dozen we already know why they fail. By the time you read this the numbers will have drifted a little in our favour - give or take - but the shape is the point, not the decimal.

Everything described below is shipping, today, at https://perl.petamem.com.

PDL in Rust -- A Native Reimplementation of the Perl Data Language

Logo.png


A few days ago, when we announced pperl's native module strategy
on Reddit, someone asked about PDL support.
We replied:
"PDL will be supported." — to which u/fuzzmonkey35
responded: "We will live in glorious times when this happens."

Well. It happened.

We (as in: we and our AIs) reimplemented PDL (the Perl Data Language) from scratch in Rust — not a binding, not an FFI wrapper, but a ground-up reimplementation of the core engine. 15 data types, N-dimensional arrays, broadcasting, operator overloading, reductions, linear algebra, transcendental math — all in pure Rust, integrated as a native module into our pperl next-gen Perl5 platform.

use PDL;
my $a = pdl([1, 2, 3]);
my $b = pdl([10, 20, 30]);
say $a + $b;           # [11 22 33]
say ($a * $b)->sum;    # 140
say sin(pdl([0, 3.14159/2, 3.14159]));

45 tests, all green. Same Perl syntax. No XS. No C. No libpdl.

About PetaMem

user-pic All things Perl.