Skip to content

Releases: fglock/PerlOnJava

v2.0.0: Towards a Complete Perl Port on the JVM

28 Nov 17:05
Compare
Choose a tag to compare

v2.0.0: A Major Leap Towards a Complete Perl Port on the JVM 🚀

With v2.0.0, we mark a significant milestone in the journey of implementing Perl on the JVM. This release focuses on expanding core module support, introducing advanced language features, and bridging compatibility gaps with the native Perl ecosystem.

New Features

Core Perl Modules Added (Unmodified):
    File::Basename, File::Find, Data::Dumper, Term::ANSIColor, Time::Local, HTTP::Date, HTTP::CookieJar.

Additional Module Support:
    Cwd, File::Spec, File::Spec::Functions, HTTP::Tiny.

Feature Pragma (use feature): Implemented support for:
    fc, say, current_sub, isa, state, try, bitwise, postderef.

Hash-like Stash Access:
    $namespace::{entry} to access the symbol table directly as a hash.

Stash Constants:
    Define constants in the stash: $constant::{_CAN_PCS} = \$const;.

Enhanced Subroutine Handling:
    Check existence: exists &sub.
    Check definition: defined &sub.

Pragma Improvements:
    builtin: Added true, false, is_bool.
    re: Added is_regexp.
    vars: Introduced support for the vars pragma.

Class and Method Resolution:
    Added support for SUPER::method.

Default Subroutine Handling:
    Implemented AUTOLOAD.

Operators:
    Added stat, lstat (with some fields returning undef where JVM limitations apply).
    Directory operators like opendir, readdir, and closedir.

Regex Enhancements:
    Added patterns: [[:ascii:]], [[:print:]], (?#comment).
    Introduced the /xx regex modifier.

Work in Progress

While this release significantly narrows the gap between Perl and its JVM port, several features are still under development:

lexical_subs feature.
Network-related operators: socket, bind, etc.
Compatibility with use VERSION and require VERSION.
Lexical scoping for warnings, features, strictness, and UTF-8 source code.
Operators: truncate, seek.
Preprocessor directives: # line.
Legacy support: use subs.
Modules: Getopt::Long, JSON.
Subroutine prototypes.

Looking Ahead

Version 2.0.0 is not just a feature-rich release but a clear statement of progress towards a full-featured, robust Perl runtime on the JVM. With an extensive library of core modules and enhanced language capabilities, we are closer than ever to making the JVM a viable and performant platform for Perl development.

Compile-time Features

13 Nov 17:34
Compare
Choose a tag to compare
  • v1.11.0: Compile-time Features
    • Added BEGIN, CHECK, UNITCHECK, INIT, END blocks.
    • Added subroutine hoisting: Invoking subroutines before their actual declaration in the code.
    • Improved Exporter.pm, glob assignment.
    • Added modules: constant, if, lib, Internals (SvREADONLY), Carp.
    • Added goto &name; not a tail-call.
    • Added state variables.
    • Added $SIG{ALRM}, ${^GLOBAL_PHASE}.
    • Added operators: fileno, getc, prototype.
    • Added \N{U+hex} operator in double quoted strings and regex.

Full Changelog: v1.10.0...v1.11.0

Operators and Special Variables

04 Nov 17:41
Compare
Choose a tag to compare
  • v1.10.0: Operators and Special Variables
    • Error messages mimic those in Perl for consistency.
    • Added $., $], $^V, ${^LAST_FH}, $SIG{__DIE__}, $SIG{__WARN__} special variables.
    • Added command line switches -E, -p, -n, -i, -0, -a, -F, -m, -M, -g, -l, -x, -?.
    • Added select(filehandle) operator, ARGVOUT filehandle.
    • Added ~., &., |., ^. operators.
    • Added try catch statement.
    • Added Scalar::Util: blessed, reftype.
    • Added UNIVERSAL: VERSION.
    • Added v-strings.
    • Added Infinity, -Infinity, NaN.
    • Added \N{name} operator for named characters in double quoted strings and in regex.
    • Added lvalue subroutines.
    • CI/CD runs in Ubuntu and Windows

Full Changelog: v1.9.0...v1.10.0

Operators and Special Variables

22 Oct 19:04
Compare
Choose a tag to compare
  • v1.9.0: Operators and Special Variables
    • Added bitwise string operators.
    • Added lvalue substr, lvalue vec
    • Fix %b specifier in sprintf
    • Emulate Perl behaviour with unsigned integers in bitwise operators.
    • Regex m?pat? match-once and the reset() operator are implemented.
    • Regex \G and the pos operator are implemented.
    • Regex @-, @+, %+, %- special variables are implemented.
    • Regex $`, $&, $' special variables are implemented.
    • Regex performance comparable to Perl; optimized regex variables.
    • Regex matching plain strings: $var =~ "Test".
    • Added __SUB__ keyword; readpipe.
    • Added &$sub call syntax.
    • Added local dynamic variables.
    • Tests in src/test/resources are executed automatically.

Full Changelog: v1.8.0...v1.9.0

Loops, Operators, and File Handling

11 Oct 17:37
Compare
Choose a tag to compare
  • v1.8.0: Loops, Operators, and File Handling
    • Added continue blocks and loop operators next, last, redo; a bare-block is a loop
    • Added bitwise operators vec, pack, unpack
    • Added srand, crypt, exit, ellipsis statement (...)
    • Added readdir, opendir, closedir, telldir, seekdir, rewinddir, mkdir, rmdir
    • Added file test operators like -d, -f
    • Added the variants of diamond operator <> and special cases of while
    • Completed chomp operator; fixed qw// operator, defined-or and x=
    • Added modules: parent, Test::More

Full Changelog: v1.7.0...v1.8.0

Performance Improvements

24 Sep 16:09
Compare
Choose a tag to compare

v1.7.0: Performance Enhancements and Developer Tools Improvements

  • Execution Engine Optimization: Enhanced the performance of frequently used operators, resulting in faster execution.
  • Improved Error Handling and Debugging: Introduced more detailed debugging symbols into the bytecode for smoother troubleshooting. The Carp module has been added to provide clearer error reporting.
  • Standard Library Integration: Several core Perl standard library modules are now embedded directly within the JAR file, simplifying module access and usage.
  • Expanded Test Coverage and Bug Fixes: Broadened test coverage and resolved various bugs to ensure improved stability and reliability.

Full Changelog: v1.6.0...v1.7.0

v1.6.0 - Module System

12 Sep 15:32
Compare
Choose a tag to compare

v1.6.0: Module System and Standard Library Enhancements.

  • Module system for improved code organization and reuse.
  • Core Perl module operators: do FILE, require, caller, use, no.
  • Module special subroutines: import, unimport are supported.
  • Environment and special variables: PERL5LIB, @INC, %INC, @ARGV, %ENV, $0, $$.
  • Additional operators: die, warn, time, times, localtime, gmtime, index, rindex.
  • Standard library ported modules: Data::Dumper, Symbol, strict; added lib/ directory to the project.
  • Expanded documentation and usage examples.

Full Changelog: v1.5.0...v1.6.0

v1.5.0 - Regex operations

09 Sep 18:19
Compare
Choose a tag to compare

v1.5.0: Added Regex Operations.

  • Regular expressions and pattern matching: m//, pos, qr//, quotemeta, s///, split
  • More complete set of operations on strings, numbers, arrays, hashes, lists
  • More special variables
  • More tests and various bug fixes

Full Changelog: v1.4.0...v1.5.0

v1.4.0 - I/O operations

02 Sep 19:20
Compare
Choose a tag to compare
  • v1.4.0: Added I/O Operations.

    • File i/o operators: open, close, eof, readline, print, printf, say
    • sprintf, substr
    • STDOUT, STDERR, STDIN
    • More special variables
    • TAP (Perl standard) tests
    • Hash and array slices
    • More tests and various bug fixes

Full Changelog: v1.3.0...v1.4.0

v1.3.0 - Objects

29 Aug 19:12
Compare
Choose a tag to compare
  • v1.3.0: Added Objects.

    • Objects and object operators, UNIVERSAL class
    • Array and List related operators
    • More tests and various bug fixes