[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH experiment 00/16] C++20 coroutine backend
From: |
Stefan Hajnoczi |
Subject: |
Re: [PATCH experiment 00/16] C++20 coroutine backend |
Date: |
Tue, 15 Mar 2022 14:05:29 +0000 |
On Mon, Mar 14, 2022 at 05:21:22PM +0100, Paolo Bonzini wrote:
> On 3/14/22 15:07, Stefan Hajnoczi wrote:
> > If we can reach a consensus about C++ language usage in QEMU then I'm in
> > favor of using C++ coroutines. It's probably not realistic to think we
> > can limit C++ language usage to just coroutines forever. Someone finds
> > another C++ feature they absolutely need and over time the codebase
> > becomes C++ - with both its advantages and disadvantages.
> >
> > [...] although you can write C in C++, it's not idiomatic modern C++.
> > The language lends itself to a different style of programming that
> > some will embrace while others will not.
>
> Yes, this is an important aspect to discuss. I think coroutines provide a
> good blueprint for how QEMU might use C++.
>
> I totally agree that, if we go this way, the genie is out of the bottle and
> other uses of C++ will pop up with 100% probability. But the important
> thing to note is that our dialect of C is already not standard C, and that
> some of our or GLib's "innovations" are actually based on experience with
> C++. We can keep on writing "QEMU's C" if we think of C++ as a supercharged
> way of writing these quality-of-life improvements that we already write. In
> some sense coroutines are an extreme example of this idea.
>
> In fact, a C API would have to remain unless all source files are changed to
> C++, so QEMU would remain mostly a C project with C idioms, but that doesn't
> prevent _abstracting_ the use of C++ features (written in modern, idiomatic
> C++) behind an API that C programmers have no problems learning. Again,
> coroutines are an example of this of keeping the familiar create/enter/yield
> API and hiding the "magic" of C++ coroutines (and when they don't, that had
> better be an improvement).
>
> In the end, C++ is a tool that you can use if it leads to better code. For
> example, I don't see much use of C++ for devices for example, and the
> storage devices in particular do not even need coroutines because they use
> the callback-based interface. But perhaps someone will try to use templates
> to replace repeated inclusion (which is common in hw/display) and others
> will follow suit. Or perhaps not.
>
> One example that was brought up on IRC is type-safe operations on things
> such as hwaddr (i.e. hwaddr+int is allowed but hwaddr-hwaddr gives back an
> int64_t and might even check for overflow). These would be opt in (you get
> them just by changing a file from .c to .cc), but the actual C++ code would
> still look very much like C code that uses hwaddr with no type checking.
> All the operator overloading gunk would be in include/.
>
> A different topic is what would happen if all of QEMU could be compiled as
> C++, and could inform our selection of C++ idioms even long before we get
> there. For example, I'm fine with GLib and our type-safe intrusive lists,
> so I don't have much interest in STL containers and I would prefer _not_ to
> use STL containers even in .cc files[1]. However, perhaps QEMU's home-grown
> lock guard might be replaced by something that uses C++ destructors instead
> of g_autoptr, so perhaps we should consider using std::lock_guard<>, or
> something like that, instead of QEMU_LOCK_GUARD. It may be interesting to
> pass down lock_guards as arguments to enforce "this lock is taken"
> invariants.
>
> But really, coroutines would be enough work so my dish would be full for
> some time and I wouldn't really have time to look at any of this. :)
I think it will be necessary to compile QEMU with a C++ compiler quite
soon. It is possible to provide C APIs like in the case of coroutines,
but sometimes C++ features need to be exposed to the caller (like the
lock guards you mentioned). Also, once C++ is available people will
start submitting C++ patches simply because they are more comfortable
with C++ (especially one-time/infrequent contributors).
We need to agree on a policy so that people know how and when they can
use C++.
The policy needs to be simple so it doesn't create hurdles for new
contributors.
Does anyone have experience with C projects that introduced C++ and what
worked/didn't work?
Stefan
signature.asc
Description: PGP signature
- [PATCH experiment 10/16] add space between liter and string macro, (continued)
- [PATCH experiment 10/16] add space between liter and string macro, Paolo Bonzini, 2022/03/14
- [PATCH experiment 13/16] disable some code, Paolo Bonzini, 2022/03/14
- [PATCH experiment 16/16] port test-coroutine to C++ coroutines, Paolo Bonzini, 2022/03/14
- [PATCH experiment 14/16] util: introduce C++ stackless coroutine backend, Paolo Bonzini, 2022/03/14
- [PATCH experiment 15/16] port QemuCoLockable to C++ coroutines, Paolo Bonzini, 2022/03/14
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Stefan Hajnoczi, 2022/03/14
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Paolo Bonzini, 2022/03/14
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Richard Henderson, 2022/03/14
- Re: [PATCH experiment 00/16] C++20 coroutine backend,
Stefan Hajnoczi <=
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Peter Maydell, 2022/03/15
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Paolo Bonzini, 2022/03/15
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Stefan Hajnoczi, 2022/03/16
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Daniel P . Berrangé, 2022/03/16
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Stefan Hajnoczi, 2022/03/16
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Paolo Bonzini, 2022/03/17
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Hanna Reitz, 2022/03/17
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Markus Armbruster, 2022/03/31
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Kevin Wolf, 2022/03/15
- Re: [PATCH experiment 00/16] C++20 coroutine backend, Stefan Hajnoczi, 2022/03/15