sparky
Posts: 44
Joined: Thu Jun 23, 2016 3:06 pm

Awesome: Go Is Now A First Class Citizen

Wed Dec 07, 2016 9:43 pm

Go (golang) is used in solbuild (the Solus package build system) instead of python.

For all of us that don't use Google+ here Ikey's official point of view:
There are a few choices as to why we'd use C. Primarily it involves providing a stable ABI that others can hook into, C is undisputed when it comes to this. Then there is the question of available tooling, there is some amazing tooling for compliance & static analysis with C.

Lastly, GTK is C. So it's one of the reasons to limit the choice in languages. By doing so others are able to provide Budgie applets in a number of languages in a stable well defined manner.

See https://github.com/budgie-desktop/budgi ... issues/501 for full details.

We've long used Python in Solus, as it's always been the "done thing". However as time goes by, using Python becomes more and more frustrating. It lacks first class language tools, and comes with the distinct issue that it is scripting language, and no matter how hard you secure it, it's very easy to go boom at runtime. It makes development of lower level tooling quite dangerous (nuking directories while writing an installer..)

We're using Go for tools. It's a compiled language, and is ridiculously faster than Python. It lends itself to what we need to do, yet it can still be a useful systems language by not dampening the language and making it agnostic like Python or Java. We can still use syscalls for example.

> And finally, what's the point of using Go or Python when you can also do it in a system-level languaje like C or Rust that are even faster?

Bit of an invalid comparison. While you can "go run" a .go file, "proper" Go projects are first class executables and compiled as such. Python is a scripting language, Go is a programming language.

As for Rust, it's taking too long to solve fundamental issues, and only very recently Cargo was able to verify assets during fetch. We have to think from a packaging perspective, which made Rust a huge no go from a security standpoint. As bad as vendoring in golang is, we can at least vendor and build in a networkless environment.

We use C where we really need it, systems level, or ABI compatibility. Or in the rare case we need a tightly controlled leak free environment, and for example need to `execvp`.
For the one's that want to build Go GUI applications: here some links to libraries I'm using:

GTK3: https://github.com/gotk3/gotk3
(it's a more up-to-date repository of: https://github.com/conformal/gotk3)
GTK3: https://github.com/andlabs/ui
(it's a cross-platform UI library; for different programming languages there is: https://github.com/andlabs/libui)

A very good list of Go frameworks, libraries and software: http://awesome-go.com
(here is the repository: https://github.com/avelino/awesome-go)

There is even a fully-featured window manager written in Go: https://github.com/BurntSushi/wingo

Don't be shy to post more awesome links for... Go.

Return to “General Chit-Chat”