Changes for version 0.990149 - 2026-03-18
- New Features
- SPVM::Builder::Config: Add debug_info_ccflags field to manage compiler arguments for generating debug information independently.
- SPVM::Builder::Config: Add source_encoding_ccflags to specify the source code encoding for the compiler.
- SPVM::Builder::Config::Linker: Add debug_info_ldflags field to manage linker arguments for generating debug information independently.
- SPVM::Builder::Config::Linker: Add hint_cc field to provide a compiler name hint (e.g., clang++, g++) for the linker.
- SPVM::Builder::Config::Linker: Add support for libgcc, libbcrypt, and output-type-specific extra flags.
- SPVM::Builder::Config::Global: Implement compile_match and compile_match_any (renamed from match/match_any) using a rule-based callback system.
- SPVM::Builder::Config::Global: Add support for configuration hashes and code references in compile_match, allowing custom logic during build conditions.
- SPVM::Builder::Config::Global: Introduce a new "+" prefix syntax for appending values (string concatenation and array merging) with strict type validation.
- SPVM::Builder::Config::Exe::MSVC: Add specific configurations for -Zi (debug info), -DEBUG (linker debug), -W3 (warnings), -utf-8 (encoding), and -Gy (function-level linking).
- SPVM::Builder::Config::Base: Add new_empty method to create a clean configuration object.
- Incompatible Changes
- SPVM::Builder::Config::Global: Rename match/match_any to compile_match/compile_match_any to clarify they apply to the compilation phase.
- SPVM::Builder::Config::Global: Rename optimize_global to optimize, before_compile_cbs_global to before_compile_cbs, and add_before_compile_cb_global to add_before_compile_cb.
- SPVM::Builder::Config::Global: Remove obsolete fields: ccflags_global/spvm/native/native_class/precompile, defines_global/spvm/native/native_class/precompile, optimize_spvm/native/native_class/precompile, and include_dirs_spvm/native/native_class/precompile.
- SPVM::Builder::Config: Rename clear_system_settings to clear_system_fields.
- SPVM::Builder::Config::Linker: Rename debug_ldflags to warn_ldflags (linker warnings).
- SPVM::Builder::Config::Linker: Rename warn_ldflags to copyright_print_ldflags (e.g., -nologo in MSVC).
- SPVM::Builder::Config: Rename warn_ccflags to copyright_print_ccflags.
- SPVM::Builder::Config: Rename ld_ccflags to library_linkage_ccflags (e.g., -MT, -MD in MSVC).
- SPVM::Builder::Config: Rename runtime_ccflags to cpp_exception_handling_ccflags and change it to a boolean abstraction for C++ exception support.
- SPVM::Builder::Config: Rename bcrypt_ldflags to libbcrypt_ldflags and then to exe_libbcrypt_ldflags for consistency.
- Changes
- SPVM::Builder::Config: Refactor field clearing (clear_system_fields) and command-line generation to use a more maintainable loop-based approach via get_clear_system_field_names.
- SPVM::Builder::Config::Linker: Move -s (strip symbols) from dynamic_lib_ldflags to the dedicated symbol_strip_ldflags field.
- SPVM::Builder::Config::Global: Refactor to inherit from SPVM::Builder::Config::Linker.
- SPVM::Builder::Config::Global: Move external_object_files and related methods to SPVM::Builder::Config::Linker.
- SPVM::Builder::Config::Global: Move mode and spvm_archive related fields to SPVM::Builder::Config::Base and SPVM::Builder::Config::Linker.
- SPVM::Builder::Config::Exe::MSVC: Refactor the apply method from a procedural approach to a declarative rule-based approach using compile_match and the "+" prefix.
- SPVM::Builder::Config::Exe::MSVC: Override the new method to automatically invoke apply upon instantiation.
- SPVM::Builder::CC: Remove the hardcoded .a extension for static libraries to support system-defined or config-defined extensions.
- SPVM::Builder::Exe: Replace include_dirs_global with a before_compile_cbs callback to dynamically manage include directories.
- Internal Changes
- SPVM::Builder::Config::Global: Extract core logic into a private _match_apply function to improve modularity.
- SPVM::Builder::Config::Base: Enable check_option_names for stricter configuration validation.
- Test: Add t/04_spvmcc/SPVM-Builder-Config-Global.t to verify _match_apply (matching, "+" append, and callbacks).
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
SPVM Array
SPVM Class
SPVM string
A Boolean value as An Object
Build Dynamic Libraries for SPVM Distribution
Builder APIs
Compilation and Link of Native Class
Compiler 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
Config Builder
Utility for Analyzing Class Dependencies
Creating Executable File
Library Information for A Linker
Linker Information
Basic Type Native APIs
Class File Native APIs
Compiler Native APIs
Runtime Environment
Method Native APIs
Runtime
Runtime Stack
Object File Information
Resource
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 Documents
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
Native APIs
Allocator Native APIs
Argument Native APIs
Basic Type Native APIs
Class File Native APIs
Class Variable Native APIs
Compiler Native APIs
Field Native APIs
Internal Native APIs
Method Native APIs
Mutex Native APIs
Runtime Native APIs
String Buffer Native APIs
Type Native APIs
Native Classes
Resource
SPVM Archive
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
Class Object
Error Code
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
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
Method Call
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
Mutex
Provides
in lib/SPVM/Builder/Accessor.pm
in lib/SPVM/Builder/Config/Exe/MSVC.pm
in lib/SPVM/Builder/Ninja.pm
in lib/SPVM/Builder/SPVMArchive.pm
in lib/SPVM/Dist.pm
Examples
- examples/doc/tutorial/basic/lib/SPVM/MyMath.spvm
- examples/doc/tutorial/basic/sum.pl
- examples/doc/tutorial/precompile/lib/SPVM/MyMath.spvm
- examples/doc/tutorial/precompile/sum_precompile.pl
- examples/native/bind_clib/bind_clib.pl
- examples/native/bind_clib/lib/SPVM/BindCLib.c
- examples/native/bind_clib/lib/SPVM/BindCLib.config
- examples/native/bind_clib/lib/SPVM/BindCLib.native/include/bind_clib.h
- examples/native/bind_clib/lib/SPVM/BindCLib.native/src/bind_clib.c
- examples/native/bind_clib/lib/SPVM/BindCLib.spvm
- examples/native/cuda_add/cuda_add.pl
- examples/native/cuda_add/lib/SPVM/MyAdd.config
- examples/native/cuda_add/lib/SPVM/MyAdd.cu
- examples/native/cuda_add/lib/SPVM/MyAdd.native/include/cuda_array_culc.h
- examples/native/cuda_add/lib/SPVM/MyAdd.native/src/cuda_array_culc.cu
- examples/native/cuda_add/lib/SPVM/MyAdd.spvm
- examples/native/eigen/README
- examples/native/gsl/lib/SPVM/MyGSL.c
- examples/native/gsl/lib/SPVM/MyGSL.config
- examples/native/gsl/lib/SPVM/MyGSL.spvm
- examples/native/gsl/mygsl.pl
- examples/native/opencv/resize/lib/SPVM/MyOpenCVResize.config
- examples/native/opencv/resize/lib/SPVM/MyOpenCVResize.cpp
- examples/native/opencv/resize/lib/SPVM/MyOpenCVResize.spvm
- examples/native/opencv/resize/linux-pengin-output.png
- examples/native/opencv/resize/linux-pengin.png
- examples/native/opencv/resize/opencv_resize.pl
- examples/native/openmp/lib/SPVM/MyOpenMP.c
- examples/native/openmp/lib/SPVM/MyOpenMP.config
- examples/native/openmp/lib/SPVM/MyOpenMP.spvm
- examples/native/openmp/openmp.pl
- examples/native/zlib/lib/SPVM/MyZlib.c
- examples/native/zlib/lib/SPVM/MyZlib.config
- examples/native/zlib/lib/SPVM/MyZlib.spvm
- examples/native/zlib/zlib.pl
- examples/spvmcc/basic/README.txt
- examples/spvmcc/basic/SPVM/MyApp.spvm
- examples/spvmcc/basic/myapp