Easy C/C++ Binding using SPVM
I introduce Easy C/C++ Binding using SPVM . In Perl, C/C++ binding is very very hard work. If you use SPVM, the work become very easy.
If You don't yet know SPVM itself, See SPVM Document at first.
SPVM Module:
# lib/SPVM/MyMathNative.spvm package MyMathNative { # Sub Declaration sub sum ($nums : int[]) : native int; }
C Source File:
// lib/SPVM/MyMathNative.native/MyMathNative.c #includeint32_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";
You maybe use XS or Inline::C or FFI to bind C/C++ library from now.
Today addition, You can select SPMV to bind C/C++.
If you learn more, see the following.
SPVM is before 1.0 under development! I will change implementation and specification without warnings.
Leave a comment