-
v3.0.0: Performance Boost, New Modules, and Streamlined Configuration
- Added
--upgrade
option toConfigure.pl
to upgrade dependencies. - Added
Dockerfile
configuration. - Added
Time::HiRes
,Benchmark
modules. - Added
/ee
regex modifier. - Added no strict
vars
,subs
. - Execute the code generation on demand, for faster module loading.
- Use
int
instead ofenum
to reduce the memory overhead of scalar variables.
- Added
-
v2.3.0: Modern Perl Features, Expanded Modules, and Developer Tools
- Project description updated in
README.md
to "A Perl Distribution for the JVM" - Added module porting guide at
docs/PORTING_MODULES.md
- Added wrapper scripts (
jperl
/jperl.bat
) for easier command-line usage - Added
YAML
andYAML::PP
modules. - Added
Text::Balanced
module. - Added
Unicode::Normalize
module. - Added subroutine signatures and
signature
feature. - Added chained operators.
- Added stacked file test operators.
- Added
module_true
feature. - Added
<<
and<<~
Here documents. - Added
/p
,/c
,/n
regex modifiers. - Added regex
(?^
clear embedded pattern-match modifier. - Added regex
(?'name'...)
named capture groups. - Added regex
\k<name>
and\g{name}
backreferences to named groups. - Added regex
\p{...}
and\P{...}
for Unicode properties. - Added regex
\g{-n}
for relative backreferences. - Added regex
*+
,++
,?+
,{n,m}+
possessive quantifiers. - Added regex
(?>...)
for atomic groups. - Added overload:
""
,0+
,bool
,fallback
,nomethod
. - Added
class
feature andclass
keyword. - Library upgrades.
Maven:
mvn versions:use-latest-versions
. Gradle:./gradlew useLatestVersions
.
- Project description updated in
-
v2.2.0: Core modules
- Perl version is now v5.40.0
for
loop can iterate over multiple values at the same time.for
loop variables are aliased.- Added
DBI
module with JDBC support. - Added
URI::Escape
module. - Added
builtin
methods:inf
nan
weaken
unweaken
is_weak
blessed
refaddr
reftype
created_as_string
created_as_number
stringify
ceil
floor
indexed
trim
is_tainted
. - Added command line switches:
-S
. - Added low-precedence xor
^^
operator. - Added Configure.pl to set compiler options and add JDBC drivers.
- Added Links to Perl on JVM resources in README - https://github.com/fglock/PerlOnJava/tree/master#additional-information-and-resources
- Added SUPPORT.md
-
v2.1.0: Core modules and optimization
- Added
Getopt::Long
,JSON
modules. - Optimized
print
toSTDOUT
/STDERR
performance by running in a separate thread. - Added
subs
pragma. - Added regex
$+
variable. - Added command line switches:
-v
,-V
. - Added file test operators:
-R
,-W
,-X
,-O
,-t
. - Added feature flags:
evalbytes
. - Added
CORE::GLOBAL
and core function overrides. - Added hexadecimal floating point numbers.
- Added
-
v2.0.0: Towards a Complete Perl Port on the JVM
- Added unmodified core Perl modules
File::Basename
,File::Find
,Data::Dumper
,Term::ANSIColor
,Time::Local
,HTTP::Date
,HTTP::CookieJar
. - Added
Cwd
,File::Spec
,File::Spec::Functions
,HTTP::Tiny
modules. - "use feature" implemented:
fc
,say
,current_sub
,isa
,state
,try
,bitwise
,postderef
. - Stash can be accessed as a hash like
$namespace::{entry}
. - Added stash constants:
$constant::{_CAN_PCS} = \$const
; - Added
exists &sub
,defined &sub
. - Added
builtin
pragma:true
,false
,is_bool
. - Added
re
pragma:is_regexp
. - Added
vars
pragma. - Added
SUPER::method
method resolution. - Added
AUTOLOAD
default subroutine. - Added
stat
,lstat
operators. Some fields are not available in JVM and returnundef
. - Added directory operators.
- Added regex patterns:
[[:ascii:]]
,[[:print:]]
,(?#comment)
, and the/xx
modifier.
- Added unmodified core Perl modules
-
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
-
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
-
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.
-
v1.8.0: Operators
- 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
-
v1.7.0: Performance Improvements
- Focus on optimizing the execution engine for better performance.
- Improve error handling and debugging tools to make development easier. More detailed debugging symbols added to the bytecode. Added
Carp
module. - Moved Perl standard library modules into the jar file.
- More tests and various bug fixes
-
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
- 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
- Expanded documentation and usage examples
-
v1.5.0: Regex operators
- Added 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
-
v1.4.0: I/O operators
- File i/o operators, STDOUT, STDERR, STDIN
- TAP (Perl standard) tests
-
v1.3.0: Added Objects.
- Objects and object operators, UNIVERSAL class
- Array and List related operators
- More tests and various bug fixes
-
v1.2.0: Added Namespaces and named subroutines.
- Added typeglobs
- Added more operators
-
v1.1.0: Established architecture and added key features. The system now supports benchmarks and tests.
- JSR 223 integration
- Support for closures
- Eval-string functionality
- Enhanced statements, data types, and call context
-
v1.0.0: Initial proof of concept for the parser and execution engine.
The following areas are currently under active development to enhance the functionality and performance of PerlOnJava:
-
Compiler Subsystem
- Implementing the
lexical_subs
feature. - Enhancing version control with
use VERSION
andrequire VERSION
. - Introducing lexical warnings and strictness for improved code safety.
- Supporting lexical UTF-8 source code.
- Ensure that stack traces are well-formed.
- Developing subroutine prototypes.
- Handling
goto
special cases forText::Balanced
. - Addressing indirect object special cases for
GetOpt::Long
. - Localizing regex variables.
- Fix handling of global variable aliasing in
for
.
- Implementing the
-
Regex Subsystem
- Ongoing improvements and feature additions.
-
Class Subsystem
- Enhancements and new feature implementations.
-
DBI Subsystem
- Adding additional methods for database interaction.
-
Overload Subsystem
- Expanding with additional methods.
-
I/O Subsystem
- Implementing in-memory I/O operations.
- Developing
socket
and related operators. - Enhancing
truncate
,seek
, andread
operators. - Introducing IO layers and experimenting with memory-mapped I/O.
-
Threads Subsystem
- Documenting preliminary features.
- Planning for fork emulation and interpreter cloning.
- Developing
multiplicity
support. - Adjusting
exit
semantics to exit the current thread only. - Adding
ThreadLocal
to global variables, special variables, and caches, with tear down hooks for cleanup.
-
CPAN Support
- Porting
cpan
andprove
. - Adding module testing for PerlOnJava core modules.
- Porting
-
Optimization
- Inlining
map
and related blocks. - Inlining constant subroutines.
- Prefetch named subroutines to lexical (
our
).
- Inlining
-
Compilation with GraalVM
- Documenting preliminary results in docs/GRAALVM.md.
- v3.0.1: Next minor version
- Added
# line
preprocessor directive. - Planned release date: 2025-05-10
- Added
Objective: Enhance core functionality and improve developer experience with a focus on integration and performance.
- Concurrency and Security Enhancements
- Specific: Implement basic concurrency support with threads and async/await capabilities.
- Measurable: Ensure at least 50% of core modules support concurrent execution.
- Achievable: Utilize existing JVM concurrency features.
- Relevant: Addresses modern application requirements for parallel processing.
- Time-bound: Complete by Q1 2026.
- External Integration
- Specific: Integrate with popular external libraries for HTTP requests and database access.
- Measurable: Provide at least two integration examples in documentation.
- Achievable: Leverage existing Java libraries for integration.
- Relevant: Enhances PerlOnJava's utility in web and data applications.
- Time-bound: Complete by Q1 2026.
- Development Tools
- Specific: Develop an interactive debugger with breakpoints and variable inspection.
- Measurable: Debugger should support at least 80% of core language features.
- Achievable: Build on existing JVM debugging capabilities.
- Relevant: Improves developer productivity and code quality.
- Time-bound: Complete by Q1 2026.
- Distribution and Packaging
- Specific: Provide Docker containers and Kubernetes configurations for easy deployment.
- Measurable: Ensure compatibility with at least two major cloud platforms.
- Achievable: Use standard containerization practices.
- Relevant: Facilitates deployment in modern cloud environments.
- Time-bound: Complete by Q1 2026.
Objective: Expand platform capabilities and improve performance with advanced features and optimizations.
- GraalVM Integration
- Specific: Implement native image compilation for instant startup and reduced memory footprint.
- Measurable: Achieve at least a 30% reduction in startup time and memory usage.
- Achievable: Collaborate with GraalVM community for support.
- Relevant: Enhances performance for cloud and serverless applications.
- Time-bound: Complete by Q1 2027.
- Mobile Development
- Specific: Develop an Android app with native UI for Perl scripting.
- Measurable: Ensure app compatibility with at least 80% of Android devices.
- Achievable: Utilize existing Android development frameworks.
- Relevant: Expands PerlOnJava's reach to mobile developers.
- Time-bound: Complete by Q1 2027.
- Advanced Data Manipulation
- Specific: Add JSON/XML parsing and data transformation features.
- Measurable: Provide at least three example scripts demonstrating these capabilities.
- Achievable: Use existing Java libraries for data manipulation.
- Relevant: Increases PerlOnJava's applicability in data-driven applications.
- Time-bound: Complete by Q1 2027.
- Enterprise Features
- Specific: Integrate with logging frameworks and provide monitoring with Prometheus/Grafana.
- Measurable: Ensure logging and monitoring support for at least 70% of core modules.
- Achievable: Leverage existing enterprise tools and frameworks.
- Relevant: Meets enterprise requirements for observability and security.
- Time-bound: Complete by Q1 2027.
-
Concurrency and Security Features
- Add support for concurrency and parallelism, such as threads and async/await.
- Enhance security features, including sandboxing and input validation.
- Increase test coverage.
-
External Integration and Advanced Data Manipulation
- Integrate with external libraries and APIs for tasks like HTTP requests and database access.
- Add advanced data manipulation features, such as JSON/XML parsing and data transformation.
- Allow users to define their own operators and macros for greater flexibility.
-
Mobile Development
- Android app with native UI for Perl scripting
- Integration with Android's file system and permissions
- Mobile-optimized performance settings
-
Distribution and Packaging
- Native installers for Windows/Linux/MacOS
- Docker containers and Kubernetes configurations
- Maven Central Repository publishing
- Integration with package managers (apt, yum, chocolatey, homebrew)
-
Development Tools
- IDE plugins for IntelliJ IDEA, Eclipse, VSCode
- Interactive debugger with breakpoints and variable inspection
- Code formatting and static analysis tools
- Performance profiling tools
-
Enterprise Features
- Monitoring and metrics with Prometheus/Grafana
- Integration with logging frameworks (Log4j, SLF4J)
- Security hardening and vulnerability scanning
- Cloud deployment templates (AWS, Azure, GCP)
-
GraalVM Integration
- Native image compilation for instant startup
- Polyglot integration with JavaScript, Python, Ruby
- Ahead-of-time compilation optimizations
- Reduced memory footprint for cloud deployments
- SubstrateVM support for containerized environments
-
Native System Integration
- JNI/XS bridge to enable native code modules
- Integration with existing Perl XS ecosystem
- Core system operations
- Process control (fork, exec)
- Direct memory access (mmap)
- Native sockets and file descriptors
- Platform-specific features
- Unix: ptrace, signals, IPC
- Windows: Registry, COM objects
- MacOS: FSEvents, CoreFoundation, Security framework
- JNI/XS bridge to enable native code modules