Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ PerlOnJava compiles Perl to JVM bytecode, so many existing Perl scripts can run
> CPAN coverage, and improves CPU and memory performance. See the
> [current status and priorities](docs/about/roadmap.md#current-project-status).

**Compatibility milestone (2026-10-03):** all **575 selected imported Perl core
test files** completed without unexpected failures on macOS in the default
execution mode. The run reported 10,335 skipped assertions and 322 TODO
assertions; some files are excluded and large-memory cases are disabled.
This is a scoped test result, not a claim that the entire standard Perl suite
passes on every backend or platform. See the
[results, exclusions, and verification scope](docs/reference/testing.md#core-suite-snapshot-2026-10-03).

## Features

- **Single jar distribution** — no installation, no dependencies beyond Java
Expand Down
4 changes: 4 additions & 0 deletions docs/about/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ priorities and future plans.

## Work in progress

- Document the 2026-10-03 imported core-suite milestone: 575 selected files
completed without unexpected failures, with skips, TODOs, exclusions, and
verification scope recorded in the testing guide.

- Keep format captures bound to their active lexical cell and prevent reuse of unrelated active lexicals.
- Match Perl's reference count for the compile-time `%^H` hash.
- Run deeply nested conditional core tests with an adequate JVM stack.
Expand Down
44 changes: 29 additions & 15 deletions docs/about/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,19 @@ real-world CPAN support, and runtime efficiency.

The latest measured snapshots are:

- **Imported upstream Perl tests:** 669,688 of 673,847 checks pass across 585
imported test files (**99.4%**), measured on 2026-09-03. This is the imported
compatibility corpus, not every test distributed with upstream Perl.
- **CPAN sample:** 8,315 of 16,443 tested modules pass their complete test suites
(**50.6%**), as reported on 2026-09-02. Modules are selected randomly from the
CPAN index, and dependencies encountered during testing are also recorded.
- **Imported upstream Perl tests:** all **575 selected test files** completed
without unexpected failures on 2026-10-03, on macOS in the default execution
mode. The run reported **10,335 skipped assertions** and **322 TODO assertions**.
File exclusions and disabled large-memory cases limit this result; it does
not establish complete Perl compatibility or full-suite success on both
backends and every platform. See the
[dated core-suite snapshot](../reference/testing.md#core-suite-snapshot-2026-10-03).
- **CPAN sample:** the report generated on **2026-10-02** records **9,576 modules**:
**4,851 pass**, **2,878 fail**, **19 are skipped**, and **1,828 are skipped
because standard Perl failed**. The reported **62.8%** pass rate uses the
**7,729 non-skipped pass/fail outcomes**, not all recorded modules. Modules
are selected randomly from the CPAN index, and dependencies encountered
during testing are also recorded.

These figures are dated progress measurements, not guarantees that an
individual script or distribution will work. Check the
Expand Down Expand Up @@ -117,9 +124,10 @@ These capabilities are implemented and available in the current release:
Work currently in progress is organized around the compatibility and
performance goals above:

- **Perl compatibility** — Close incomplete and failing cases in the imported
upstream suite, including diagnostic, compiler, runtime, and standard-library
differences, while keeping the JVM and interpreter backends aligned. The
- **Perl compatibility** — Preserve the selected core-suite milestone, audit
skipped, TODO, and excluded cases, and extend verification across execution
backends and platforms. Continue closing diagnostic, compiler, runtime, and
standard-library differences. The
[Feature Matrix](../reference/feature-matrix.md) records known boundaries.
- **CPAN compatibility** — Use sampled distribution results to find reusable
blockers, expand Java replacements for XS dependencies, and validate
Expand All @@ -140,7 +148,8 @@ performance goals above:
- ~~**Taint Mode (`-T`)**~~ — Implemented on both backends. External input is
marked tainted, taint propagates through supported operations, capture-based
untainting works, and security-sensitive operations reject tainted values.
Warning-mode `-t` semantics remain incomplete. See `dev/design/TAINT_MODE.md`.
Warning-mode `-t` uses the same propagation and reports unsafe uses as
warnings. See `dev/design/TAINT_MODE.md`.
### Regular Expressions

The maintained Joni fork is the sole production matcher. Current supported
Expand All @@ -152,14 +161,18 @@ implementation and delivery record is preserved in the

### Missing Pragmas and Features

- **`no strict refs`** — Extend to work with lexical (`my`) variables, not just globals.
- **Symbolic references** — Supported with `no strict 'refs'` for package
variables. Lexical (`my`) variables are not accessible by symbolic name in
standard Perl either; this is not a compatibility gap.
- **`bignum`/`bigint`** — Complete transparent arbitrary-precision arithmetic
on both backends. `bigrat` is implemented.
- **`locale`** — Locale-aware string operations.
- **`attributes`** — Variable and subroutine attributes beyond `:lvalue` and `prototype`.
- **`overloading`** — Fine-grained overload control pragma.
- **`CORE` Operator References** — `\&CORE::push` and similar.
- **Smartmatch / `given`/`when`** — Evaluate community demand before implementing.
- ~~**`overloading`**~~ — Lexical enable/disable behavior is implemented.
- **`CORE` Operator References** — Audit callable builtins and retain the
restrictions that standard Perl itself imposes.
- ~~**Smartmatch / `given`/`when`**~~ — Implemented on both backends; see the
[feature matrix](../reference/feature-matrix.md#statements-and-special-operators).

### Compiler Flags and Special Variables

Expand Down Expand Up @@ -214,7 +227,8 @@ PerlOnJava requires Java 24+. Remaining work:
### CPAN Module Expansion

- **File::stat** — Needed for DateTime::Locale installation.
- **Safe.pm** — Move beyond stub; evaluate feasibility of compartment restrictions on JVM.
- **Safe.pm** — Extend the implemented permit-only and default compartment
behavior; see the [feature matrix](../reference/feature-matrix.md#core-modules).
- **Module::Build** — Improve support beyond current stub for modules that don't use MakeMaker.
- **Test::Harness** — Fix UTF-8 handling for test output parsing.
- **Exporter** — Support `*glob` exports.
Expand Down
Loading
Loading