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