0.0380 2018-10-12
  - improve call subroutine performance by reduce malloc count
  - fix XS value reference bugs
0.0379 2018-10-08
  - fix temporary variable memory position bugs
  - fix string eq bugs
  - fix remainder bugs
  - fix right shift precompile bug
  - fix left shift precompile bug
  - fix right shift unsigned precompile bug
  - fix bit and bugs
0.0378 2018-10-02
  - fix exe compiler error library bugs
0.0377 2018-10-01
  - fix exe compiler error bugs
0.0375 2018-09-26
  - improve increment/decrement, can use array element, field access, package variable, deref
  - allow value_t multi dimension array
0.0374 2018-09-24
  - fix assign operator return value bugs
  - support package variable relative name
0.0373 2018-09-21
  - add unless statement
  - change reference type syntax to 
    
      sub sum : double ($x_in : double, $x_in2 : double, $x_out : double&);
    
    & is after type name.
  - fix many weaken bugs
  - add weaken $values->[$index] syntax
0.0372 2018-09-17
  - add boxing and unboxing feature
0.0371 2018-09-14
  - add automatically concat string convertion
  - add automatically numeric type to string type convertion

0.0370 2018-09-14
  - fix check object type null segumentation fault bug
  - fix new array length is minus segfalt bug
  - rename SPVM::Byte->set_value to SPVM::Byte->set_val
  - rename SPVM::Short->set_value to SPVM::Short->set_val
  - rename SPVM::Int->set_value to SPVM::Int->set_val
  - rename SPVM::Long->set_value to SPVM::Long->set_val
  - rename SPVM::Float->set_value to SPVM::Float->set_val
  - rename SPVM::Double->set_value to SPVM::Double->set_val
  - rename SPVM::Byte->get_value to SPVM::Byte->val
  - rename SPVM::Short->get_value to SPVM::Short->val
  - rename SPVM::Int->get_value to SPVM::Int->val
  - rename SPVM::Long->get_value to SPVM::Long->val
  - rename SPVM::Float->get_value to SPVM::Float->val
  - rename SPVM::Double->get_value to SPVM::Double->val
  - free runtime memory
  - Interface must have only one method
  - fix mortal stack bug. mortal stack is extended to count of PUSH_MORTAL opcode
  - fix array init type bug
  - fix type semantics. Can't assign Class[] to object[]
  - fix narrowing convertion bug
  - remove anon subroutine. This is mistake of class design
  - add anon package syntax for which have one subroutine
    
      my $comparator = sub compare : long ($self : self, $x1 : long, $x2 : long) {
        return $x1 * $x2;
      };
      
  - isa can check interface
  - can cast (object)
  - can cast to interface
0.0369 2018-09-08
  - fix hash key buffer memory bug.
  - rename SPVM::Build to SPVM::Builder
  - spvmcc command can create exe file
    
      spvmcc TestCase::MyExe
      
      # Entry point is main subroutine
      package TestCase::MyExe {
        sub main : int ($argv : string[]) {
          my $test_num = 0;
        }
      }
      
0.0368 2018-09-03
  - remove global runtime. SPVM become reentrant.
  - more portable, remove all static and inline keywords.
0.0367 2018-09-01
  - runtime don't need compiler information
  - free compiler memory completly
  - add SPVM::set_array_elements, SPVM::set_array_elements_bin, SPVM::get_array_elements, SPVM::get_array_elements_bin, SPVM::set_array_element, SPVM::get_array_element
  - remove SPVM::Data::Array::set_element, remove SPVM::Data::Array::get_element, remove SPVM::Data::Array::to_elements, remove SPVM::Data::Array::set_bin
    remove SPVM::Data::Array::set_elements, remove SPVM::Data::Array::to_bin, remove SPVM::Data::Array::to_string
0.0366 2018-08-09
  - rename SPVM::Build::Setting to SPVM::Build::Config and many methods is added and changed.
0.0365 2018-08-01
  - add reference type syntax to type\. You can write the double\ like.
    
    sub sum : double ($x_in : double, $x_in2 : double, $x_out : &double);

  - remove byte_ref, short_ref, int_ref, long_ref, float_ref, double_ref type
  
  - add value ref type support.
    For example, you can pass value type ref to subroutine.

      sub pass_value_ref_double : void ($x_in1 : TestCase::Point_d3, $x_in2 : TestCase::Point_d3, $x_out : &TestCase::Point_d3) {
        $x_out->{x} = $x_in1->{x} + $x_in2->{x};
        $x_out->{y} = $x_in1->{y} + $x_in2->{y};
        $x_out->{z} = $x_in1->{z} + $x_in2->{z};
      }

      sub test_pass_value_ref_double : int () {
        my $point_out : TestCase::Point_d3;
        
        my $point1 : TestCase::Point_d3;
        $point1->{x} = 0.25;
        $point1->{y} = 0.5;
        $point1->{z} = 0.125;

        my $point2 : TestCase::Point_d3;
        $point2->{x} = 0.25;
        $point2->{y} = 0.5;
        $point2->{z} = 0.125;
        
        pass_value_ref_double($point1, $point2, \$point_out);
        
        if ($point_out->{x} == 0.5 && $point_out->{y} == 1 && $point_out->{z} == 0.25) {
          return 1;
        }
        return 0;
      }
  - Perl function become can pass numeric reference and value reference to SPVM
      {
        my $point1 = {x => $BYTE_MIN, y => 1, z => 2};
        my $value1 = 6;
        my $point2 = {x => 3, y => 4, z => 5};
        my $value2 = 7;
        TestCase::PerlAPI->call_sub_value_ref_numeric_ref_mixed_arg(\$point1, \$value1, \$point2, \$value2);
        is_deeply($point1, {x => $BYTE_MIN + 1, y => 2, z => 3});
        is($value1, 7);
        is_deeply($point2, {x => 4, y => 5, z => 6});
        is($value2, 8);
      }
  
0.0364 2018-07-28
  - support numeric reference type
    add byte_ref, short_ref, int_ref, long_ref, float_ref, double_ref type
    add reference \ and derefence $$num syntax
    
    sub main : int ($mvar : int) {
      {
        my $out : double;
        ref_sum(0.25, 0.5, \$out);
        
        print((string)$out);
      }
      {
        my $num = 4;
        
        my $num_ref = \$num;
        
        my $num2 = $$num_ref;
        
        $$num_ref = 5;
        
        print((string)$num2);
        print((string)$num);
      }
    }

    sub ref_sum : double ($x_in1 : double, $x_in2 : double, $x_out : double_ref) {
      $$x_out = $x_in1 + $x_in2;
    }
    
0.0363 2018-07-26
  - simplify anon package syntax. You don't need to write "new package { ... }".
      my $point = package {
        has x : int;
        has y : int;
        sub clear : void ($self : self) {
          $self->{x} = 0;
          $self->{y} = 0;
        }
      };
  - Perl API call_sub support value type arguments
  - add SPVM::new_object_array
  - add SPVM::new_value_t_array
  - remove SPVM::new_byte_array_bin
  - remove SPVM::new_short_array_bin
  - remove SPVM::new_int_array_bin
  - remove SPVM::new_long_array_bin
  - remove SPVM::new_float_array_bin
  - remove SPVM::new_double_array_bin
  - fix mortal stack length overflow bug
0.0362 2018-07-23
  - improve precompiled source code with more typing
0.0361 2018-07-21
  - add two anon sub syntax
    [First] Package is Foo, sub name is anonymous
    
      package Foo {
        sub : int ($self : self, $x1 : int, $x2 : int) {
          return $x1 + $x2;
        }
      }
    
    [Second] Package is anonymous(Internaly named), sub name is anonymous
    
      my $anon_sub = sub : int ($self : self, $x1 : int, $x2 : int) {
        return $x1 + $x2;
      }
  - add SPVM::Comparator
    This is used for object sort method
  
    package SPVM::Comparator : interface {
      sub : int ($self : self, $x1 : object, $x2 : object);
    }

0.0360 2018-07-20
  - Add Complex functions
      add cadd
      add csub
      add cmul
      add cdiv
      add caddf
      add csubf
      add cmulf
      add cdivf
      add new_fcomplex function
      add new_dcomplex function
      add new_fcomplex_array function
      add new_dcomplex_array function
      fix array init multi dimention bugs
0.0359 2018-07-16
  - SPVM::CORE become done native compile
  - add join function
  - fix const assignment bug
  - support list syntax
      my $nums = [(1, 2), (3, 4), (5, 6)];
  - object have body field at offset 0. This will fix alignment bugs.
0.0358 2018-07-13
  - add c source files and header files to distribution
  - Core function is done inline-expansion in precompile
0.0357 2018-07-11
  - value_t package must be end with [Prefix][FieldLength]
      package TestCase::Complex_b2 : value_t {
        has re : byte;
        has im : byte;
      }
      package TestCase::Complex_s2 : value_t {
        has re : short;
        has im : short;
      }
      package TestCase::Complex_i2 : value_t {
        has re : int;
        has im : int;
      }
      package TestCase::Complex_l2 : value_t {
        has re : long;
        has im : long;
      }
      package TestCase::Complex_f2 : value_t {
        has re : float;
        has im : float;
      }
      package TestCase::Complex_d2 : value_t {
        has re : double;
        has im : double;
      }
  - support value_t array
      my $nums1 = new TestCase::Complex_d2[10];
      $nums1->[9]{re} = 5;
      $nums1->[9]{im} = 9;
      
      my $nums1_9_re = $nums1->[9]{re};
      my $nums1_9_im = $nums1->[9]{im};
      
      my $nums2 = $nums1->[9];
      
      $nums1->[5] = $nums2;
  - add SPVM::Complex_i2, SPVM::Complex_l2, SPVM::Complex_f2, SPVM::Complex_d2

0.0356 2018-07-07
  - Support value_t package. This is value type.
      package TestCase::Complex_double_2 : value_t {
        has re : double;
        has im : double;
      }
0.0355 2018-07-05
  - Symbol name can't conatain __
  - Object alignment must be sizeof(SPVM_VALUE)
  - rename strcut descripter to pointer
  - rename env->new_struct to env->new_pointer
  - rename env->get_struct to env->get_pointer
  - remove object null check from env->get/set_xxx_field
  - fix env->get/set_xxx_field bugs
  - fix array store undef bug in precompile code
0.0354 2018-07-03
  - Get and check field index in top of subroutine in precompile
  - Get and check package variable id in top of subroutine in precompile
  - Get and check sub id in top of subroutine in precompile
0.0353 2018-06-30
  - env->get_sub_id receive package name and signature
      [Before]
      int32_t sub_id = env->get_sub_id(env, sub_abs_name);
      [After]
      int32_t sub_id = env->get_sub_id(env, package_name, signature);
      
      Signature contains return type, subroutine name, and argument types
      For example
      
        (int)foo(double,long)

  - rename env->get_field_rel_id to env->get_field_index and receive package name and signature
      [Before]
      int32_t field_index = env->get_field_rel_id(env, name);
      [After]
      int32_t field_index = env->get_field_index(env, package_name, signature);
      
      Signature contains field type and field name
      For example
      
        (int)x

  - add env->get_package_var_id

      int32_t package_var_id = env->get_field_index(env, package_name, signature);
      
      Signature contains package variable type and package variable name
      For example
      
        (int)$FOO
        
  - improve exception logic
  - improve precompile symbol name check
0.0352 2018-06-27
  - Separate mortal API and raw API
    raw API create object which reference count is zero.
    mortal API create object which refernece count is one and pushed to mortal stack.

      [Mortal API]
		  SPVM_RUNTIME_API_new_object
		  SPVM_RUNTIME_API_new_byte_array
		  SPVM_RUNTIME_API_new_short_array
		  SPVM_RUNTIME_API_new_int_array
		  SPVM_RUNTIME_API_new_long_array
		  SPVM_RUNTIME_API_new_float_array
		  SPVM_RUNTIME_API_new_double_array
		  SPVM_RUNTIME_API_new_object_array
		  SPVM_RUNTIME_API_new_multi_array
		  SPVM_RUNTIME_API_new_string
		  SPVM_RUNTIME_API_new_struct

		  [Raw API]
		  SPVM_RUNTIME_API_new_object_raw 
		  SPVM_RUNTIME_API_new_byte_array_raw 
		  SPVM_RUNTIME_API_new_short_array_raw 
		  SPVM_RUNTIME_API_new_int_array_raw 
		  SPVM_RUNTIME_API_new_long_array_raw 
		  SPVM_RUNTIME_API_new_float_array_raw 
		  SPVM_RUNTIME_API_new_double_array_raw 
		  SPVM_RUNTIME_API_new_object_array_raw 
		  SPVM_RUNTIME_API_new_multi_array_raw 
		  SPVM_RUNTIME_API_new_string_raw 
		  SPVM_RUNTIME_API_new_struct_raw 
  - Add enter_scope and leave_scope native.h
      If you use enter_scope, return scope_id. and you create objects,
      and use leave_scope, objects is automatically released.
		  {
		    // Enter scope
		    int32_t scope_id = env->enter_scope(env);

		    env->new_int_array(env, 3);
		    env->new_int_array(env, 3);
		    env->new_int_array(env, 3);
		    
		    // Leave scope
		    env->leave_scope(env, scope_id);
		  }
  
  - remove SPVM_NATIVE_SUB macro in spvm_native.h. Native function name become start with SPVM_NATIVE_

        SPVM_NATIVE_SUB(My__Point__clear)

      is changed to

        SPVM_NATIVE_My__Point__clear
  - add SPVM_SUCCESS and SPVM_EXCEPTION macro in native.h
      SPVM Native Interface must return 0 in success, or 1 in exception,
      This mean exception flag, but this is little difficult to keep in mind.
      I add SPVM_SUCCESS and SPVM_EXCEPTION macro.
      You can use them
      
        return SPVM_SUCCESS
        
        return SPVM_EXCEPTION;
      
0.0351 2018-06-23
  - improve exception message
  - create_exception_stack_trace become receive package_name, sub_name, file instead of sub_id
  - LOOKUP_SWITCH opcode become 1 operation
  - opcode become 64bit from 128bit
0.0350 2018-06-22
  - improve solo SPVM tests command
      You can run solo tests by the following commands. This comands is wrote in solo/README
      
     # Normal run
     yacc/bison.sh && perl Makefile.PL && make && perl solo/solo_Makefile.PL && make -f solo/Makefile && ./solo/spvm_main TestCase

     # Debug run - Print AST, package information, operaion codes
     yacc/bison.sh && perl Makefile.PL --OPTIMIZE=O --DEFINE=SPVM_DEBUG_DUMP --DEFINE=SPVM_DEBUG_OBJECT_COUNT && make && perl solo/solo_Makefile.PL && make -f solo/Makefile && ./solo/spvm_main TestCase

     # Parser Debug run - Print yacc result
     yacc/bison.sh && perl Makefile.PL --OPTIMIZE=O --DEFINE=SPVM_DEBUG_YACC && make && perl solo/solo_Makefile.PL && make -f solo/Makefile && ./solo/spvm_main TestCase
  - use package relative id in field access, call sub, package variable access, type
      
0.0349 2018-06-15
  - rename SPVM::Build::Base to SPVM::Build::CBuilder
  - rename SPVM::Build::Native to SPVM::Build::CBuilder::Native
  - rename SPVM::Build::Precompile to SPVM::Build::CBuilder::Precompile
  - rename SPVM::Build::SPVMInfo to SPVM::Build::Info
  - fix dynamic link library c func names
0.0348 2018-06-15
  - add SPVM::Build::Setting
    
    This module is to do setting ExtUtils::CBuilder. ExtUtils::CBuilder is used for native compile and precompile.
  - fix config path bug
  - add runtime allocator again to check objects count.
      spvm_runtime_allocator.h
      spvm_runtime_allocator.c
  - fix native function name set_object_array_element, get_object_array_element. this name was wrong by wrong replacing.
  - fix weaken memory broken bug
  - add C/C++ struct/class binding features
      add Native interface new_struct and get_struct
      new_struct create object which have C/C++ struct/class
      get_struct get struct/class from SPVM object
0.0347 2018-06-13
  - fix bug : [rt.cpan.org #125541] System perl used in build process
    
    I receive a advice
    
      "
       It seems that the system perl is used here (/usr/bin/perl),
       not the perl used for building the distribution. Typically this can 
       be fixed by using something like $^X.
      "
    
    This bug is fixed by using $^X.
0.0346 2018-06-12
  - fix Makefile.PL native and precompile make rule bug
    
    The following output become printed to Makefile
    
      dynamic :: spvm_native_SPVM__Example  

      spvm_native_SPVM__Example  :: blib/lib/SPVM/Example.native/Example.so

      blib/lib/SPVM/Example.native/Example.so :: lib/SPVM/Example.native/Example.c lib/SPVM/Example.spvm

      	perl -Mblib -MSPVM::Build -e "SPVM::Build->new(build_dir => 'spvm_build')->create_shared_lib_native_dist('SPVM::Example')"

      dynamic :: spvm_precompile_SPVM__Example  

      spvm_precompile_SPVM__Example  :: blib/lib/SPVM/Example.precompile/Example.so

      blib/lib/SPVM/Example.precompile/Example.so :: lib/SPVM/Example.spvm

      	perl -Mblib -MSPVM::Build -e "SPVM::Build->new(build_dir => 'spvm_build')->create_shared_lib_precompile_dist('SPVM::Example')"

  - fix INT64_MIN bugs
    In native function, -9223372036854775808LL is changed to -9223372036854775808ULL
  - fix INT32_MIN bugs
    In native function, -2147483648L is changed to -2147483648UL
0.0345 2018-06-12
  - Support precompile subroutine in distribution
    In this version, spvm subroutine can be precompiled before runtime.
    
    You can create precompiled shared library by the following command.
    
      perl -MSPVM::Build -e "SPVM::Build->new(build_dir => 'spvm_build')->create_shared_lib_precompile_dist('Point')";

  - remove len keyword and add scalar keyword
    SPVM don't have scalar context and list context, but Perl have them.
    In SPVM, you can get array by
    
      @$values
    
    syntax. but this confuse you sometime
    because
    
      foo(@$values);
    
    is seem list expansion. This is always array length in SPVM.
    Until now I provided len keyword , but this is not Perlish syntax.
    From now I provide scalar keyword and another array syntax.
      
      scalar @$values
    
    You can write the following subroutine call
    
      foo(scalar @$values);
  - add SPVM_NATIVE_SUB macro to spvm_native, and SPVM native function defenition way is changed to the following
      
      // My::Example::sin
      int32_t SPVM_NATIVE_SUB(My__Example__sin) (SPVM_ENV* env, SPVM_VALUE* args) {
        (void)env;
        
        double value = sin(args[0].dval);
        
        args[0].dval = value;
        
        return 0;
      }
    
    SPVM_NATIVE_SUB macro automatically expand function name to SPVM_NATIVE_My__Example__sin.
    This is very simple way to define native function.
    Newbie only learn SPVM_NATIVE_SUB macro and replace package name : to _ and join package name and subroutine name with __.
    
0.0345 2018-06-10
  - SPVM::Build can parse distribution module and get subrutine names from it
  - rename compile descriptor to precompile
0.0344 2018-06-6
  - Change native function return value.
    native function return value must be set args[0], and return croak_flag.
0.0343 2018-06-05
  - do inline expasion in subroutien of same precompile package
  - SPVM module loading path become same as Perl. You don't need to create SPVM/ directory.
  - remove SPVM::Math
  - remove SPVM::TypeUtil
  - Move SPVM::Math and SPVM::TypeUtil functions to CORE namespace
0.0342 2018-06-02
  - remove SPVM::Native
  - remove SPVM::Precompile
  - add compile descriptor to precompile
  - cleanup SPVM native and precompile build system
0.0340 2018-05-28
  - rename byte_value to bval
  - rename short_value to sval
  - rename int_value to ival
  - rename long_value to lval
  - rename float_value to fval
  - rename double_value to dval
  - rename object_value to oval
  - pointer_value, string_value, object_address_value is merged to oval
  - rename SPVM_API_byte to SPVM_VALUE_byte
  - rename SPVM_API_short to SPVM_VALUE_short
  - rename SPVM_API_int to SPVM_VALUE_int
  - rename SPVM_API_long to SPVM_VALUE_long
  - rename SPVM_API_float to SPVM_VALUE_float
  - rename SPVM_API_double to SPVM_VALUE_double
  - rename SPVM_API_OBJECT to SPVM_VALUE_object
  - rename SPVM_API to SPVM_ENV
  - rename spvm_api.h to spvm_native.h
  - rename $obj->get_elements to $obj->to_elements
  - rename $obj->to_data to $obj->to_bin
  - rename $obj->set_data to $obj->set_bin
  - rename SPVM::new_byte_array_data to SPVM::new_byte_array_bin
  - rename SPVM::new_short_array_data to SPVM::new_short_array_bin
  - rename SPVM::new_int_array_data to SPVM::new_int_array_bin
  - rename SPVM::new_long_array_data to SPVM::new_long_array_bin
  - rename SPVM::new_float_array_data to SPVM::new_float_array_bin
  - rename SPVM::new_double_array_data to SPVM::new_double_array_bin
  - remove range methods
  - rename $array->set to $array->set_element
  - rename SPVM::Perl::Object to SPVM::Object
  - add SPVM::new_multi_array_len
0.0339 2018-05-26
  - rename Std::Math to Math
  - renmae Std::Time to Time
  - renmae Std::TypeUtil to TypeUtil
  - rename Std::IO to IO
  - rename Std to CORE
  - merged CORE::Time to CORE
  - merged CORE::IO to CORE
  - CORE module is loaded by default
  - CORE functions become static functions
0.0338 2018-05-25
  - add examples
  - add const byte[] type
  - String type become string type to express it is core type.
  - Otring type become object type to express it is core type.
  - string type become syntax sugar of const byte[].
  - string next of end character become '\0'
0.0337 2018-05-24
  - remove jit descriptor
  - add SPVM::JIT moudle
  - JIT compile unit become package
  - implement JIT compile cache system
  - improve test peformance very much
0.0336 2018-05-19
  - fix hash insert and search bug
  - name string is shared intenally
  - only support NetBSD 7+, not support NetBSD 6
0.0335 2018-05-18
  - support multi dimension array initialization
    my $nums = [
      [1, 2, 3],
      [4, 5, 6]
    ];
0.0334 2018-05-07
  - add new array init syntax.
    my $nums = [3, 4, 5];
    my $nums = [0.1, 0.4, 0.8];
  - remove Std::Number::Util many subtoutines
  - rename Std::Number::Util to Std::TypeUtil
    and Std::TypeUtil become C language inttype.h and float.h wrapper
  - remove Std::Array::Util
0.0333 2018-05-05
  - fix array init type bug
  - fix 32bit environment not work bug
0.0332 2018-05-04
  - Cleanup internal ast
0.0331 2018-05-01
  - fix many assign reference count bug.
  - Object type become generic purpose type
  - Object can be assigned any array object
0.0329 2018-04-24
  - use sprintf "%g" format for string conversion
0.0328 2018-04-24
  - Numeric class become not private, and set_value method.
  - add Bool package
  - fix nan test bug
0.0327 2018-04-21
  - fix jit link subroutine name bug
  - only print warning message when SPVM_TEST_ENABLE_WARNINGS is defined
  - double, float string convertion more portable
  - fix windows long constant bug
  - fix windows jit dll file overwritten bug
0.0326 2018-04-20
  - forbidden function call from Perl. All subroutine become method or class method
  - rename Std::Arrays to Std::Array::Util
  - rename Std::Array::Util copy_of_xxx to copy_xxxs
  - rename Std::Array::Util equals_xxx to eq_xxxs
  - fix windows source file reading bug
  - inline source code must be in .inline instead of .native
  - fix temporary directory bug
  - add build directory cleanup logic
0.0325 2018-04-13
  - remove template feature
  - rename Math to Std::Math
  - rename Arrays to Std::Arrays
  - rename Number::Util to Std::Number::Util
  - add some Std::Math functions
  - remove absolute call subroutine syntax
    method is only instance method or class method
  - rename CORE to Std
  - need use Std to use print, warn and time
  - use must be in package block
0.0324 2018-04-07
  - implement string convertion
  - implement isa
  - implement string comparison operator
  - fix (term) is not allowed bug
0.0323 2018-04-06
  - fix file empty bug
0.0322 2018-04-04
  - allow numeric type to String convertion
  - remove string concat operator automatical type convertion
  - licence become MIT licence
0.0321 2018-04-02
  - rename Integer package to Int package
  - add Number::Util and move many number util funtions of Byte, Short, Int, Long, Float, Double to Number::Util
  - SPVM all C source file is compiled by -std=c99 option by default
0.0320 2018-03-29
  - add private and public descriptor
  - add private field
  - add private package
  - fix check cast bug
0.0319 2018-03-29
  - add interface descriptor to package declaration
  - fix bug that empty package parsing fail
  - add Object interface
  - add subroutine argument convertion
  - implement interface method call
  - implement check cast
0.0318 2018-03-20
  - field become public by default
  - remove set, get keyword
  - new become public by default
  - add self keyword to represent invocant
  - many module methods become class method
    Byte, Short, Integer, Long, Float, Double, Math
0.0317 2018-03-15
  - support escape character \0
  - cleanup leave scope logic
  - numeric variable become local variable in jitcode
0.0316 2018-03-10
  - remove runtime constant_pool
0.0315 2018-03-08
  - add JIT descripter
  - fix manifest not to contain SPVM-* files
0.0314 2018-03-01
  - remove build_shared_lib.pl script
  - fix jit subroutine not called bug
0.0313 2018-02-26
  - fix shared lib dependency bug
  - sub descripter position is changed
    before: sub sin : native double ($x : double);
    after : native sub sin : double ($x : double);
  - fix windows dll not loading bug
0.0312 2018-02-23
  - fix bug that last statement can't do leave scope logic
0.0311 2018-02-21
  - shared library building temporaly directory is cleaned up in the scope
  - cleanup shared library loading
  - fix exception stack trace subroutine name
  - fix all warnings
0.0310 2018-02-16
  - enum value must be int type
  - remove byte literal b
  - remove short literal s
  - add automatically type convertion to + operator
  - add automatically type convertion to - operator
  - add automatically type convertion to * operator
  - add automatically type convertion to / operator
  - add automatically type convertion to % operator
  - add automatically type convertion to unary -
  - fix unary + bug
  - add automatically type convertion to unary +
  - add automatically type convertion to == operator
  - add automatically type convertion to != operator
  - add automatically type convertion to > operator
  - add automatically type convertion to >= operator
  - add automatically type convertion to < operator
  - add automatically type convertion to <= operator
  - add automatically type convertion to array index
  - add automatically type convertion to lengh of new array
  - add automatically type convertion to ~ operator
  - add automatically type convertion to & operator
  - add automatically type convertion to | operator
  - add automatically type convertion to ^ operator
  - add automatically type convertion to << operator
  - add automatically type convertion to >> operator
  - add automatically type convertion to >>> operator
  - limit <<, >>, >>> right value
  - fix increment, decrelement assignment bug
  - implement float, double increment
  - add automatically type convertion to == operator
0.0309 2018-02-10
  - jit code is called from virtual machine
  - separate tests to succeed tests at less memory environment
0.0308 2018-02-05
  - implement Perl compatible GC system correctory
  - fix eval block stack bug
0.0307 2018-02-01
  - fix print function bug that print line break.
  - remove say relative functions. say, say_xxx, say_xxx_err
  - remove print relative functions. print_xxx, print_xxx_err
  - rename print_err to warn
  - sub definition is changed. sub NAME : RETURN_TYPE ($arg1 : ARG_TYPE1, ...) { }
0.0306 2018-01-23
  - remove SPVM::Debug
  - croak stack trace is on by default
0.0305 2018-01-20
  - fix MANIFEST
  - improve exception logic
0.0304 2018-01-18
  - add jit code in test(jit-spvm.t)
0.0303 2018-01-03
  - fix reference count bug in loop
  - support array initialization in any place.
    new int[] { 1, 2, 3} is used in any place.
  - add temporary JIT code for preparation for JIT compile
  - fix assign excecution order
  - fix type inference bug
0.0302 2017-12-07
  - add eval block stack max length
  - fix next statement bug
  - operation code become flexible 1 byte to fixed 64 byte for preparation of JIT compile
0.0301 2017-11-20
  - support relative name subroutine call
    sum(0, 1);
    At first, current package is searched, next core function
  - rename std package to CORE package
  - package variable must be start upper case
  - lexical variable must be start lower case
  - support relative name package variable
0.03 2017-11-17
  - SPVM VM change Stack Based VM to Register Based VM
    This change slow down performance temporary
  - fix bug that my variable type can't be detected.
  - fix my var scope bug
  - fix negate operator bug
  - add complement operator ~
    but, this is prepared for JIT compile
0.0284 2017-10-30
  - simplify SPVM internal to implement JIT compile
0.0283 2017-10-23
  - cleanup SPVM modules
  - implement get_type_id correctory
  - change array init syntax
    before: my $values : int[] = [1, 2, 3];
    after : my $values = new int[] {1, 2, 3};
0.0282 2017-10-23
  - support package variable
0.0281 2017-10-19
  - remove SPVM::new_object
  - remove SPVM::Object::Package::set
  - remove SPVM::Object::Package::get
  - can call method directory from SPVM object
    my $object = SPVM::TestCase::new();
    $object->set_x_byte($BYTE_MAX);
    $object->set_x_short($SHORT_MAX);
  - remove Package->name syntax because Perl subroutine call correspoing to SPVM subroutine call completely
  - remove relative name subroutine call because future keyword adding don't break backward compatible
  - fix method call bug
  - add getter and setter syntax
    set x, y;
    get x, y;
  - field become private
  - new keyword become private
0.0280 2017-10-13
  - add String type again
  - add Native API new_string
  - add Native API get_string_length
  - add Native API get_string_chars
0.0279 2017-10-12
  - fix catch exception bug that runtime exception can't be cached
0.0278 2017-10-11
  - throw exception when get array length of undef value
  - SPVM::new_xxx_array return undef if argument is undef
  - allow SPVM::call_sub undef argument
  - add std::say_err ($value : byte[]) : native void;
  - add std::say_err_byte ($value : byte) : native void;
  - add std::say_err_short ($value : short) : native void;
  - add std::say_err_int ($value : int) : native void;
  - add std::say_err_long ($value : long) : native void;
  - add std::say_err_float ($value : float) : native void;
  - add std::say_err_double ($value : double) : native void;
  - add std::print_err ($value : byte[]) : native void;
  - add std::print_err_byte ($value : byte) : native void;
  - add std::print_err_short ($value : short) : native void;
  - add std::print_err_int ($value : int) : native void;
  - add std::print_err_long ($value : long) : native void;
  - add std::print_err_float ($value : float) : native void;
  - add std::print_err_double ($value : double) : native void;
  - add std::time()
  - add Array::equals_byte()
  - add Array::equals_short()
  - add Array::equals_int()
  - add Array::equals_long()
  - add Array::equals_float()
  - add Array::equals_double()

0.0277 2017-10-10
  - allow resorved word for subroutine name
  - add Arrays package
  - add Arrays::copy_of_byte
  - add Arrays::copy_of_short
  - add Arrays::copy_of_int
  - add Arrays::copy_of_long
  - add Arrays::copy_of_float
  - add Arrays::copy_of_double
  - fix native subroutine exception bugs
  - array initialization allow all terms, and need type declaration
0.0276 2017-10-05
  - rename back to_array to get_elements
0.0275 2017-10-04
  - fix Math.spvm loading bug
0.0274 2017-10-04
  - add package name check
  - fix enum call bug
0.0273 2017-10-03
  - support octal literal
  - support binary literal
0.0272 2017-09-27
  - add Math::tan function
  - add Math::asin function
  - add Math::acos function
  - add Math::atan function
  - add Math::to_radians function
  - add Byte package
  - add Short package
  - add Integer package
  - add Long package
  - add Float package
  - add Double package
  - fix call native long function bug
  - change byte constatant specifier b to y
    124b -> 124y
  - a, b, c, d, e, f become hex character.
0.0271 2017-09-23
  - add Math::cos function
  - add Math::sin function
0.0270 2017-09-22
  - fix 0 length string bug
0.0269 2017-09-21
  - add SPVM::Object::Array::Short::set_data()
  - add SPVM::Object::Array::Int::set_data()
  - add SPVM::Object::Array::Long::set_data()
  - add SPVM::Object::Array::Float::set_data()
  - add SPVM::Object::Array::Double::set_data()
  - add SPVM::Object::Array::Short::to_data()
  - add SPVM::Object::Array::Int::to_data()
  - add SPVM::Object::Array::Long::to_data()
  - add SPVM::Object::Array::Float::to_data()
  - add SPVM::Object::Array::Double::to_data()
  - add SPVM::new_short_array_data()
  - add SPVM::new_int_array_data()
  - add SPVM::new_long_array_data()
  - add SPVM::new_float_array_data()
  - add SPVM::new_double_array_data()
  - add SPVM::Object::Array::Byte::set_elements_range()
  - add SPVM::Object::Array::Short::set_elements_range()
  - add SPVM::Object::Array::Int::set_elements_range()
  - add SPVM::Object::Array::Long::set_elements_range()
  - add SPVM::Object::Array::Float::set_elements_range()
  - add SPVM::Object::Array::Double::set_elements_range()
  - add SPVM::Object::Array::Byte::set_data_range()
  - add SPVM::Object::Array::Short::set_data_range()
  - add SPVM::Object::Array::Int::set_data_range()
  - add SPVM::Object::Array::Long::set_data_range()
  - add SPVM::Object::Array::Float::set_data_range()
  - add SPVM::Object::Array::Double::set_data_range()
  - add SPVM::Object::Array::Byte::to_array_range()
  - add SPVM::Object::Array::Short::to_array_range()
  - add SPVM::Object::Array::Int::to_array_range()
  - add SPVM::Object::Array::Long::to_array_range()
  - add SPVM::Object::Array::Float::to_array_range()
  - add SPVM::Object::Array::Double::to_array_range()
  - add SPVM::Object::Array::Byte::to_data_range()
  - add SPVM::Object::Array::Short::to_data_range()
  - add SPVM::Object::Array::Int::to_data_range()
  - add SPVM::Object::Array::Long::to_data_range()
  - add SPVM::Object::Array::Float::to_data_range()
  - add SPVM::Object::Array::Double::to_data_range()

0.0268 2017-09-19
  - remove string type. SPVM string become byte[].
  - SPVM::new_string_bytes renamed to SPVM::new_byte_array_data and return SPVM::Array::Byte object
  - SPVM::new_string renamed to SPVM::new_byte_array_string and return SPVM::Array::Byte object
  - rename get_elements to to_array
  - rename get_string to to_string
  - rename get_data to to_data
  
0.0267 2017-09-18
  - add .= operator
0.0266 2017-09-16
  - fix bug that empty string is not used
  - rename SPVM::new_string_raw to SPVM::new_string_bytes
  - implement . operator to concat string
  - renmae println to say
0.0265 2017-09-13
  - fix clang duplicate symbol bug
0.0264 2017-09-12
  - rename Inline to Extension
0.0263 2017-09-12
  - add native INC config
  - add native LIBS config
  - add special assign syntax
    +=	
    -=	
    *=	
    /=	
    %=	
    &=	
    ^=	
    |=	
    <<=	
    >>=	
    >>>=	
  - fix CBuilder config bug
0.0262 2017-09-12
  - fix make dependency
0.0261 2017-09-11
  - remove inline syntax
    __INLINE__
    __NATIVE__
  - add new runtime compile syntax
    Foo.spvm
    Foo.native/Foo.c
    Foo.native/Foo.config
    
0.0260 2017-09-08
  - fix windows dll bugs
0.0259 2017-09-06
  - add Math module
  - add Math::sin function
  - add Math->PI constant
  - add Math->E constant
0.0258 2017-09-06
  - fix temporary inline file name.
  - support inline native config
    __CONFIG__
  - support inline config following options
    CC
    CCFLAGS
    LD
    LDDLFLAGS
    OPTIMIZE
0.0257 2017-09-05
  - improve inline native source error message
  - inline source is separated each
0.0256 2017-09-04
  - CBuilder output become quite.
  - Fix some Windows compile error
0.0255 2017-09-04
  - detect automatically inline native function
  - remove SPVM::Inline
0.0254 2017-09-02
  - Support inline native function. implement SPVM::Inline
0.0253 2017-09-01
  - fix exception bugs
0.0252 2017-08-30
  - allow enum last camma
  - allow term last camma
  - allow args last camma
  - allow descripter last camma
  - forbidden double comma
0.0251 2017-08-30
  - fix bug that if package is not exists, compile is ok.
  - implement destructor
    sub DESTROY ($self : Foo) : void {
      
    }
0.0250 2017-08-29
  - cleanup runtime
  - cleanup api
  - fix exception some bug
0.0249 2017-08-25
  - string can't convert to byte[]
  - byte[] can't convert to string
  - allow $string->[0] to get byte value
  - improve get_sub_id, get_type_id, get_field_id performance
0.0248 2017-08-19
  - support xs.dll dynamiclin library
  - fix __END__ not used bug
0.0247 2017-08-19
  - Sorry, rename back stdout to std
    SPVM only have std package by default and automatically loaded without use std;
  - support dynamic link library
0.0246 2017-08-17
  - array element is initialized by zero.
0.0245 2017-08-16
  - fix get object byte field bug
  - fix set object byte field bug
  - fix bug that compiler can't load source file over 0xFF bytes
0.0244 2017-08-15
  - implement weak reference to resolve recursive reference
    weaken $obj->{foo};
  - Field become have any object
0.0243 2017-08-12
  - add SPVM::new_object_array_len function
  - add SPVM::Array::Object::set function
  - add SPVM::Array::Object::get function
0.0242 2017-08-11
  - array malloc length + 1. and last value is 0. This is for C level string API.
  - add debug mode. 
    use SPVM::Debug;
0.0241 2017-08-08
  - fix void subroutine bug that if return value is not exists, runtime error occur.
0.0240 2017-08-07
  - fix number literal bug that hex number e and E is floating point specifier
  - add byte and short number literal syntax
    123b
    123s
  - hex number only allow A, B, C, D, E, F because f is used to specify the number is floating point
    and b is used to specify the number is byte
  - fix array float store and load bug
  - support underline in number literal
    123_123
    0xFF_FF
0.0239 2017-08-05
  - cleanup enum internal logic
  - fix clang compiler error
  - fix all warnings 
0.0238 2017-08-04
  - Support nested switch statement
0.0237 2017-08-03
  - improve SPVM call_sub performance
0.0236 2017-08-01
  - add __END__
  - SPVM exception can be cached from Perl's eval { ... }
  - fix one character string bug.
0.0235 2017-07-31
  - fix default return value
  - imporve exception message
0.0234 2017-07-29
  - rename malloc to new. you can also define new function for object initialization.
    my $obj = new Foo;
    my $obj = Foo::new(3);
    package Foo {
      sub new($var1 : int) {
        
        # ...
        
        return new Foo;
      }
    }
  - object's fields are initialized by zero.
    
0.0233 2017-07-28
  - support package template.
  - support over 4G memory allocation
0.0232 2017-07-26
  - add len keyword to get array length
    reason is that
    foo(@$nums) looks like passing array itself, not array length.
    you can use len keyword for readability.
    foo(len $nums);
  - Fix bug that error occur when near small base_object_max_byte_size_use_memory_pool is malloced
0.0231 2017-07-25
  - Fix clang compile error
0.0230 2017-07-25
  - Fix POSIX function import bug
  - Package name must be start with upper case. Lowercase is reserved for core package.
  - Add SPVM/stdout.pm as Perl module
0.0229 2017-07-25
  - support array initialization
    my $nums = [1, 2, 3];
  - fix memory breaking bug when object is assigned from freelist
0.0228 2017-07-22
  - fix enum constant bug
  - support float enum
  - support double enum
0.0227 2017-07-21
  - fix tests bug
0.0226 2017-07-20
  - fix float convertion bugs
  - fix convert double to short bug
  - fix floating number which don't have point(for example, 346638529e+38) parsing bug.
  - rename std package to stdout
  - fix enum default type. Correct type is int.
  - fix enum { FOO = 1 } syntax. 
0.0225 2017-07-19
  - add SPVM::Array::Byte::get_elements method
  - add SPVM::Array::Short::get_elements method
  - add SPVM::Array::Int::get_elements method
  - add SPVM::Array::Long::get_elements method
  - add SPVM::Array::Float::get_elements method
  - add SPVM::Array::Double::get_elements method
0.0224 2017-07-19
  - fix memory leak bugs. fix reference count.
0.0223 2017-07-18
  - fix hash segmentation fault bug when many hash is created.
0.0222 2017-07-18
  - add SPVM::Object::set
  - add SPVM::Object::get
  - rename SPVM::byte_array to SPVM::new_byte_array
  - rename SPVM::short_array to SPVM::new_short_array
  - rename SPVM::int_array to SPVM::new_int_array
  - rename SPVM::long_array to SPVM::new_long_array
  - rename SPVM::float_array to SPVM::new_float_array
  - rename SPVM::double_array to SPVM::new_double_array
  - rename SPVM::string_raw to SPVM::new_string_raw
  - rename SPVM::string to SPVM::new_string
  - rename SPVM::object to SPVM::new_object
0.0221 2017-07-15
  - fix && not working bug
  - fix || not working bug
  - fix ! not working  bug
0.0220 2017-07-14
  - Support array return type in SPVM::call_sub
0.0219 2017-07-13
  - Support constant floating point E expression
    0.5E3
    0.5e3
    0.5E+3
    0.5e+3
    0.5E-3
    0.5e-3
  - add SPVM::string function
  - add SPVM::string_raw function
0.0218 2017-07-13
  - Fix float culcuration bugs
  - add SPVM::byte_array, SPVM::short_array, SPVM::long_array, SPVM::float_array, SPVM::double_array function
    to create SPVM array object.
0.0217 2017-07-12
  - Support SPVM::int_array([1, 2, 3]) function
    This values can be passed to SPVM function.
0.0216 2017-07-12
  - Fix constant sign is not initialized bug
0.0215 2017-07-11
  - Support while (my $var = 3) { ... }
  - Support long min constant -9223372036854775808
  - Fix array malloc bug
0.0214 2017-07-11
  - Fix for statement segmentaion fault bug
  - VAR = TERM return VAR. For example, allow the syntax "if (my $error = $@) { ... }
  - Fix if condition (byte, short, long, float) bugs.
0.0213 2017-07-10
  - Fix MANIFEST
0.0212 2017-07-10
  - Fix hex literal bug. 0xFFFFFFFFFFFFFFFFL is OK.
  - Fix bit shift bugs. <<, >>, >>> work well now.
0.0211 2017-07-08
  - Fix if statement condition not working bugs
  - try {  } catch () { } syntax is replaced with eval { }; if ($@) { ... } syntax.
0.0210 2017-07-08
  - Fix reference count bugs
0.0209 2017-07-07
  - len $nums is replaced with @$nums
  - $nums[0] is replaced with $nums->[0]
  - $obj{x} is replaced with $obj->{x}
0.0208 2017-07-06
  - add die logic when 32 bit Perl
  - add several SPVM internal functions
0.0207 2017-06-30
  - Fix amd64 segfault bug.
0.0206 2017-06-20
  - Argument and return value become normal SV which have IV or NV.
    # Example
    my $total = SPVM::MyModule2::foo(3, 5);
    print $total . "\n";

0.0205 2017-06-29
  - Only support 64 bit Perl.
    In 32 bit Perl, 64 bit integer is not supported. This means that Perl can not express 64 bit integers on source code.
0.0204 2017-06-28
  - add env interface. This is similar as JAVA JNI
0.0203 2017-06-26
  - build SPVM using same CCFLAG as Perl itself
0.0202 2017-06-25
  - use same CCFLAG in Makefile.PL
0.0201 2017-06-20
  - fix memset 0 bug
0.02 2017-06-20
  - improve XS type convertion logic
0.01 2017-06-17(DEVELOPMENT RELEASE
	- Fisrt development release
