0.0433 2018-05-08
  - Change IO::File::write, IO::Socket::write to 
      sub write : int ($self : self, $buffer : string, $legnth : int);
  - add fileno to SPVM::IO::Socket
  - add SPVM::IO::Select
  - remove SPVM::set_exception_undef
  - add SPVM::set_exception
  - add SPVM::exception
  - add shutdown, close to IO::Socket
  - add SPVM::ByteList, SPVM::ShortList, SPVM::IntList, SPVM::LongList, SPVM::FloatList, SPVM::DoubleList
  - remove SPVM::CORE::list function
  - rename memcpy to memcpyb
  - rename memmove to memmoveb
  - add memcpys, memcpyi, memcpyl, memcpyf, memcpyd
  - add memmoves, memmovei, memmovel, memmovef, memmoved
0.0432 2018-04-29
  - Allow lower case package variable name and allow upper case lexical variable name
    This is same implementation as Perl
0.0431 2018-04-27
  - move time function to SPVM::Time module
    because time module need to define _XOPEN_SOURCE for thread safe portability on unix/linux and Windows/minGW
  - add Time::localtime, Time::gmtime
  - add #define _XOPEN_SOURCE if needed
  - add strftime, strptime, mktime, timegm to SPVM::Time
  - remove fread, fwrite, fopen ,fclose, fseek, fgets, fgets_chomp, slurp_file. Thease functions is moved to SPVM::IO::File
  - implement SPVM::IO::File
  - add chomp function
  - remove gets_chomp
  - rename gets to readline
0.0430 2018-04-24
  - add SPVM::hash function
  - add SPVM::list function
  - fix any object return value bug
0.0429 2018-04-23
  - LICENSE is changed from MIT to same one as Perl.
    because SPVM is cpan module and SPVM want to use glibc code.
  - add rand function
  - SPVM::call_sub can receive decoded string
  - add stringify overload to SPVM::Data::Array
  - SPVM::call_sub can receive numeric array
  - SPVM::call_sub can receive string array
  - add to_strs to SPVM::Data::Array
0.0428 2018-04-22
  - rename new_list to list
  - rename new_hash to hash
  - add contains function
  - add index function
  - add memcpy function
  - add memmove function
  - add replace function
  - add replace_all function
  - fix native distribution make dependency bugs
  - fix env->pkgvar_id segfault bugs
  - rename SPVM::Socket to SPVM::IO::Socket
  - add SPVM_BFIELD macro
  - add SPVM_SFIELD macro
  - add SPVM_IFIELD macro
  - add SPVM_LFIELD macro
  - add SPVM_FFIELD macro
  - add SPVM_DFIELD macro
  - add SPVM_OFIELD macro
  - add SPVM_SET_BFIELD macro
  - add SPVM_SET_SFIELD macro
  - add SPVM_SET_IFIELD macro
  - add SPVM_SET_LFIELD macro
  - add SPVM_SET_FFIELD macro
  - add SPVM_SET_DFIELD macro
  - add SPVM_SET_OFIELD macro
  - add SPVM_BPKGVAR macro
  - add SPVM_SPKGVAR macro
  - add SPVM_IPKGVAR macro
  - add SPVM_LPKGVAR macro
  - add SPVM_FPKGVAR macro
  - add SPVM_DPKGVAR macro
  - add SPVM_OPKGVAR macro
  - add SPVM_SET_BPKGVAR macro
  - add SPVM_SET_SPKGVAR macro
  - add SPVM_SET_IPKGVAR macro
  - add SPVM_SET_LPKGVAR macro
  - add SPVM_SET_FPKGVAR macro
  - add SPVM_SET_DPKGVAR macro
  - add SPVM_SET_OPKGVAR macro
  - add lc, uc, lcfirst, ucfirst functions
  - rename interface_t to callback_t
0.0427 2018-04-17
  - add getenv function
  - add SPVM::Errno module
  - Errno tests become more portable
  - add strerror function
0.0426 2018-04-15
  - --no-as-needed is not portable. so I remove it again.
  - Create SPVM::Math module and math functions is moved to SPVM::Math.
0.0425 2018-04-12
  - add dl_error message
  - add -Wl,--no-as-needed for newer Ubuntu.
0.0424 2018-04-09
  - add get_ext to SPVM::Builder::Config
  - add set_ext to SPVM::Builder::Config
  - config file is required always in native
  - source extension become always one
  - If config file modified time is newer than object file, compile is done
  - fix FreeBSD getc bug. getc is replaced with fgetc
0.0423 2018-04-08
  - SPVM_DIE don't need to write "at %s line %d"
0.0422 2018-04-06
  - rename croak keyword to die
  - rename cache of SPVM::Builder::Config to get_cache
  - rename quiet of SPVM::Builder::Config to get_quiet
  - rename SPVM_CROAK macro to SPVM_DIE
  - SPVM_DIE can receive sprintf format
      
      SPVM_DIE("Hello %s at %s line %d", "foo", "bar.c", __LINE__);
  - dependency of dll is detected automatically
0.0421 2018-04-05
  - add quiet to SPVM::Builder::Config
  - add set_quiet to SPVM::Builder::Config
  - add cache to SPVM::Builder::Config
  - add set_cache to SPVM::Builder::Config
  - fix spvm_build/include directory not detected bug
  - add set_cache to SPVM::Builder::Config
  - add new_cpp to SPVM::Builder::Config
  - fix no needed object file is compiled bug
0.0420 2018-04-03
  - fix before relase bugs
0.0419 2018-04-03
  - add env->alloc_memory_block_zero
  - add env->free_memory_block
  - add socket modules

  - support oarray argument from SPVM::call_sub
  - change SPVM::new_oarray, SPVM::new_varray, SPVM::new_varray_from_bin first argument to array type
    [Before]"Point"
    [After]"Point[]"
  - SPVM::new_marray is merged to SPVM::new_oarray
  - add split core function
  - add env->remove_mortal function
  - add new_default method to SPVM::Builder::Config

0.0418 2018-03-01
  - fix t/exe/exe.t bug
0.0417 2018-03-01
  - add private and public descriptor to sub declaration
  - add allow syntax to allow to accsess to private things.
    
    allow TestCase::Allow;
  - rename SPVM::Stringer::to_string to to_str
  - fix spvmcc compile bugs

0.0416 2018-02-19
  - native sub routine prefix is changed from SPVM_NATIVE_ to SPNATIVE__
    // Before
		int32_t SPVM_NATIVE_TestCase__Extension__bpkgvar_test(SPVM_ENV* env, SPVM_VALUE* stack) {
		
		}
    // After
		int32_t SPNATIVE__TestCase__Extension__bpkgvar_test(SPVM_ENV* env, SPVM_VALUE* stack) {
		
		}
  - add refcnt keyword
  - remove ref_count function
  - temporary variable is freed after end of statement or end of condition
  - reduce lexical variable memory area to minimal size
  - fix isweak and unweaken bugs
  - syntax tree become more assign statements
  - comparison operator and logical operator become expression and return value
0.0415 2018-02-06
  - remove weken array, unweaken array, isweak array because of array elements move operation performance
  - add fgets
  - add fgets_chomp
  - Exception in destructor is changed to warning
  - add ref_count core function
  - fix precompile double, float constant precice and sign bug
0.0414 2018-01-29
  - add sequencial operator
    # $z is 3
    my $z = (1, 2, 3);
  - add env->set_pointer
  - add fopen
  - add fclose
  - add fread
  - add fwrite
  - improve error message
  - precompile anon sub is always compiled
  - eval{ } need semicolon. Must be eval { };
  - add chacaters position in compiler error message
    Unexpected token "byte" at /home/kimoto/labo/SPVM/t/default/lib/TestCase/CompileError/Assign/ConstToNoConst.spvm line 5:30
  - add slurp_file
  - fix package var inline expansion bug
  - remove SPVM::BuildDir module, and document SPVM_BUILD_DIR environment variable and default build directory become script diretory/spvm_build
  - fix POSIX barewaord test bugs
0.0413 2018-01-22
  - add replaceb
  - add replaces
  - add replacei
  - add replacel
  - add replacef
  - add replaced
  - add replaceo
  - rename copy_byte_array to copy_barray
  - rename copy_short_array to copy_sarray
  - rename copy_int_array to copy_iarray
  - rename copy_long_array to copy_larray
  - rename copy_float_array to copy_farray
  - rename copy_double_array to copy_darray
  - rename copy_object_array to copy_oarray
  - rename copy_string to copy_str
  - add copy_strarray
  - add equals_strarray
  - fix bug SPVM::CORE is not basic type
  - anon sub precompile have some bugs, so I suppress it for a while
0.0412 2018-01-17
  - add oarray type to implement sort algorithm
  - fix native and precompile file path bug
  - add equals_barray core function
  - add equals_sarray core function
  - add equals_iarray core function
  - add equals_larray core function
  - add equals_farray core function
  - add equals_darray core function
  - add equals_oarray core function
  - add sortb core function
  - add sorts core function
  - add sorti core function
  - add sortl core function
  - add sortf core function
  - add sortd core function
  - add sorto core function
  - add reverseb core function
  - add reverses core function
  - add reversei core function
  - add reversel core function
  - add reversef core function
  - add reversed core function
  - add reverseo core function
  - add sliceb core function
  - add slices core function
  - add slicei core function
  - add slicel core function
  - add slicef core function
  - add sliced core function
  - add sliceo core function
  - add env->object_basic_type_id
  - add env->object_type_dimension
  - add SPVM::Stringer interface
  - add joinb
  - add joins
  - add joini
  - add joinl
  - add joinf
  - add joind
  - add joino
0.0411 2018-01-16
  - remove rest of list context @ error check becuase SPVM can not define list context correctly
0.0410 2018-01-16
  - Fix realese of 0.0409
0.0409 2018-01-16
  - remove new Foo[] {x, y, z} syntax. Use [(Foo)x, y, z] instead.
  - Simplify native source file and config path
    change Foo/Bar.native/Bar.c to Foo/Bar.native.c
    change Foo/Bar.native/Bar.config to Foo/Bar.native.config
  - add default include path spvm_build/include
  - add default library path spvm_build/lib
  - rename SPVM::Builder::C to SPVM::Builder::CC
0.0408 2018-01-11
  - remove list context @ error check becuase SPVM can not define list context correctly
  - fix string comparison operator undef occur exception
  - add new_list core func
  - add new_hash core func
  - add to_iarray to SPVM::List
  - add unweaken and isweak statement
  - fat camma left name become string literal
    x => 1, y => 2
0.0407 2018-01-08
  - Change SPVM::Bool to SPVM::JSON::Bool
  - rename interface descriptor to interface_t
  - remove floating point x % y
  - shift operation right operand is used directory
  - isa operator can check any object type
  - empty array init type become object[]
    my $objects = [];
0.0406 2018-01-04
  - add signbit CORE func
  - add signbitf CORE func
  - add specification some tests
0.0405 2018-12-28
  - fix operator precidence. more perlish.
  - can omit for init, inc part
    for (;CONDITION;) {
      
    }
  - fix % operator error message seg fault bug
  - support my declaration in while condition
    while (my $num = 1) {
      
    }
  - add type_name core func
  - fix native object return bug
  - in runtime, string type become byte array type
  - support isa numeric type and value type
  - cast is done in (byte[])$string instead of copy
0.0404 2018-12-18
  - support ascii escape '\x1F' syntax in character literal
  - support string literal excape character '\0' '\a'
  - support string literal ascii escape character
  - support unicode escape in string literal "\N{U+3042}\N{U+3044}\N{U+3046}"
0.0403 2018-12-17
  - fix line terminator
  - add __LINE__
  - add __FILE__
  - add __PACKAGE__
  - If . left and right is both constant string, concat them at compile time.
  - SPVM::Bool::new_true is renamed to SPVM::Bool::TRUE and this become singleton
  - SPVM::Bool::new_false is renamed to SPVM::Bool::FALSE and this become singleton
  - add TRUE core function
  - add FALSE core function
  - add SPVM::Hash
0.0402 2018-12-07
  - add package variable access native api
  
	  int8_t (*bpkgvar)(SPVM_ENV* env, int32_t pkgvar_id);
	  int16_t (*spkgvar)(SPVM_ENV* env, int32_t pkgvar_id);
	  int32_t (*ipkgvar)(SPVM_ENV* env, int32_t pkgvar_id);
	  int64_t (*lpkgvar)(SPVM_ENV* env, int32_t pkgvar_id);
	  float (*fpkgvar)(SPVM_ENV* env, int32_t pkgvar_id);
	  double (*dpkgvar)(SPVM_ENV* env, int32_t pkgvar_id);
	  void* (*opkgvar)(SPVM_ENV* env, int32_t pkgvar_id);
	  void (*set_bpkgvar)(SPVM_ENV* env, int32_t pkgvar_id, int8_t value);
	  void (*set_spkgvar)(SPVM_ENV* env, int32_t pkgvar_id, int16_t value);
	  void (*set_ipkgvar)(SPVM_ENV* env, int32_t pkgvar_id, int32_t value);
	  void (*set_lpkgvar)(SPVM_ENV* env, int32_t pkgvar_id, int64_t value);
	  void (*set_fpkgvar)(SPVM_ENV* env, int32_t pkgvar_id, float value);
	  void (*set_dpkgvar)(SPVM_ENV* env, int32_t pkgvar_id, double value);
	  void (*set_opkgvar)(SPVM_ENV* env, int32_t pkgvar_id, void* value);

  - add is_type native api

	  int32_t (*is_type)(SPVM_ENV*, void* object, int32_t basic_type_id, int32_t type_dimension);
  
  - add number-to-string convertion native api

	  void* (*i_to_str_raw)(SPVM_ENV* env, int32_t value);
	  void* (*i_to_str)(SPVM_ENV* env, int32_t value);
	  void* (*l_to_str_raw)(SPVM_ENV* env, int64_t value);
	  void* (*l_to_str)(SPVM_ENV* env, int64_t value);
	  void* (*f_to_str_raw)(SPVM_ENV* env, float value);
	  void* (*f_to_str)(SPVM_ENV* env, float value);
	  void* (*d_to_str_raw)(SPVM_ENV* env, double value);
	  void* (*d_to_str)(SPVM_ENV* env, double value);
  
  - add public document 1.0 beta
  - support hex floating point leteral
0.0401 2018-12-06
  - fix windows dinamic link warnings
0.04 2018-12-06
  - Change many native api names

	  void* exception_object;
	  void* native_mortal_stack;
	  void* native_mortal_stack_top;
	  void* native_mortal_stack_capacity;
	  void* runtime;
	  void* runtime_package_vars_heap_offset;
	  void* object_header_byte_size;
	  void* object_ref_count_offset;
	  void* object_basic_type_id_offset;
	  void* object_type_dimension_offset;
	  void* object_array_length_offset;
	  void* byte_object_basic_type_id;
	  void* short_object_basic_type_id;
	  void* int_object_basic_type_id;
	  void* long_object_basic_type_id;
	  void* float_object_basic_type_id;
	  void* double_object_basic_type_id;
	  int32_t (*memory_blocks_count)(SPVM_ENV* env);
	  void* (*new_env)(SPVM_ENV*);
	  void (*free_env)(SPVM_ENV*);
	  int32_t (*len)(SPVM_ENV*, void*);
	  int8_t* (*belems)(SPVM_ENV*, void*);
	  int16_t* (*selems)(SPVM_ENV*, void*);
	  int32_t* (*ielems)(SPVM_ENV*, void*);
	  int64_t* (*lelems)(SPVM_ENV*, void*);
	  float* (*felems)(SPVM_ENV*, void*);
	  double* (*delems)(SPVM_ENV*, void*);
	  void* (*oelem)(SPVM_ENV*, void*, int32_t index);
	  void (*set_oelem)(SPVM_ENV*, void*, int32_t index, void* value);
	  int32_t (*field_id)(SPVM_ENV*, const char*, const char*, const char*);
	  int8_t (*bfield)(SPVM_ENV*, void*, int32_t);
	  int16_t (*sfield)(SPVM_ENV*, void*, int32_t);
	  int32_t (*ifield)(SPVM_ENV*, void*, int32_t);
	  int64_t (*lfield)(SPVM_ENV*, void*, int32_t);
	  float (*ffield)(SPVM_ENV*, void*, int32_t);
	  double (*dfield)(SPVM_ENV*, void*, int32_t);
	  void* (*ofield)(SPVM_ENV*, void*, int32_t);
	  void* (*pointer)(SPVM_ENV*, void*);
	  void (*set_bfield)(SPVM_ENV*, void*, int32_t, int8_t);
	  void (*set_sfield)(SPVM_ENV*, void*, int32_t, int16_t);
	  void (*set_ifield)(SPVM_ENV*, void*, int32_t, int32_t);
	  void (*set_lfield)(SPVM_ENV*, void*, int32_t, int64_t);
	  void (*set_ffield)(SPVM_ENV*, void*, int32_t, float);
	  void (*set_dfield)(SPVM_ENV*, void*, int32_t, double);
	  void (*set_ofield)(SPVM_ENV*, void*, int32_t, void*);
	  int32_t (*sub_id)(SPVM_ENV*, const char*, const char*, const char*);
	  int32_t (*method_sub_id)(SPVM_ENV*, void* object, const char*, const char*);
	  int32_t (*basic_type_id)(SPVM_ENV*, const char*);
	  int32_t (*pkgvar_id)(SPVM_ENV* env, const char* package_name, const char* pkgvar_name, const char* signature);
	  int32_t (*field_offset)(SPVM_ENV*, int32_t);
	  void* (*new_obj_raw)(SPVM_ENV*, int32_t);
	  void* (*new_barray_raw)(SPVM_ENV*, int32_t);
	  void* (*new_sarray_raw)(SPVM_ENV*, int32_t);
	  void* (*new_iarray_raw)(SPVM_ENV*, int32_t);
	  void* (*new_larray_raw)(SPVM_ENV*, int32_t);
	  void* (*new_farray_raw)(SPVM_ENV*, int32_t);
	  void* (*new_darray_raw)(SPVM_ENV*, int32_t);
	  void* (*new_oarray_raw)(SPVM_ENV*, int32_t, int32_t);
	  void* (*new_marray_raw)(SPVM_ENV*, int32_t, int32_t, int32_t);
	  void* (*new_varray_raw)(SPVM_ENV*, int32_t, int32_t);
	  void* (*new_str_raw)(SPVM_ENV* env, const char* bytes, int32_t length);
	  void* (*new_pointer_raw)(SPVM_ENV*, int32_t basic_type_id, void* ptr);
	  void* (*new_obj)(SPVM_ENV*, int32_t);
	  void* (*new_barray)(SPVM_ENV*, int32_t);
	  void* (*new_sarray)(SPVM_ENV*, int32_t);
	  void* (*new_iarray)(SPVM_ENV*, int32_t);
	  void* (*new_larray)(SPVM_ENV*, int32_t);
	  void* (*new_farray)(SPVM_ENV*, int32_t);
	  void* (*new_darray)(SPVM_ENV*, int32_t);
	  void* (*new_oarray)(SPVM_ENV*, int32_t, int32_t);
	  void* (*new_marray)(SPVM_ENV*, int32_t, int32_t, int32_t);
	  void* (*new_varray)(SPVM_ENV*, int32_t, int32_t);
	  void* (*new_str)(SPVM_ENV* env, const char* bytes, int32_t length);
	  void* (*new_pointer)(SPVM_ENV* env, int32_t basic_type_id, void* ptr);
	  void* (*exception)(SPVM_ENV* env);
	  void (*set_exception)(SPVM_ENV* env, void* exception);
	  int32_t (*ref_count)(SPVM_ENV* env, void* object);
	  void (*inc_ref_count)(SPVM_ENV* env, void* object);
	  void (*dec_ref_count)(SPVM_ENV* env, void* object);
	  void (*weaken)(SPVM_ENV* env, void** object_address);
	  int32_t (*isweak)(SPVM_ENV* env, void** object);
	  void (*unweaken)(SPVM_ENV* env, void** object_address);
	  void* (*concat)(SPVM_ENV* env, void* string1, void* string2);
	  void* (*create_stack_trace)(SPVM_ENV* env, void* excetpion, const char* package_name, const char* sub_name, const char* file, int32_t line);
	  int32_t (*call_sub)(SPVM_ENV* env, int32_t sub_id, SPVM_VALUE* args);
	  int32_t (*enter_scope)(SPVM_ENV* env);
	  void (*push_mortal)(SPVM_ENV* env, void* object);
	  void (*leave_scope)(SPVM_ENV* env, int32_t original_mortal_stack_top);
	  int32_t (*has_interface)(SPVM_ENV*, void* object, int32_t interface_basic_type_id);
  
  - Change many exchange api names

		SPVM::new_barray
		SPVM::new_sarray
		SPVM::new_iarray
		SPVM::new_larray
		SPVM::new_farray
		SPVM::new_darray
		SPVM::new_oarray
		
		$obj->to_elems
		$obj->to_str
		$obj->to_bin

0.0399 2018-12-05
  - SPVM_value field is changed to 
  
		union SPVM_value {
		  int8_t bval;
		  int16_t sval;
		  int32_t ival;
		  int64_t lval;
		  float fval;
		  double dval;
		  void* oval;
		  int8_t* bref;
		  int16_t* sref;
		  int32_t* iref;
		  int64_t* lref;
		  float* fref;
		  double* dref;
		};
  - pointer descriptor is renamed to pointer_t
  - revert function parenthes omit because not using core lib tests is fail
  - SPVM::Bool is loaded by default
  - SPVM::Bool, SPVM::Byte, SPVM::Short, SPVM::Int, SPVM::Long, SPVM::Float, SPVM::Double become immutable
0.0398 2018-12-04
  - reduce object size by reducing weaken information
  - env become thread safe
0.0397 2018-12-01
  - add if require statement
    if module loading is success, block is exists.
    
    if (require Foo) {
    
    }
    
0.0396 2018-11-30
  - add BEGIN block
  - change native api has_interface arguments
0.0395 2018-11-28
  - sub id, field id, package var id, basic type id, package id become start 0
  - valut_t type name rule is changed.
    for example
    Change SPVM::Point_d3 to SPVM::Point_3d
  - fix int literal out of range seg fault bug.
  - add rw, ro, rw descriptor to create field accessor
    has x : rw int;
  - add rw, ro, rw descriptor to create package variable accessor
    our $FOO : rw int;
  - setter and getter is inlined.
  - package become private by default except for anon sub
  - package variable become private by default
  - field become private by default
  - constant sub is inlined
  - simple constructor is inlined
0.0394 2018-11-24
  - reduce malloc count when object is created.
  - reduce object fields memory size.
0.0393 2018-11-20
  - add fat camma syntax
    "x", 1, "y", 2
    is same as
    "x" => 1, "y" => 2
0.0392 2018-11-20
  - add subroutine import syntax
    use Foo (bar, baz);
  - allow string index access
    my $char = $string->[0];
0.0392 2018-11-19
  - add copy_string;
  - add copy_byte_array;
  - add copy_short_array;
  - add copy_int_array;
  - add copy_long_array;
  - add copy_float_array;
  - add copy_double_array;
  - add copy_object_array;
  - add length keyword to get string length
  - don't allow @$foo in list context
0.0391 2018-11-17
  - field name become not conflict reserved words and core func names
  - rename Native Interface to Native API
  - rename SPVM::PerlAPI to SPVM::ExchangeAPI
  - add SPVM::Data::Package
  - add to_string to SPVM::Data::Array
  - add SPVM::Data::String for SPVM string type
  - add SPVM::new_string
  - add SPVM::new_string_from_binary
0.0390 2018-11-16
  - package variable must start upper case or contain ::
  - add SPVM::List module
  - add private private package variable
  - fix constant pool cache bug
  - support no parenthes sub
      INT8_MAX
      sin 0.5
  - string relative operator can receive byte array
    if ($bytes1 eq $bytes2) {
      
    }
  - concat operator can receive byte array
    $bytes1 . $bytes2
  - string type become real string type, instead of alias of const byte[]
  - rename SPVM::new_byte_array_string to SPVM::new_byte_array_from_binary.
    and recieve binary data instead of Perl internal string
  - rename new_value_t_array to new_value_array
  - add SPVM::new_value_array_from_binary
  - remove SPVM::set_array_elements
  - remove SPVM::set_array_elements_bin
  - add new_multi_array
  - rename SPVM::get_elements to SPVM::to_elements
  - rename SPVM::get_elements_bin to SPVM::to_binary
  - add to_elements to SPVM::Data::Array
  - add to_binary to SPVM::Data::Array
  - remove SPVM::to_elements
  - remove SPVM::to_binary
0.0389 2018-11-13
  - fix nested loop last bugs
  - fix nested loop next bugs
  - fix single quote escape sequence bug
0.0388 2018-11-10
  - add table switch
  - improve constant pool implementation
0.0387 2018-11-07
  - improve compile error check logic and fix some bugs.
  - SPVM don't support unnatural ccflags.
  - add global string pool
0.0386 2018-11-03
  - Extension can only allow one file.
  - spvmmcc create one exe file not depend sharaed library.
0.0385 2018-11-02
  - SPVM LICENSE is changed to MIT LICENSE
  
			MIT License

			Copyright (c) [2018] [Yuki Kimoto]

			Permission is hereby granted, free of charge, to any person obtaining a copy
			of this software and associated documentation files (the "Software"), to deal
			in the Software without restriction, including without limitation the rights
			to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
			copies of the Software, and to permit persons to whom the Software is
			furnished to do so, subject to the following conditions:

			The above copyright notice and this permission notice shall be included in all
			copies or substantial portions of the Software.

			THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
			IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
			FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
			AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
			LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
			OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
			SOFTWARE.
  - support variable length argument subroutine
      
      sub vaarg : void ($format : string, $nums : int[]...) { }

      vaarg("ddd", 20, 30);

0.0384 2018-10-31
  - remove ${$var} dereference syntax. use $$var always.
  - allow brace in variable ${foo}.
  - support variable expansion.
0.0383 2018-10-30
  - remove array list syntax. This syntax is very unnatural.
    [(1, 2), (3, 4)]

  - change new_fcomplex_array definition
    
      sub new_fcomplex_array : SPVM::Complex_f2[] ($re_values : float[], $im_values : float[]);
  
  - change new_dcomplex_array definition
  
      sub new_dcomplex_array : SPVM::Complex_d2[] ($re_values : double[], $im_values : double[]);
  
  - fix do string bugs. use open and eval string to load config file.

0.0382 2018-10-29
  - remove no needed runtime type check.
  - change sub signature
    [before](int)foo(int,int)
    [after]foo:int(int,int)
  - change field signature
    [before](int)foo
    [after]foo:int
  - change package variable signature
    [before](int)$FOO
    [after]$FOO:int
  - change get_package_var_id argument, and signature contain only type
    [before]int32_t SPVM_RUNTIME_API_get_package_var_id(SPVM_ENV* env, const char* package_name, const char* signature);
    [after]int32_t SPVM_RUNTIME_API_get_package_var_id(SPVM_ENV* env, const char* package_name, const char* package_var_name, const char* signature);
  - change get_field_id argument, and signature contain only type
    [before]int32_t SPVM_RUNTIME_API_get_field_id(SPVM_ENV* env, const char* package_name, const char* signature);
    [after]int32_t SPVM_RUNTIME_API_get_field_id(SPVM_ENV* env, const char* package_name, const char* field_name, const char* signature);
  - change get_sub_id argument, and signature contain only type
    [before]int32_t SPVM_RUNTIME_API_get_sub_id(SPVM_ENV* env, const char* package_name, const char* signature);
    [after]int32_t SPVM_RUNTIME_API_get_sub_id(SPVM_ENV* env, const char* package_name, const char* sub_name, const char* signature);
  - change get_sub_id_method_call argument, and signature contain only type
    [before]int32_t SPVM_RUNTIME_API_get_sub_id_method_call(SPVM_ENV* env, void* object, const char* signature);
    [after]int32_t SPVM_RUNTIME_API_get_sub_id_method_call(SPVM_ENV* env, void* object, const char* field_name, const char* signature);
  - support anon sub
    my $comparator = sub : int ($self : self, $x1 : object, $x2 : object) {
      ...;
    };
  - remove new sub syntax.
  - remove anon package syntax
  - support anon sub capture variable
    {
      my $capture1 = 7;
      my $capture2 = 10;
      my $anon_sub = [$capture1 : int, $capture2 : int] sub : int ($self : self, $x1 : object, $x2 : object) {
        print($capture1 . "\n");
        print($capture2 . "\n");

        $self->{capture1} = 5;
        
        print($capture1 . "\n");
        
        return -1;
      };
      
      $anon_sub->(undef, undef);
    }
  
0.0381 2018-10-24
  - remove directory path from runtime file name
  - reduce runtime constant pool size
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