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