Releases: fglock/PerlOnJava
v2.0.0: Towards a Complete Perl Port on the JVM
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
- 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.
- Added
Full Changelog: v1.10.0...v1.11.0
Operators and Special Variables
- 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
- v1.9.0: Operators and Special Variables
- Added bitwise string operators.
- Added lvalue
substr
, lvaluevec
- Fix
%b
specifier insprintf
- Emulate Perl behaviour with unsigned integers in bitwise operators.
- Regex
m?pat?
match-once and thereset()
operator are implemented. - Regex
\G
and thepos
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
- v1.8.0: Loops, Operators, and File Handling
- Added
continue
blocks and loop operatorsnext
,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 ofwhile
- Completed
chomp
operator; fixedqw//
operator,defined-or
andx=
- Added modules:
parent
,Test::More
- Added
Full Changelog: v1.7.0...v1.8.0
Performance Improvements
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
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
; addedlib/
directory to the project. - Expanded documentation and usage examples.
Full Changelog: v1.5.0...v1.6.0
v1.5.0 - Regex operations
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
-
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
-
v1.3.0: Added Objects.
- Objects and object operators, UNIVERSAL class
- Array and List related operators
- More tests and various bug fixes