The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

Changes for version 0.9509 - 2021-03-23

  • DEPRECATIONS
    • oarray type is deprecated. oarray type will be removed at 0.9510.
  • WARNINGS
    • Interfaces and IDs of Native APIs that is added after 0.9506+(181+) will be changed many times. because I realize Native APIs that compile SPVM are not yet implemented correctly in tests.
  • BUG FIX
    • Fix the bug that spvmcc can't detect the change of config file.
  • CHANGE
    • Add element[] type. This is same as oarray type, but element[] type has correct type dimension.
    • Add Fn->is_numeric_array, Fn->is_mulnum_array doc.
    • Add Fn->is_object_array
    • Add is_object_array native API.
    • Native API get_elem_byte_size uses only runtime information
    • Native API has_callback uses only runtime information
    • Native API has_interface uses only runtime information
    • Separate compiler allocator and runtime allocator. The memory allocated at compile time is freed just before runtime.
    • Add get_method_id_without_signature native API.
    • Add get_constant_string_value native API.
    • Add compiler_build_runtime_info native API.
    • Rename compiler_build_runtime_info to compiler_build_runtime native API.
    • Change Native API "compiler_build_runtime" argument and return values.
  • NON BACKWORD COMPATIBLE CHANGES
    • oarray type signature change from oarray to element[]. For this reason, 0.9510 don't have binary compatibility of precompiled source from 0.9509
    • Rename Internal native API "compiler" field to "runtime_info" because in this release SPVM compiler and runtime is completly separated. I think the effect is litte because this is internal field.
    • Rename native API new_compiler to compiler_new becuae this is my mistake and compiler API shoud start compiler_. This has a litte effect over 0.9506+.
    • The native API compiler methods is changed to runtime methods because I realize setting and getting native/precompile address should be done at only runtime. This has a litte effect over 0.9506+.
      • Change Native API compiler_get_native_method_address to get_native_method_address Change Native API compiler_set_native_method_address to set_native_method_address Change Native API compiler_get_precompile_method_address to get_precompile_method_address Change Native API compiler_set_precompile_method_address to set_precompile_method_address
  • Internally used "memory_blocks_count" native API is no more used. The count of memory blocks is managed in "runtime_info". Because this is internal used, the effect is little.
    • Change the following Native APIs. First argument don't receive env.
    • Before
      • SPVM_ENV* (*new_env_raw)(SPVM_ENV* env); void* (*compiler_new)(SPVM_ENV* env); void (*compiler_free)(SPVM_ENV* env, void* compiler); void (*compiler_set_start_line)(SPVM_ENV* env, void* compiler, int32_t start_line); int32_t (*compiler_get_start_line)(SPVM_ENV* env, void* compiler); void (*compiler_set_start_file)(SPVM_ENV* env, void* compiler, const char* start_file); const char* (*compiler_get_start_file)(SPVM_ENV* env, void* compiler); void (*compiler_add_module_dir)(SPVM_ENV* env, void* compiler, const char* module_dir); int32_t (*compiler_get_module_dirs_length )(SPVM_ENV* env, void* compiler); const char* (*compiler_get_module_dir )(SPVM_ENV* env, void* compiler, int32_t module_dir_id); int32_t (*compiler_compile_spvm)(SPVM_ENV* env, void* compiler, const char* class_name); int32_t (*compiler_get_error_messages_length)(SPVM_ENV* env, void* compiler); const char* (*compiler_get_error_message)(SPVM_ENV* env, void* compiler, int32_t index); int32_t (*compiler_get_class_id)(SPVM_ENV* env, void* compiler, const char* class_name); int32_t (*compiler_get_classes_length)(SPVM_ENV* env, void* compiler); const char* (*compiler_get_class_name)(SPVM_ENV* env, void* compiler, int32_t class_id); int32_t (*compiler_is_anon_class)(SPVM_ENV* env, void* compiler, int32_t class_id); int32_t (*compiler_get_methods_length)(SPVM_ENV* env, void* compiler, int32_t class_id); int32_t (*compiler_get_method_id)(SPVM_ENV* env, void* compiler, int32_t class_id, int32_t method_index_of_class); int32_t (*compiler_get_method_id_by_name)(SPVM_ENV* env, void* compiler, const char* class_name, const char* method_name); const char* (*compiler_get_method_name)(SPVM_ENV* env, void* compiler, int32_t method_id); const char* (*compiler_get_method_signature)(SPVM_ENV* env, void* compiler, int32_t method_id); int32_t (*compiler_is_anon_method)(SPVM_ENV* env, void* compiler, int32_t method_id); int32_t (*compiler_is_init_block_method)(SPVM_ENV* env, void* compiler, int32_t method_id); int32_t (*compiler_is_native_method)(SPVM_ENV* env, void* compiler, int32_t method_id); int32_t (*compiler_is_precompile_method)(SPVM_ENV* env, void* compiler, int32_t method_id);
    • After
      • SPVM_ENV* (*new_env_raw)(); void* (*compiler_new)(); void (*compiler_free)(void* compiler); void (*compiler_set_start_line)(void* compiler, int32_t start_line); int32_t (*compiler_get_start_line)(void* compiler); void (*compiler_set_start_file)(void* compiler, const char* start_file); const char* (*compiler_get_start_file)(void* compiler); void (*compiler_add_module_dir)(void* compiler, const char* module_dir); int32_t (*compiler_get_module_dirs_length )(void* compiler); const char* (*compiler_get_module_dir )(void* compiler, int32_t module_dir_id); int32_t (*compiler_compile_spvm)(void* compiler, const char* class_name); int32_t (*compiler_get_error_messages_length)(void* compiler); const char* (*compiler_get_error_message)(void* compiler, int32_t index); int32_t (*compiler_get_class_id)(void* compiler, const char* class_name); int32_t (*compiler_get_classes_length)(void* compiler); const char* (*compiler_get_class_name)(void* compiler, int32_t class_id); int32_t (*compiler_is_anon_class)(void* compiler, int32_t class_id); int32_t (*compiler_get_methods_length)(void* compiler, int32_t class_id); int32_t (*compiler_get_method_id)(void* compiler, int32_t class_id, int32_t method_index_of_class); int32_t (*compiler_get_method_id_by_name)(void* compiler, const char* class_name, const char* method_name); const char* (*compiler_get_method_name)(void* compiler, int32_t method_id); const char* (*compiler_get_method_signature)(void* compiler, int32_t method_id); int32_t (*compiler_is_anon_method)(void* compiler, int32_t method_id); int32_t (*compiler_is_init_block_method)(void* compiler, int32_t method_id); int32_t (*compiler_is_native_method)(void* compiler, int32_t method_id); int32_t (*compiler_is_precompile_method)(void* compiler, int32_t method_id);

Documentation

SPVM compiler to create exe file
The Command to Generate SPVM Native Modules

Modules

Static Perl Virtual Machine. Fast Calculation, Fast Array Operation, and Easy C/C++ Binding.
Blessed object base class
Array based blessed object
Class based blessed object
String based blessed object
Bool in SPVM | Bool object
Build SPVM program
SPVM Builder Public APIs
Compiler and Linker of Native Sources
Configurations of Compile and Link of Native Sources
Configurations of creating excutable files.
Create a Executable File
Object file information
Object file information
Build Utilities
Public APIs of the utility of SPVM Builder
Byte in SPVM | Byte object
ByteList in SPVM | Dynamic Byte Array
A Interface Type to Clone a Object
A Callback Type to Clone a Object
A Callback Type for byte Comparation
A Callback Type for double Comparation
A Callback Type for float Comparation
A Callback Type for int Comparation
A Callback Type for long Comparation
A Callback Type for Object Comparation
A Callback Type for short Comparation
A Callback Type for string Comparation
Complex_2d in SPVM | double complex type
Complex_2f in SPVM | float complex type
SPVM Performance Benchmark
SPVM Exchange API
SPVM Language Specification
SPVM Standard Modules
SPVM Native APIs
SPVM Performance Tutorial
Double in SPVM | Double object
DoubleList in SPVM | Dynamic double array
A Callback Type to Check the Object Equality
EqualityChecker::SameObject in SPVM | a callback implementation of EqualityChecker to check if the memory addresses of the two objects are equal.
SPVM Exchange API
Float in SPVM | Float object
FloatList in SPVM | Dynamic float array
SPVM Starndard Functions
Hash in SPVM | Hash Data Structure
Hash::Entry in SPVM | Hash entry
Int in SPVM | Int object
IntList in SPVM | Dynamic int array
List in SPVM | Dynamic object array
Long in SPVM | Long object
LongList in SPVM | Dynamic long array
Regex in SPVM | Regular expression
Regex::Pattern in SPVM | Regular expression pattern
Regex::Replacer in SPVM | a callback type for the regex replacement
Short in SPVM | Short object
ShortList in SPVM | Dynamic short array
StringBuffer in SPVM | String buffer
StringList in SPVM | Dynamic string array
A Interface Type to Stringify a Object
A Callback Yype to Stringify a Object
Time in SPVM | Time manipulation
Time::Info in SPVM | Time information
SPVM Unicode Utilities.

Provides

in lib/SPVM/Builder/Generator/Lib.pm

Examples