Deutsch   English   Français   Italiano  
<vlmvb7$3023s$5@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: So You Think You Can Const?
Date: Wed, 8 Jan 2025 14:48:06 -0800
Organization: A noiseless patient Spider
Lines: 72
Message-ID: <vlmvb7$3023s$5@dont-email.me>
References: <vljvh3$27msl$1@dont-email.me> <20250107130809.661@kylheku.com>
 <vlm0hf$2dkpd$1@dont-email.me> <87a5c15ob0.fsf@bsb.me.uk>
 <vlm7o4$2dkpd$4@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Wed, 08 Jan 2025 23:48:08 +0100 (CET)
Injection-Info: dont-email.me; posting-host="58961ca7b8547b951e6a06d5f950f196";
	logging-data="3147900"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+Z9GQ6oqrpFOp0diJA2zOw6hB8b8Shgss="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:BZqR52Jiz71IHW3KJRdKH9A+5CQ=
Content-Language: en-US
In-Reply-To: <vlm7o4$2dkpd$4@dont-email.me>
Bytes: 4116

On 1/8/2025 8:05 AM, Julio Di Egidio wrote:
> On 08/01/2025 16:16, Ben Bacarisse wrote:
>> Julio Di Egidio <julio@diegidio.name> writes:
>>> On 07/01/2025 23:11, Kaz Kylheku wrote:
>>>> On 2025-01-07, Julio Di Egidio <julio@diegidio.name> wrote:
> <snipped>
>>>>> To the question, I was reading this, but I am not
>>>>> sure what the quoted passage means:
>>>>>
>>>>> Matt Stancliff, "So You Think You Can Const?",
>>>>> <https://matt.sh/sytycc>
>>>>> << Your compiler, at its discretion, may also choose
>>>>>       to place any const declarations in read-only storage,
>>>>>       so if you attempt to hack around the const blocks,
>>>>>       you could get undefined behavior. >>
>>>
>>>> An object defined with a type that is const-qualified
>>>> could be put into write-protected storage.
>>>
>>> What do you/we mean by "object" in this context?  (Sorry, I do have
>>> forgotten, the glossary to begin with.)
>>
>> An object (in C) is a contiguous region of storage, the contents of
>> which can represent values.
> 
> Is that regardless of the stack/heap distinction, or is an "object" 
> about heap-allocated/dynamic memory only?  --  Anyway, I should in fact 
> re-acquaint myself with the language reference instead of asking this 
> question.)
> 
>>> Overall, I am surmising this and only this might go write-protected:
>>>
>>>    MyStruct_t const T = {...};
>>
>> Yes, though you should extend your concern beyond what might be
>> write-protected.  Modifying an object whose type is const qualified is
>> undefined, even if the object is in writable storage.
> 
> Yes, I am being a bit quick, but I definitely agree with that and indeed 
> the priority of "defined behaviour" as a concern.
> 
>>> While this one allocates a "byte-array", i.e. irrespective of how the
>>> pointer we are assigning it is declared:
>>>
>>>    MyStruct_t const *pT = malloc(...);
>>>
>>> Is my understanding (to that point) correct?
>>
>> Technically you get an object with no effective type.
> 
> OK.
> 
>> More relevant to a discussion of const is to ask what you plan to do
>> with pT since you can't (without a cast) assign any useful value to the
>> allocated object.
> 
> Say my program unit implements AVL trees, with (conceptually speaking) 
> constructors/destructors, navigation and retrieval, and of course 
> manipulation (inserting, deleting, etc.).
> 
> My idea (but I would think this is pretty "canonical" and, if it isn't, 
> I am missing the mark) is: my public functions take/give "sealed" 
> instances (with const members to const data), as the user is not 
> supposed to directly manipulate/edit the data, OTOH of course my 
> implementation is all about in-place editing...

Off topic, but for some reason you are making me think of the mutable 
keyword in C++:

https://en.cppreference.com/w/cpp/language/cv

;^)