Changes for version 0.990157 - 2026-04-13

  • Incompatible Changes
    • Removed the force option and the SPVM_CC_FORCE environment variable to improve parallel build reliability by relying solely on dependency resolution.
    • Removed implicit inference of is_resource in SPVM::Builder::CC; explicit configuration is now required for reliable static analysis.
  • Changes
    • Enable automatic parallel building and testing by embedding MAKEFLAGS into Makefile macros.
    • Limit the maximum number of parallel jobs to 16 to prevent resource exhaustion (process handles/kernel memory) on Windows.
    • Improve parallel testing reliability by injecting HARNESS_OPTIONS using a scalar (eval ...) hack in Makefile.PL to ensure cross-shell compatibility and correctly override TEST_VERBOSE.
    • Ensure all .spvm and .pm files are copied to blib before the build starts by adding pm_to_blib to order_only_dependent_files.
    • Update JIT-compiled DLL tests to handle process isolation and automatic cleanup using glob and process IDs.
  • Bug Fixes
    • Fixed race conditions and file-locking conflicts in parallel tests by using temporary directories for executable outputs and build artifacts in spvmcc.t, spvmcc_solo.t, and spvmcc_error.t.
    • Fixed a bug where TEST_VERBOSE could not be overridden from the command line by using the override directive in Makefile.
    • Fixed intermittent build failures by stopping the automatic removal of work directories in spvmdeps.t and spvmcc.t during parallel execution.
    • Fixed "Argument isn't numeric" warnings in test_harness by ensuring the first argument is evaluated as a scalar 0.
    • Fixed potential crashes and race conditions during parallel dynamic library loading on Windows by wrapping dl_load_file with a global file lock.
    • Fixed uninitialized value warnings in 003_call_minimal_method.t by adding a defined check for $precompile_class_file.
  • Optimization & Portability
    • Replaced flock-based file locking with a "temporary file and rename (move)" strategy to ensure atomic and race-free file generation.
    • Improved Windows compatibility for moving compiled object files by adding retry logic and content comparison when Permission denied (EACCES) occurs due to file locking.
    • Shared the build directory across different executables in spvmcc to maximize cache utilization and improve performance.
    • Improved shell compatibility in Makefile.PL by avoiding backslashes, dollar signs, and nested parentheses in test commands.
  • Refactoring
    • Refactored SPVM::Builder to use content-based (SHA1 hash) directory structures for bootstrap sources and precompile C source files to prevent naming collisions.
    • Renamed global_write_lock to global_file_lock in SPVM::Builder to better reflect its general purpose.
    • Centralized OS-specific path handling by moving to_cmd logic to TestUtil::to_os_specific_path.
    • Simplified spvmcc.t and spvmdeps.t by removing unused modules, constants, and redundant include directory handling.
    • Unified the write safety mechanism using a new spurt_binary_parallel_safe utility in SPVM::Builder::Util.
    • Clean up SPVM::Builder::Util by removing obsolete dependency tracking, file hashing, and old locking functions (lock_output_file, read_lock_dll_file, etc.).
  • Internal Changes
    • Isolated the linker's workspace by copying object files to process-specific temporary directories to prevent intermediate file conflicts on Windows.
    • Introduced a global lock file in the SPVM::Builder constructor to manage concurrent access to the shared build directory.
    • Added get_sha1_file to SPVM::Builder::Util for efficient SHA-1 digest computation using stream reading.
    • Modified SPVM::Builder to skip recording JIT-compiled DLL builds to .ninja_log to prevent infinite log growth.

Documentation

Executing SPVM programs
Generating Excutable File
Class Dependencies Analyzer
Generating SPVM Distribution
A tool to list non-core CPAN dependencies recursively.

Modules

The SPVM Language
Address
Array Utilities
SPVM object
A Boolean value as An Object
Build Dynamic Libraries for SPVM Distribution
Builder APIs
Compilation and Link of Native Class
Command Information
Compilation Unit Information
Config for Compiling and Linking Native Classes
Config for Compiling and Linking Native Classes
Configuration for Dynamic Link Libraries
Configuration for Executable Files
Excutable File Config
Config for Linking Native Classes
Utility for Analyzing Class Dependencies
Creating Executable File
Library Information for a Linker
Link Information
Basic Type Native APIs
Class File Native APIs
Compiler Native APIs
Runtime Environment
Method Native APIs
Incremental Build Management using Ninja Log Format
Object File Information
Script Information
Builder Utilities
Builder Utility APIs
A byte Value as An Object
Dynamic byte Arrays
Callback interface
A Callback Interface for grep Method
A Callback Interface for grep_byte Method
A Callback Interface for grep_double Method
A Callback Interface for grep_float Method
A Callback Interface for grep_int Method
A Callback Interface for grep_long Method
A Callback Interface for grep_short Method
A Callback for The map Method
A Callback for The map_expand Method
Information about a Caller
Interface Type to Clone Object
Interface Type for the Callback to Clone a Object
Command Line Information
Comparable Interface
Interface Type for Object Comparation Callback
Interface Type for double Comparation Callback
Interface Type for float Comparation Callback
Interface Type for int Comparation Callback
Interface Type for long Comparation Callback
Interface Type for String Comparation Callback
double Complex Type
float Complex Type
Countable Interface
SPVM Documentation
Environment Variables
SPVM Language Specification
Classes in the SPVM Language
Exception Handling in the SPVM Language
Garbage Collection in the SPVM Language
Operators in the SPVM Language
Statements in the SPVM Language
Syntax Parsing in the SPVM Language
System Setting in the SPVM Language
Tokenization in the SPVM Language
Types in the SPVM Language
SPVM Standard Modules
Allocator Native APIs
Basic Type Native APIs
Class File Native APIs
Class Variable Native APIs
String Buffer Native APIs
A double value as An Object
Dynamic double Arrays
EqualityCheckable Interface
Interface Type for Object Equality Checking Callback
a callback implementation of EqualityChecker to check if the memory addresses of the two objects are equal.
Error
Compilation Errors
Field Not Specified Errors
Method Call Not Permitted Error
Not Supported Error
System Error
Invalid UTF8 Errors
SPVM Exchange API
A float value as An Object
Dynamic float Arrays
SPVM Starndard Functions
Format Utilities
SPVM Global Instance
Hash (Associative Array)
Hash entry
Immutable byte Array
Immutable double Array
Immutable float Array
Immutable int Array
Immutable long Array
Immutable short Array
Immutable string array
An int value as An Object
Dynamic int Arrays
Abstract Base Class for Just-In-Time Compilation
Dynamic Object Array
A long value as An Object
Dynamic long Arrays
Getting the current native environment, stack, runtime, compiler.
Native APIs
Information of Arguments
Information of Basic Types
Information of Class Files
Information of Class Variables
Native::Compiler
Constant Values in Native APIs
Runtime Environment
Information of Fields
Information of Methods
Native::Runtime
Call Native::Stack
Pack and Unpack Operations
A Specifier for a pack/unpack Template.
Point
Point 3D
List with O(1) deque
SPVM information
Executing Callback at End of Scope
A short Value as An Object
Dynamic short Arrays
Sorting Functions
String Buffers
Dynamic string array
Stringable Interface
Interface Type for Stringing Callback

Provides

in lib/SPVM/Builder/Accessor.pm
in lib/SPVM/Builder/Config/Exe/MSVC.pm
in lib/SPVM/Dist.pm

Examples