View on
MetaCPAN
search.cpan.org is shutting down
For details read Perl NOC. After June 25th this page will redirect to MetaCPAN.org
Yuki Kimoto > SPVM-0.0221 > SPVM

Download:
SPVM-0.0221.tar.gz

Dependencies

Annotate this POD

CPAN RT

New  5
Open  2
View/Report Bugs
Module Version: 0.0221   Source   Latest Release: SPVM-0.0339

NAME ^

SPVM - Fast calculation, GC, static typing, VM with perlish syntax

SPVM is under developing! I will change implementation and specification without warnings.

SYNOPSIS ^

  use FindBin;
  use lib "$FindBin::Bin/lib";

  use SPVM 'MyModule2';
  
  my $total = SPVM::MyModule2::foo(3, 5);
  print $total . "\n";

Module file

  # lib/SPVM/MyModule1.spvm
  package MyModule1 {
    has x : int;
    has y : int;
    
    sub sum ($a : int, $b : int) : int {
      
      my $total = $a + $b;
      
      return $total;
    }
  }
  
  # lib/SPVM/MyModule2.spvm
  use MyModule1;
  package MyModule2 {
    
    sub foo ($a : int, $b : int) : int {
      
      my $total = ($a * $b) + MyModule1::sum(2, 4);
      
      return $total;
    }
  }

If you want to know more syntax, see solo/SPVM/Test.spvm.

If you want to know SPVM language, see solo/README.md

DESCRIPTION ^

Do you need faster Perl? SPVM provides fast calculation to Perl.

SPVM SYNTAX ^

Type

Numeric type

Numeric types are byte, short, int, long, float, double.

  byte    signed integer          1byte
  short   signed integer          2byte
  int     signed integer          4byte
  long    signed integer          8byte
  float   floating-point number   4byte
  double  floating-point number   8byte

Declaration

  my $value : byte;
  my $value : short;
  my $value : int;
  my $value : long;
  my $value : float;
  my $value : double;

String type

String type is string.

This is same as byte[] at internal data structure.

Declaration

  my $string : string;

Reference type

Reference types are `array` and `object`.

Object type

    PackageName

Declaration

    my $object : PackageName;

Array type

  byte[]   byte array
  short[]  short array
  int[]    int array array
  long[]   long array
  float[]  float array
  doube[]  double array
  PackageName[] object array

Declaration

  my $values : byte[];
  my $values : short[];
  my $values : int[];
  my $values : long[];
  my $values : float[];
  my $values : double[];
  my $values : PackageName[];

Multiple array type

  my $values : byte[][];
  my $values : short[][];
  my $values : int[][];
  my $values : long[][];
  my $values : float[][];
  my $values : double[][];
  my $values : PackageName[][];

  my $values : byte[][][];
  my $values : short[][][];
  my $values : int[][][];
  my $values : long[][][];
  my $values : float[][][];
  my $values : double[][][];
  my $values : PackageName[][][];

Type inference

If the type of right value is known, the type of left value is automatically decided.

  # Type of $value2 is byte.
  my $value1 : byte;
  my $value2 = $value1;
  
  # Type of $values2 is int[]
  my $values1 = malloc int[3];
  my $values2 = $values1;
  
  # Type of $object2 is PackageName
  my $object1 = malloc PackageName
  my $object2 = $object1;

Array

Create array

Array is created by malloc. Elements values is not initialized.

  my $nums = malloc byte[3];
  my $nums = malloc short[3];
  my $nums = malloc int[3];
  my $nums = malloc long[3];
  my $nums = malloc float[3];
  my $nums = malloc double[3];

Get array length

  my $len = @$nums;
  my $len = @{$nums};

Get and set array element

  # Get
  my $num = $nums->[0];
  
  # Set
  $nums->[0] = 5;

Condition branch

  if (1) {
    
  }
  elsif (2) {
    
  }
  else {
    
  }

Loop

for

  my $nums = malloc int[10];
  for (my $i = 0; $i < @$nums; $i++) {
    $nums->[$i] = 0;
  }

while

  my $nums = malloc int[10];
  my $i = 0;
  while ($i < @$nums) {
    $nums->[$i] = 0;
  }

Constant

Constant type

Type of constant default integral value is `int`.

    # int type
    1;
    3;

Type of constant default floating-point value is `double`.

    # double
    1.2
    5.3

Type of constant is specified by type specifier.

    # long
    3L
    
    # float
    3.2f
    
    # double
    3.2d

Name

Package name

Package name is a combination of alphabets, numbers, and `::`. Numbers should not appear as the first character. `_` can't be used in class name.

    # OK
    Foo
    Foo::Bar
    Foo1::Bar1
    
    # Not OK
    1Foo
    Foo::2Bar
    Foo_Bar;

Subroutine name

Subroutine name is a combination of alphabets, numbers, and `_` separators. Continual `_`(For example `__`) can't be used in subroutine name.

    # OK
    foo
    foo1
    foo_bar
    
    # Not OK
    1foo
    foo__bar

Field name

Field name is a combination of alphabets, numbers, and `_` separators. Continual `_`(For example `__`) can't be used in field name.

    # OK
    foo
    foo1
    foo_bar
    
    # Not OK
    1foo
    foo__bar

Absolute name

Absolute name is combination of package name and subroutine name, or package name and field name.

    PackageName1::foo
    PackageName1::PackageName2::foo_bar

Limitation

Object can't have object and array of object.

If I have idea to implement weaken reference and implement weaken reference, this limitation is removed.

FUNCTIONS

byte_array

Create byte array

  my $array = SPVM::byte_array([1, 2, 3]);

short_array

Create short array

  my $array = SPVM::short_array([1, 2, 3]);

int_array

Create int array

  my $array = SPVM::int_array([1, 2, 3]);

long_array

Create long array

  my $array = SPVM::long_array([1, 2, 3]);

float_array

Create float array

  my $array = SPVM::float_array([1, 2, 3]);

double_array

Create double array

  my $array = SPVM::double_array([1, 2, 3]);

string_raw

Create byte array from not decoded Perl string. This function is faster than SPVM::string because copy is not executed.

  my $array = SPVM::string_raw("AGTCAGTC");

string

Create byte array from decoded Perl string.

  my $array = SPVM::string("‚ ‚¢‚¤‚¦‚¨");

FAQ

AUTHOR ^

Yuki Kimoto <kimoto.yuki@gmail.com<gt>

CONTRIBUTERS ^

COPYRIGHT AND LICENSE ^

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.

syntax highlighting: