[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v1 0/9] qapi-go: add generator for Golang interface
From: |
Victor Toso |
Subject: |
Re: [PATCH v1 0/9] qapi-go: add generator for Golang interface |
Date: |
Fri, 29 Sep 2023 16:17:15 +0200 |
Hi,
On Thu, Sep 28, 2023 at 02:40:27PM +0100, Daniel P. Berrangé wrote:
> On Wed, Sep 27, 2023 at 01:25:35PM +0200, Victor Toso wrote:
> > Hi, long time no see!
> >
> > This patch series intent is to introduce a generator that produces a Go
> > module for Go applications to interact over QMP with QEMU.
>
> snip
>
> > Victor Toso (9):
> > qapi: golang: Generate qapi's enum types in Go
> > qapi: golang: Generate qapi's alternate types in Go
> > qapi: golang: Generate qapi's struct types in Go
> > qapi: golang: structs: Address 'null' members
> > qapi: golang: Generate qapi's union types in Go
> > qapi: golang: Generate qapi's event types in Go
> > qapi: golang: Generate qapi's command types in Go
> > qapi: golang: Add CommandResult type to Go
> > docs: add notes on Golang code generator
> >
> > docs/devel/qapi-golang-code-gen.rst | 341 +++++++++
> > scripts/qapi/golang.py | 1047 +++++++++++++++++++++++++++
> > scripts/qapi/main.py | 2 +
> > 3 files changed, 1390 insertions(+)
> > create mode 100644 docs/devel/qapi-golang-code-gen.rst
> > create mode 100644 scripts/qapi/golang.py
>
> So the formatting of the code is kinda all over the place eg
>
> func (s *StrOrNull) ToAnyOrAbsent() (any, bool) {
> if s != nil {
> if s.IsNull {
> return nil, false
> } else if s.S != nil {
> return *s.S, false
> }
> }
>
> return nil, true
> }
>
>
> ought to be
>
> func (s *StrOrNull) ToAnyOrAbsent() (any, bool) {
> if s != nil {
> if s.IsNull {
> return nil, false
> } else if s.S != nil {
> return *s.S, false
> }
> }
>
> return nil, true
> }
>
> I'd say we should add a 'make check-go' target, wired into 'make check'
> that runs 'go fmt' on the generated code to validate that we generated
> correct code. Then fix the generator to actually emit the reqired
> format.
As mentioned in another thread, my main concern with this is
requiring go binaries in the make script. Might be fine if the
scope is only when a release is done, but shouldn't be a default
requirement.
> Having said that, this brings up the question of how we expect apps to
> consume the Go code. Generally an app would expect to just add the
> module to their go.mod file, and have the toolchain download it on
> the fly during build.
>
> If we assume a go namespace under qemu.org, we'll want one or more
> modules. Either we have one module, containing APIs for all of QEMU,
> QGA, and QSD, or we have separate go modules for each. I'd probably
> tend towards the latter, since it means we can version them separately
> which might be useful if we're willing to break API in one of them,
> but not the others.
>
> IOW, integrating this directly into qemu.git as a build time output
> is not desirable in this conext though, as 'go build' can't consume
> that.
>
> IOW, it would push towards
>
> go-qemu.git
> go-qga.git
> go-qsd.git
>
> and at time of each QEMU release, we would need to invoke the code
> generator, and store its output in the respective git modules.
In which point, I think it is fair to run the gofmt and goimports.
Still, if you think it isn't a problem to add such make check-go
target with tooling specific to go code in them, I'll add that to
next iteration.
> This would also need the generator application to be a
> standalone tool, separate from the C QAPI generator.
It is. I mean, both run together now but that can be improved.
> Finally Go apps would want to do
>
> import (
> qemu.org/go/qemu
> qemu.org/go/qga
> qemu.org/go/gsd
> )
>
> and would need us to create the "https://qemu.org/go/qemu" page
> containing dummy HTML content with
>
> <meta name="go-import" content="qemu.org/go/qemu git
> https://gitlab.com/qemu-project/go-qemu.git@/>
Neat. I didn't know this. Yes, we want that, but with different
name for the git [0]. Perhaps just another folder:
https://gitlab.com/qemu-project/go/qemu.git
https://gitlab.com/qemu-project/go/qga.git
https://gitlab.com/qemu-project/go/gsd.git
> and likewise for the other modules.
[0] https://github.com/digitalocean/go-qemu
Thanks again for the reviews!
Cheers,
Victor
signature.asc
Description: PGP signature
- [PATCH v1 8/9] qapi: golang: Add CommandResult type to Go, (continued)