On Fri, 31 Jan 2025 at 08:28, The Cuthour <cuth...@gmail.com> wrote:
>
>
>
> On 2025/01/31 17:05, Jonathan Wakely wrote:
> >
> >
> > On Fri, 31 Jan 2025, 06:50 The Cuthour via Gcc, <gcc@gcc.gnu.org
> > <mailto:gcc@gcc.gnu.org>> wrote:
> >
> >
> >     Suppose we have the following two classes:
> >
> >     === Vec.h ===
> >     class Vec {
> >           int x, y, z;
> >     };
> >     === end Vec.h ===
> >
> >     === Pix.h ===
> >     class Pix: Vec {
> >           int r, g, b;
> >     };
> >     === end Pix.h ===
> >
> >     If we add or remove a member variable in class Vec, it requires
> >     recompiling not only Vec.cc but also Pix.cc. I believe this is
> >     a problem. Pix.o should be relinkable.
> >
> >
> >     To solve this problem, I propose the Linkable struct. The term
> >     Linkable struct is proposed in analogy to Linkable function.
> >     C language can be considered a language of Linkable functions.
> >     C language enhances the relinkability of functions by
> >     compromising the optimization of inline functions. C language
> >     does not need Linkable structs because structures are declared
> >     individually in C. Object-oriented languages need Linkable
> >     structs because classes (structures) are described as
> >     differences from their base classes.
> >
> >     To achieve Linkable structs, I propose the Linkable constant.
> >     This mechanism ensures that certain constants are determined
> >     at link time and is realized by extending the ELF format. The
> >     offsets of structure members are defined in a distributed
> >     manner across object files using these constants, with their
> >     values resolved at link time. The information for calculating
> >     these constants is ideally stored in each object file in
> >     Reverse Polish Notation (RPN) for each symbol. The Linkable
> >     constant is also a compromise concerning the optimization of
> >     inline access to structure members.
> >
> >
> > It also means that sizeof(Pix) is no longer a constant expression, which
> > breaks the rules of the C++ language.
> >
> > Imagine that Pix.cc contains:
> >
> > static_assert(sizeof (Pix) <= 12);
> >
> > The assertion passes when you compile it, but becomes invalid if you
> > don't recompile after changing Vec.h
> >
> > This is not feasible.
>
> I believe that sizeof(Pix) is also a linkable constant. It is a
> constant, and its value is determined at link time.


C++ requires constant expressions to be known during compilation, not
at link time.

Reply via email to