SPVM 0.9677 is released
Tags: perl, spvm, beginners, programming
Published: 2023-01-06 01:39:34

<a href="https://metacpan.org/pod/SPVM">SPVM</a> 0.9677 is released.

## New Features and Enhancement

<a href="https://github.com/yuki-kimoto/SPVM/blob/master/Changes">Changes</a>

```
0.9677 2022-01-06
  [Changes]
    * Dynamic library files are loaded at run-time instead of compile-time.
  [Bug Fix]
    * Fixed the bug that the SPVM compiler is not released.
  [Incompatible Changes]
    * Changed the names of the following Compiler Native APIs.
      -  int32_t (*compile_spvm)(void* compiler, const char* class_name);
      +  int32_t (*compile)(void* compiler, const char* class_name);

    * Changed the names of the following String Buffer Native APIs.
      -  void* (*new_string_buffer_tmp)();
      +  void* (*new_object)();
      -  void (*free_string_buffer)(void* string_buffer);
      +  void (*free_object)(void* string_buffer);

    * Changed the names of the following Precompile Native APIs.
      -  void* (*new_precompile)();
      +  void* (*new_object)();
      -  void (*free_precompile)(void* precompile);
      +  void (*free_object)(void* precompile);

    * Changed the names of the following Allocator Native APIs.
      -  void* (*new_allocator)();
      +  void* (*new_object)();
      -  void (*free_allocator)(void* allocator);
      +  void (*free_object)(void* allocator);

    * Changed the names of the following Compiler Native APIs.
      -  void* (*new_compiler)();
      +  void* (*new_object)();
      -  void (*free_compiler)(void* compiler);
      +  void (*free_object)(void* compiler);

    * Changed the names of the following Runtime Native APIs.
      -  void* (*new_runtime)();
      +  void* (*new_object)();
      -  void (*free_runtime)(void* runtime);
      +  void (*free_object)(void* runtime);
      
    * Changed the definitions of the following Native APIs.
      -  void (*cleanup_global_vars)(SPVM_ENV* env, SPVM_VALUE* stack);
      +  void (*cleanup_global_vars)(SPVM_ENV* env);
      -  void (*call_init_blocks)(SPVM_ENV* env, SPVM_VALUE* stack);
      +  void (*call_init_blocks)(SPVM_ENV* env);    
      -  int32_t (*set_command_info_program_name)(SPVM_ENV* env, SPVM_VALUE* stack, void* obj_program_name);
      +  int32_t (*set_command_info_program_name)(SPVM_ENV* env, void* obj_program_name);
      -  int32_t (*set_command_info_argv)(SPVM_ENV* env, SPVM_VALUE* stack, void* obj_argv);
      +  int32_t (*set_command_info_argv)(SPVM_ENV* env, void* obj_argv);
    * The program name and command line arguments are not used in INIT blocks.
    * The main method of the program that is generated by the spvmcc command doesn't receive the program name and the command line arguments.
      The program name can be get CommandInfo->PROGRAM_NAME.
      The command line arguments can be get CommandInfo->ARGV.
      
  [New Features]
    * The pointer class can have fields.
    * The object of the pointer class can be created by the new operator.
    * The pointer class can inherit the parent class.
  [Compilation Error Message Fix]
    * Fixed the compilation error messages
      [Before]
      The class "%s" method
      The instance "%s" method
      
      [After]
      The "%s" class method
      The "%s" instance method
  [Exception Message Improvement]
    * Unified exception messages in Exchange API.
      [Before]
      %s basic type
      %s field
      %s class
      %s method
      [After]
      "%s" basic type
      "%s" field
      "%s" class
      "%s" method
      
  [Memory Usage Degration]
    * Internal object data has the native_object member variable. This size is the size of void*.
      This is used for the pointer class.
```

## For Programming Beginners

### What Is SPVM?

SPVM is a static typed programming language that can be installed from Perl/CPAN.

### How potential dose SPVM have?

Growth is expected in the fields of Bio Tech, AI/ML, Apple/iPhone/iPad Apps, Google/Android Apps, IoT Device, Connected Car, Smart Device, Smart Home, etc.

This is because SPVM can produce an executable file that supports cross platforms and make easy to calculate arrays and bind C/C++