Hi,
W dniu 5.07.2023 o 13:55, David Brown pisze:
On 05/07/2023 11:42, Rafał Pietrak via Gcc wrote:
[--------------]
Wouldn't it be easier and more natural to make the "named spaces" a
synonym to specific linker sections (like section names, or section
name prefix when instead of ".data.array.*" one gets
".mynamespace.array.*")?
You can, of course, write :
#define __smalldata __attribute__((section(".smalldata)))
I'd rather see the "section" attribute extended to allow it to specify a
prefix or suffix (to make subsections) than more named address spaces.
me to. (pun not intended :)
I'm a big fan of only putting things in the compiler if they have to be
there - if a feature can be expressed in code (whether it be C, C++, or
preprocessor macros), then I see that as the best choice.
Fully agree. ... almost fully.
I'd rather say: "I'm a big fun of being able to tell the compiler what I
mean, but leave functionality/algorithms in libs".
And I think this has some resonance to our discussion. I think, that as
of today, C-sources (though the compiler) don't have enough "vocabulary"
to tell the linker "what we mean", and so the ability to "select flash
vs RAM" or "one RAM vs another" is limited. The compiler/linker language
is pretty much limited to resolved/unresolved names and their binding to
linker segments.... like you've pointed above.
[--------]
But let's have look at it. You say, that "names spaces affect
allocation details, which cannot be done with C++". Pls consider:
1. for small embedded devices C++ is not a particularly "seller". We
even turn to assembler occasionally.
I have been writing code for small embedded systems for about 30 years.
I used to write a lot in assembly, but it is very rare now. Almost all
of the assembly I write these days is inline assembly in gcc format -
and a lot of that actually contains no assembly at all, but is for
careful control of dependencies or code re-arrangements. The smallest
device I have ever used was an AVR Tiny with no ram at all - just 2K
flash, a 3-level return stack and its 32 8-bit registers. I programmed
that in C (with gcc).
Well, similar here, although not that intensive (hobby, not profession).
Still, I've never touched the Tiny, as I wasn't able to wrap my head
around those limited resources for anything more then a blinker.
[--------------]
Allocation control is certainly important at times, but it's far from
being as commonly needed as you suggest.
(Dynamic allocation is a different matter, but I don't believe we are
talking about that here.)
yes, not about that.
So your current objections to named spaces ... are in fact in favor of
them. Isn't it so?
Not really, no - I would rather see better ways to handle allocation and
section control than more named address spaces.
Doesn't it call for "something" that a c-source (through the compiler)
can express to the linker programmers' intention?
-R