Use AI. Use it more and better. If you are not yet equipped to use it
well - that is fine, learning takes time - but please do not inhibit
those in the community who are.
That is the whole argument. The rest of this piece is why I think it
is correct, and why I think the current register of the Perl community
around this topic is costing us something specific and avoidable.
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.
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.
We took PetaMem's 13-year-old Lingua::* number conversion modules
- dormant since 2013 with 17 languages - and brought them back to
life. The suite now covers 61 languages across 7
writing systems (Latin, Cyrillic, Arabic, Devanagari, Armenian,
Hebrew, CJK), including all 24 EU official languages plus Latin,
Hindi, Yiddish, Mongolian, Uyghur, and more.
New in this release: cross-language numeral
arithmetic with overloaded operators, ordinal
support for 14 languages, capabilities
introspection, and a Galois-field-based transitive
test that walks the entire number space across all languages
- 5000 steps, zero failures.
my $a = Lingua::Word2Num->new("zwanzig"); # German 20
my $b = Lingua::Word2Num->new("šestnáct"); # Czech 16
say ($a + $b)->as('fr'); # trente-six
say ($a + $b)->as('la'); # triginta sex