Native Modules#

PetaPerl does not support XS (C extensions). Instead, performance-critical CPAN modules are reimplemented natively in Rust. These “native modules” provide the same Perl-level API as their XS counterparts but integrate directly with PetaPerl’s runtime — enabling JIT compilation, auto-parallelization, and zero FFI overhead.

How It Works#

When you write use List::Util qw(sum min max), PetaPerl’s module loader detects that List::Util has a native implementation and registers Rust function pointers directly. There is no compilation step, no .so loading, and no XS glue code.

Native functions are dispatched via NativeFn — a direct function pointer with O(1) call overhead, identical to built-in operators.

Available Native Modules#

Core Utilities#

Module

Functions

Notes

Scalar::Util

blessed, reftype, refaddr, weaken, isweak, looks_like_number, …

Full API

List::Util

sum, min, max, first, any, all, none, reduce, …

MULTICALL optimized

Sub::Util

subname, set_subname

Hash::Util

lock_keys, lock_hash, …

Digest / Crypto#

Module

Functions

Notes

Digest::MD5

md5, md5_hex, md5_base64, OO interface

Full API

Digest::SHA

sha1, sha256, sha512, OO interface

Full API

MIME::Base64

encode_base64, decode_base64

MIME::QuotedPrint

encode_qp, decode_qp

File / System#

Module

Functions

Notes

File::Basename

basename, dirname, fileparse

File::Copy

copy, move

File::Find

find, finddepth

File::Glob

bsd_glob

File::Path

make_path, remove_tree

File::Spec

catdir, catfile, rel2abs, …

File::Temp

tempfile, tempdir

OO + functional

File::stat

stat (OO)

Cwd

cwd, getcwd, abs_path

Sys::Hostname

hostname

I/O#

Module

Functions

Notes

IO::File

OO file handle

IO::Handle

OO handle base

IO::Dir

OO directory handle

IO::Pipe

OO pipe handle

IO::Select

select wrapper

IO::Socket

OO socket handle

IO::Seekable

seek/tell mixin

FileHandle

Legacy OO handle

Socket

socket primitives

Data / Encoding#

Module

Functions

Notes

Data::Dumper

Dumper

Storable

freeze, thaw, nstore, retrieve

Encode

encode, decode, find_encoding

JSON::PP

encode_json, decode_json

Via Pure Perl

Numeric / Math#

Module

Functions

Notes

POSIX

floor, ceil, fmod, strtod, strftime, …

Subset

Math::GMP

Arbitrary precision integers

Via Peta::FFI::GMP

Build / Config#

Module

Functions

Notes

Config

%Config hash

Build configuration

Fcntl

O_RDONLY, O_WRONLY, …

Constants auto-loaded

Errno

ENOENT, EACCES, …

Constants auto-loaded

Introspection#

Module

Functions

Notes

B

Compiler backend introspection

Minimal

PadWalker

peek_my, peek_our

mro

get_linear_isa, set_mro

version

Version object handling

Full OO API

Performance#

Native modules run at the same speed as built-in operators since they share the same dispatch mechanism. For block-taking functions (first, any, all, reduce), PetaPerl uses MULTICALL optimization to avoid per-element subroutine call overhead.

Benchmarks (vs perl5 with XS):

Function

PetaPerl native

perl5 XS

Ratio

List::Util::sum

1.7x faster

baseline

List::Util::min/max

2.9x faster

baseline

List::Util::first

~1x

baseline

MULTICALL parity

Adding Native Modules#

Native module documentation is extracted from the module’s Rust source (//! module docs and /// function docs) by docs/sphinx/bin/02-reference during the docs build.