Some time ago I created a snap for
llgo. Snaps are a
relatively new packaging format; at the time I created the
initial snap for llgo, it was only possible to create them
confined by default. In particular, access to the user’s
filesystem was blocked by default, which is unhelpful for
a tool like a compiler. Because of that, the initial snap
did not expose the llgo compiler, only the llgoi interpreter.
Now there is the concept of “classic snaps”, which use the
snap packaging format but do not confine the application.
The resulting package is much more like what you would get
from a Debian package, but without the arcana.
I have released a new llgo classic snap, exposing the llgoi
interpreter, and the llgo compiler and “go” tool wrapper.
To install the llgo snap, run:
sudo snap install --classic llgo
The exposed “llgo” command is an alias for the go tool
wrapper, so you can just run:
$ llgo install <package>
$ llgo run /path/to/source.go
...
as you would with the standard go tool. The llgo compiler
itself can be invoked with the “llgo.compiler” command:
$ llgo.compiler -emit-llvm -S -o -o main.go
; ModuleID = 'main'
source_filename = "main"
target datalayout ...
The llgoi interpreter is still available, but as it is part
of the same snap it is no longer confined:
$ llgo.llgoi
(llgo) import "fmt"
(llgo) fmt.Println("hello, world")
hello, world
13
<nil>