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