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

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";

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.

Easy C/C++ Binding using SPVM

SPVM is before 1.0 under development! I will change implementation and specification without warnings.

Leave a comment

About Yuki Kimoto

user-pic I'm Perl Programmer. I LOVE Perl. I want to contribute Perl community and Perl users.