Re: [PATCH 02/10] compiler.h: add is_const() as a replacement of __is_constexpr()
From: Vincent Mailhol
Date: Sat Dec 07 2024 - 08:51:05 EST
On Sat. 7 Dec. 2024 à 22:19, Martin Uecker <muecker@xxxxxxx> wrote:
> Am Samstag, dem 07.12.2024 um 21:45 +0900 schrieb Vincent Mailhol:
> > On Sat. 7 Dec. 2024 at 17:39, Martin Uecker <muecker@xxxxxxx> wrote:
> > > Am Freitag, dem 06.12.2024 um 16:26 +0900 schrieb Vincent Mailhol:
>
> ...
>
> > > I find it amazing how much time the Linux kernel community spends
> > > revising code to make it work perfectly.
> > >
> > > Still, I am wondering whether some of this time and effort should not
> > > be targeted at C compilers and language work to make these macro
> > > hacks unnecessary?
> >
> > It seems to me that the long term solution to this problem are the
> > constexpr functions.
>
> How would constexpr functions help here? (I am a bit sceptical about
> constexpr functions.)
I was thinking of some of the "side features" of constexpr functions. Namely:
- std::is_constant_evaluated
Link: https://en.cppreference.com/w/cpp/types/is_constant_evaluated
- if consteval
Link: https://en.cppreference.com/w/cpp/language/if#Consteval_if
I did not try it, but looking at these, I believe that this would
allow us to rewrite most of our macros into some constexpr functions.
> > But the core issue is that before getting this support in Linux, we
> > have to wait for this to be added to the C2Y draft, then implemented
> > in the compilers (probably just reusing the C++ constexpr functions)
> > and finally wait maybe one more decade for the C2Y support to reach
> > the kernel. For reference the kernel supports C11 only from 2022… So
> > maybe we will see those in the kernel around 2037? Meanwhile, we have
> > to deal with those hacks.
>
> If we do not collaborate on proper solutions, then you might have
> to wait much longer.
I was invited to WG14 this September. For now, I am only lurking. The
thing I have in mind right now is to write a paper to allow the use of
static_assert() in expressions (i.e. make it return 0 on success).
That should be a relatively small change, but would bring a nice
quality of life improvement.
For context, look at this:
https://lore.kernel.org/all/CAHk-=wjLSEcZ5LdW+3C+9rtjvNPHZT6zdk0POj67T5k2ZpDbgA@xxxxxxxxxxxxxx/T/#m1ba33a804b4041154b72a1d0333f90ec7204c461
And I will definitely follow the progress of constexpr functions in C2Y.
Yours sincerely,
Vincent Mailhol