SPVM - Fast Calculation and Easy C/C++ Binding with perlish syntax and static typing
SPVM is before 1.0 under development! I will change implementation and specification without warnings.
SPVM Module:
# lib/SPVM/MyMath.spvm package MyMath { # Sub Declaration sub sum ($nums : int[]) : int { # Culcurate total my $total = 0; for (my $i = 0; $i < @$nums; $i++) { $total += $nums->[$i]; } return $total; } }
Use SPVM Module from Perl
use FindBin; use lib "$FindBin::Bin/lib"; # Use SPVM module use SPVM 'MyMath'; # New SPVM int array my $sp_nums = SPVM::new_int_array([3, 6, 8, 9]); # Call SPVM subroutine my $total = SPVM::MyMath::sum($sp_nums); print $total . "\n";
If you know more SPVM syntax, see SPVM::Document::Specification.
If you know more Functions to convert Perl Data to SPVM Data, see SPVM::Document::DataConversionAPI.
# lib/SPVM/MyMathNative.spvm package MyMathNative { # Sub Declaration sub sum ($nums : int[]) : native int; }
C Source File;
// lib/SPVM/MyMathNative.native/MyMathNative.c #include <spvm_api.h> int32_t SPVM__MyMathNative__sum(SPVM_API* api, SPVM_API_VALUE* args) { // First argument SPVM_API_OBJECT* sp_nums = args[0].object_value; // Array length int32_t length = api->get_array_length(api, sp_nums); // Elements pointer int32_t* nums = api->get_int_array_elements(api, sp_nums); // Culcurate total int32_t total = 0; { int32_t i; for (i = 0; i < length; i++) { total += nums[i]; } } return total; }
Use Extension Module from Perl:
use FindBin; use lib "$FindBin::Bin/lib"; # Use SPVM module use SPVM 'MyMathNative'; # New SPVM int array my $sp_nums = SPVM::new_int_array([3, 6, 8, 9]); # Call SPVM subroutine my $total = SPVM::MyMathNative::sum($sp_nums); print $total . "\n";
If you know more SPVM Extension, see SPVM::Document::Extension.
If you know the APIs to manipulate SPVM data, see SPVM::Document::NativeAPI.
SPVM provide Fast Culcuration and Easy way to Bind C/C++ Language to Perl.
Fast calculation - The Perl's biggest weak point is the calculation performance. SPVM provides fast calculations.
GC - You don't need to care about freeing memory
Static typing - Static typing for performance
VM - Byte codes are generated so that you can run them on SPVM language
Perlish syntax - SPVM syntax is very similar to Perl
Perl module - SPVM function can be called from Perl itself.
SPVM is a language which is similar with Perl. SPVM is very similar to Perl, and you can write same syntax of Perl in most part.
SPVM communicate with Perl. You can call SPVM function directory from Perl.
SPVM is very fast and provide array data structure. Now SPVM array operation is about 6x faster.
At first, you can write SPVM module.
# lib/SPVM/MyModule1.spvm package MyModule1 { has x : int; has y : int; sub sum ($x : int, $y : int) : int { my $total = $x + $y; return $total; } }
This is same as Perl except SPVM have static type and has keyword.
has
You can define field by has keyword, and specify static type by : type.
: type
has x : int;
You can specify argument types and return type to subroutine by : type.
sub sum ($x : int, $y : int) : int { my $total = $x + $y; return $total; }
Let's save this file by the following name
lib/SPVM/MyModule1.spvm
If package name is MyModule1, file name must be SPVM/MyModule1.spvm.
MyModule1
SPVM/MyModule1.spvm
Extension is spvm. And you create SPVM directory.
spvm
SPVM
lib is normal directory.
lib
Next you can use SPVM subroutine from Perl.
use FindBin; use lib "$FindBin::Bin/lib"; use SPVM 'MyModule1'; my $total = SPVM::MyModule1::sum(3, 5); print $total . "\n";
At first, you add library path by FindBin and lib module.
use FindBin; use lib "$FindBin::Bin/lib";
Next, use SPVM module. MyModule1 is loaded.
use SPVM 'MyModule1';
And call SPVM subroutine. If SPVM subroutine absolute name is MyModule1::sum, you can call this subroutine by SPVM::MyModule1::sum.
MyModule1::sum
SPVM::MyModule1::sum
my $total = SPVM::MyModule1::sum(3, 5); print $total . "\n";
SPVM::Document::DataConversionAPI - SPVM data convertion functions.
List of SPVM functions:
new_byte_array
new_byte_array_data
new_byte_array_string
new_short_array
new_int_array
new_long_array
new_float_array
new_double_array
new_object_array_len
new_object
If you know Detail of SPVM Function, see SPVM::Document::DataConversionAPI.
SPVM::Document::LanguageSpecification - SPVM Language Specification
SPVM::Document::NativeInterface - SPVM Native Interface.
Native API is C level API. You can write programing logic using C language and SPVM Native API.
SPVM::Document::StandardFunction - SPVM Standard Function
SPVM::Document::StandardModule - SPVM Standard Module
SPVM::Document::Cookbook - SPVM Cookbook, advanced technique and many examples.
SPVM::Document::FAQ - Oftten asked question.
If you have problems or find bugs, comment to GitHub Issue.
SPVM(GitHub).
Yuki Kimoto <kimoto.yuki@gmail.com<gt>
akinomyoga (Koichi Murase)
[NAGAYASU Shinya
Reini Urban
chromatic
Kazutake Hiramatsu
Copyright (C) 2017 by Yuki Kimoto
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.16.3 or, at your option, any later version of Perl 5 you may have available.
To install SPVM, copy and paste the appropriate command in to your terminal.
cpanm
cpanm SPVM
CPAN shell
perl -MCPAN -e shell install SPVM
For more information on module installation, please visit the detailed CPAN module installation guide.