SPVMエクスチェンジAPI仕様 1.0 ベータ

# SPVMエクスチェンジAPI仕様 1.0ベータ

## SPVMエクスチェンジAPI仕様

SPVMエクスチェンジAPI仕様がこのドキュメントには記述されています。SPVMは、1.0のリリースに向けて、ベータテスト中です。SPVMエクスチェンジAPI仕様は、警告なく変更されることがあります。

最終更新日 2019年4月25日

## 目次

## SPVMエクスチェンジAPIとは

SPVMエクスチェンジAPIとは、PerlとSPVMのデータ構造を変換、PerlからSPVMのサブルーチンを呼び出すためのAPIのことです。

- Perlの数値や文字列や配列などのデータ構造をSPVMのデータ構造に変換
- SPVMのデータ構造をPerlの数値や文字列や配列などのデータ構造に変換
- SPVMのサブルーチンを呼び出す
- SPVMのサブルーチンを呼び出すためのPerlモジュールとの紐づけ

SPVMで作成されたモジュールは、コンパイル終了後に、Perlのモジュールとして、そのまま実行できるようになります。

## Perlのデータ構造をSPVMのデータ構造に変換する

### SPVM::Byte->new - Perlのスカラ値をSPVMのSPVM::Byte型に変換

SPVM::Byte->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Byte型に変換できます。

    my $spvm_byte = SPVM::Byte->new(98);

Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのbyte型に変換され、その値が、SPVM::Byteのnewメソッドに渡され、SPVM::Byte型のオブジェクトが返されます。

    (int8_t)SvIV(sv_value)

### SPVM::Short->new - Perlのスカラ値をSPVMのSPVM::Short型に変換

SPVM::Short->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Short型に変換できます。

    my $spvm_short = SPVM::Short->new(9800);

Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのshort型に変換され、その値が、SPVM::Shortのnewメソッドに渡され、SPVM::Short型のオブジェクトが返されます。

    (int16_t)SvIV(sv_value)

### SPVM::Int->new - Perlのスカラ値をSPVMのSPVM::Int型に変換

SPVM::Int->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Int型に変換できます。

    my $spvm_int = SPVM::Int->new(100000);

Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのint型に変換され、その値が、SPVM::Intのnewメソッドに渡され、SPVM::Int型のオブジェクトが返されます。

    (int32_t)SvIV(sv_value)

### SPVM::Long->new - Perlのスカラ値をSPVMのSPVM::Long型に変換

SPVM::Long->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Long型に変換できます。

    my $spvm_long = SPVM::Long->new(98);

Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのlong型に変換され、その値が、SPVM::Longのnewメソッドに渡され、SPVM::Long型のオブジェクトが返されます。

    (int64_t)SvIV(sv_value)

### SPVM::Float->new - Perlのスカラ値をSPVMのSPVM::Float型に変換

SPVM::Float->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Float型に変換できます。

    my $spvm_float = SPVM::Float->new(2.5);

Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのfloat型に変換され、その値が、SPVM::Floatのnewメソッドに渡され、SPVM::Float型のオブジェクトが返されます。

    (float)SvNV(sv_value)

### SPVM::Double->new - Perlのスカラ値をSPVMのSPVM::Double型に変換

SPVM::Double->newメソッドを使うと、Perlのスカラ値をSPVMのSPVM::Double型に変換できます。

    my $spvm_double = SPVM::Double->new(2.5);

Perlのスカラ値は、perlapiとC99の型変換による以下の変換によって、SPVMのdouble型に変換され、その値が、SPVM::Doubleのnewメソッドに渡され、SPVM::Double型のオブジェクトが返されます。

    (double)SvNV(sv_value)

### Perlの配列リファレンスをSPVMのbyte[]型に変換

SPVM::new_barray関数を使うと、Perlの配列リファレンスをSPVMのbyte[]型に変換することができます。

    my $spvm_nums = SPVM::new_barray([1, 2, 3]);

第一引数に配列のリファレンスを受け取ります。

配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのbyte型に変換されます。

    (int8_t)SvIV(sv_value)

戻り値は、SPVMの「byte[]」型を表現した「SPVM::Data::Array」オブジェクトです。

第一引数が未定義値だった場合は、未定義値が返ります。

### Perlの配列リファレンスをSPVMのshort[]型に変換

SPVM::new_sarray関数を使うと、Perlの配列リファレンスをSPVMのshort[]型に変換することができます。

    my $spvm_nums = SPVM::new_sarray([1, 2, 3]);

第一引数に配列のリファレンスを受け取ります。

配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのshort型に変換されます。

    (int16_t)SvIV(sv_value)

戻り値は、SPVMの「short[]」型を表現した「SPVM::Data::Array」オブジェクトです。

第一引数が未定義値だった場合は、未定義値が返ります。

### Perlの配列リファレンスをSPVMのint[]型に変換

SPVM::new_iarray関数を使うと、Perlの配列リファレンスをSPVMのint[]型に変換することができます。

    my $spvm_nums = SPVM::new_iarray([1, 2, 3]);

第一引数に配列のリファレンスを受け取ります。

配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのint型に変換されます。

    (int32_t)SvIV(sv_value)

戻り値は、SPVMの「int[]」型を表現した「SPVM::Data::Array」オブジェクトです。

第一引数が未定義値だった場合は、未定義値が返ります。

### Perlの配列リファレンスをSPVMのlong[]型に変換

SPVM::new_larray関数を使うと、Perlの配列リファレンスをSPVMのlong[]型に変換することができます。

    my $spvm_nums = SPVM::new_larray([1, 2, 3]);

第一引数に配列のリファレンスを受け取ります。

配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのlong型に変換されます。

    (int64_t)SvIV(sv_value)

戻り値は、SPVMの「long[]」型を表現した「SPVM::Data::Array」オブジェクトです。

第一引数が未定義値だった場合は、未定義値が返ります。

### Perlの配列リファレンスをSPVMのfloat[]型に変換

SPVM::new_farray関数を使うと、Perlの配列リファレンスをSPVMのfloat[]型に変換することができます。

    my $spvm_nums = SPVM::new_farray([1, 2, 3]);

第一引数に配列のリファレンスを受け取ります。

配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのfloat型に変換されます。

    (float)SvNV(sv_value)

戻り値は、SPVMの「float[]」型を表現した「SPVM::Data::Array」オブジェクトです。

第一引数が未定義値だった場合は、未定義値が返ります。

### Perlの配列リファレンスをSPVMのdouble[]型に変換

SPVM::new_darray関数を使うと、Perlの配列リファレンスをSPVMのdouble[]型に変換することができます。

    my $spvm_nums = SPVM::new_darray([1, 2, 3]);

第一引数に配列のリファレンスを受け取ります。

配列のリファレンスのそれぞれの要素の値は、Perlのスカラ値から、perlapiとC99の型変換による以下の変換によって、SPVMのdouble型に変換されます。

    (double)SvNV(sv_value)

戻り値は、SPVMの「double[]」型を表現した「SPVM::Data::Array」オブジェクトです。

第一引数が未定義値だった場合は、未定義値が返ります。