Skip to content

azawawi/perl6-inline-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

9623506 · Dec 2, 2017

History

51 Commits
Dec 1, 2017
Dec 2, 2017
Dec 2, 2017
Nov 29, 2017
Dec 1, 2017
Dec 2, 2017
Nov 27, 2017
Nov 27, 2017
Dec 2, 2017
Dec 2, 2017
Nov 27, 2017

Repository files navigation

Inline::Go

Build Status Build status

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

About

Use Go code within Perl 6

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages