Inline::Go
Use inline Go code within your Perl 6 source code. The project has the following ambitious goals to achieve:
- Parse Go code using Perl 6 grammars with test suite taking directly from Go language specification.
- Transform Go functions and classes to be usable within Perl 6.
- Provide a simple and robust way to take advantage of Go groutines in Perl 6.
Note: This currently a totally experimental module. Please do not use on a production system.
The module is currently using simple regular expression to find exported go
functions signatures with a simple Go-to-Perl-6 type mapping. The Perl 6
NativeCall Go function wrapper is added via an evil EVAL
into the current
object via a role (to support multiple objects).
Example
use v6.c; my $code = ' package main import ("C"; "fmt") //export Add_Int32 func Add_Int32(a int, b int) int { return a + b } //export Hello func Hello() { fmt.Println("Hello from Go!") } func main() { } '; my $go = Inline::Go.new( :code( $code ) ); $go.import-all; $go.Hello; say $go.Add_Int32(1, 2);
For more examples, please see the examples folder.
Installation
Please install the Go language toolchain from here. You need at least Go 1.5 or later.
On windows, you need the gcc toolchain. Luckily you can have that easily by installing Strawberry Perl.
Install it using zef (a module management tool bundled with Rakudo Star):
$ zef install Inline::Go
Testing
- To run tests:
$ prove -ve "perl6 -Ilib"
- To run all tests including author tests (Please make sure Test::Meta is installed):
$ zef install Test::META
$ AUTHOR_TESTING=1 prove -e "perl6 -Ilib"
See Also
Author
Ahmad M. Zawawi, azawawi on #perl6
License
MIT License