[Libguestfs] [PATCH nbdkit UNFINISHED] Add the ability to write plugins in golang.
Richard W.M. Jones
rjones at redhat.com
Wed Apr 15 17:04:26 UTC 2020
On Wed, Apr 15, 2020 at 05:27:07PM +0100, Daniel P. Berrangé wrote:
> On Fri, Apr 10, 2020 at 02:51:52PM +0100, Richard W.M. Jones wrote:
> > Similar to C, OCaml and Rust, this is not a plugin per se. Instead
> > it's more of a method and set of tests around writing plugins in
> > golang. They are standalone programs that compile into shared objects
> > that nbdkit can then load (so there is no "go plugin" between nbdkit
> > and the user plugin, unlike in scripting languages like Perl).
>
> Why did you choose this approach ?
Do you mean the design of constructing the .so file directly using
--buildmode=c-shared? I wasn't aware there was any other way to do
it. Should we use some kind of module loading instead?
> Looking at the code below there's the general boilerplate that
> will be approx the same for all plugins with cut+paste tedium
> across projects, and then there's the "interesting" code in
> test.go
>
> The methods in test.go though look quite unappealing from a
> Go programmer's POV, as the API contracts are full of CGo
> types and unsafe pointers.
>
> To make something that is attractive for Go programmers, I
> think it needs to hide all the low level CGo stuff entirely.
>
> Implementing a nbdkit plugin should require nothing more
> that providing pure Go code that satisfies a well defined
> Go "interface" type definition. There should not be any
> copy+paste of example boilerplate, nor any use of CGo.
I don't disagree, I just have no idea how to achieve this.
> As an illustration, consider an interface and basic infrastructure:
[...]
I'll have a go at changing it like this, but I don't see how this
changes any of the fundamental problems, but maybe I will understand
more once I've done that.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW
More information about the Libguestfs
mailing list