public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: David Brown <david@westcontrol.com>
To: "Rafał Pietrak" <embedded@ztk-rp.eu>,
	"Martin Uecker" <muecker@gwdg.de>,
	"Ian Lance Taylor" <iant@golang.org>
Cc: "Richard Earnshaw (lists)" <Richard.Earnshaw@arm.com>,
	"gcc@gcc.gnu.org" <gcc@gcc.gnu.org>
Subject: Re: wishlist: support for shorter pointers
Date: Wed, 5 Jul 2023 13:55:23 +0200	[thread overview]
Message-ID: <25afc1cb-3a62-135d-3206-2d9eb6216944@westcontrol.com> (raw)
In-Reply-To: <45292545-b4e1-a2c8-38d0-a7773f309ca5@ztk-rp.eu>

On 05/07/2023 11:42, Rafał Pietrak via Gcc wrote:
> Hi,
> 
> W dniu 5.07.2023 o 11:11, David Brown pisze:
>> On 05/07/2023 10:05, Rafał Pietrak via Gcc wrote:
> [-----------]

>> I am not sure if you are clear about this, but the address space 
>> definition macros here are for use in the source code for the 
>> compiler, not in user code.  There is (AFAIK) no way for user code to 
>> create address spaces - you need to check out the source code for GCC, 
>> modify it to support your new address space, and build your own 
>> compiler.  This is perfectly possible (it's all free and open source, 
>> after all), but it is not a minor undertaking - especially if you 
>> don't like C++ !
> 
> Hmmm.
> 
> 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.

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.

> 
> [------]
>> I realise that learning at least some C++ is a significant step beyond 
>> learning C - but /using/ C++ classes or templates is no harder than C 
>> coding.  And it is far easier, faster and less disruptive to make a 
>> C++ header library implementing such features than adding new named 
>> address spaces into the compiler itself.
>>
>> The one key feature that is missing is that named address spaces can 
>> affect the allocation details of data, which cannot be done with C++ 
>> classes.  You could make a "small_data" class template, but variables 
>> would still need to be marked __attribute__((section(".smalldata"))) 
>> when used.  I think this could be handled very neatly with one single 
>> additional feature in GCC - allow arbitrary GCC variable attributes to 
>> be specified for types, which would then be applied to any variables 
>> declared for that type.
> 
> OK. I see your point.
> 
> 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).

C++ /is/ a big "seller" in this market.  It is definitely growing, just 
as the market for commercial toolchains with non-portable extensions is 
dropping and 8-bit CISC devices are being replaced by Cortex-M0 cores. 
There is certainly plenty of C-only coding going on, but C++ is growing.

> 2. affecting allocation details is usually the hole point of engineering 
> skills when dealing with small embedded devices - the hole point is to 
> have tools to do that.
> 

When you are dealing with 8-bit CISC devices like the 8051 or the COP8, 
then allocation strategies are critical, and good tools are essential.

But for current microcontrollers, they are not nearly as important 
because you have a single flat address space - pointers to read-only 
data in flash and pointers to data in ram are fully compatible.  You do 
sometimes need to place particular bits of data in particular places, 
but that is usually for individual large data blocks such as putting 
certain buffers in non-cached memory, or a large array in external 
memory.  Section attributes suffice for that.

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.)

> 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.

David



  reply	other threads:[~2023-07-05 11:55 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-27 12:26 Rafał Pietrak
2023-06-28  1:54 ` waffl3x
2023-06-28  7:13   ` Rafał Pietrak
2023-06-28  7:31     ` Jonathan Wakely
2023-06-28  8:35       ` Rafał Pietrak
2023-06-28  9:56         ` waffl3x
2023-06-28 10:43           ` Rafał Pietrak
2023-06-28 12:12             ` waffl3x
2023-06-28 12:23               ` Rafał Pietrak
2023-07-03 14:52         ` David Brown
2023-07-03 16:29           ` Rafał Pietrak
2023-07-04 14:20             ` Rafał Pietrak
2023-07-04 15:13               ` David Brown
2023-07-04 16:15                 ` Rafał Pietrak
2023-06-28  7:34     ` waffl3x
2023-06-28  8:41       ` Rafał Pietrak
2023-06-28 13:00 ` Martin Uecker
2023-06-28 14:51   ` Rafał Pietrak
2023-06-28 15:44     ` Richard Earnshaw (lists)
2023-06-28 16:07       ` Martin Uecker
2023-06-28 16:49         ` Richard Earnshaw (lists)
2023-06-28 17:00           ` Martin Uecker
2023-06-28 16:48       ` Rafał Pietrak
2023-06-29  6:19       ` Rafał Pietrak
2023-07-03 15:07         ` Ian Lance Taylor
2023-07-03 16:42           ` Rafał Pietrak
2023-07-03 16:57             ` Richard Earnshaw (lists)
2023-07-03 17:34               ` Rafał Pietrak
2023-07-04 12:38             ` David Brown
2023-07-04 12:57               ` Oleg Endo
2023-07-04 14:46               ` Rafał Pietrak
2023-07-04 15:55                 ` David Brown
2023-07-04 16:20                   ` Rafał Pietrak
2023-07-04 22:57                 ` Martin Uecker
2023-07-05  5:26                   ` Rafał Pietrak
2023-07-05  7:29                     ` Martin Uecker
2023-07-05  8:05                       ` Rafał Pietrak
2023-07-05  9:11                         ` David Brown
2023-07-05  9:25                           ` Martin Uecker
2023-07-05 11:34                             ` David Brown
2023-07-05 12:01                               ` Martin Uecker
2023-07-05  9:42                           ` Rafał Pietrak
2023-07-05 11:55                             ` David Brown [this message]
2023-07-05 12:25                               ` Rafał Pietrak
2023-07-05 12:57                                 ` David Brown
2023-07-05 13:29                                   ` Rafał Pietrak
2023-07-05 14:45                                     ` David Brown
2023-07-05 16:13                                       ` Rafał Pietrak
2023-07-05 17:39                                         ` David Brown
2023-07-06  7:00                                           ` Rafał Pietrak
2023-07-06 12:53                                             ` David Brown
2023-07-05  9:29                         ` Martin Uecker
2023-07-05 10:17                           ` Rafał Pietrak
2023-07-05 10:48                             ` Martin Uecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=25afc1cb-3a62-135d-3206-2d9eb6216944@westcontrol.com \
    --to=david@westcontrol.com \
    --cc=Richard.Earnshaw@arm.com \
    --cc=embedded@ztk-rp.eu \
    --cc=gcc@gcc.gnu.org \
    --cc=iant@golang.org \
    --cc=muecker@gwdg.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).