Deutsch   English   Français   Italiano  
<86frln6wwn.fsf@linuxsc.com>

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

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Tim Rentsch <tr.17687@z991.linuxsc.com>
Newsgroups: comp.lang.c
Subject: Re: So You Think You Can Const?
Date: Sun, 12 Jan 2025 22:38:32 -0800
Organization: A noiseless patient Spider
Lines: 65
Message-ID: <86frln6wwn.fsf@linuxsc.com>
References: <vljvh3$27msl$1@dont-email.me> <vlma9m$2s5e5$1@dont-email.me> <vlo0cm$2dkpd$9@dont-email.me> <vlqd4j$3s4ai$1@dont-email.me> <20250110103252.718@kylheku.com> <vlu6qh$miie$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Date: Mon, 13 Jan 2025 07:38:35 +0100 (CET)
Injection-Info: dont-email.me; posting-host="9eea8443f476a77794ac96904ee9ae64";
	logging-data="1778439"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18hmgrvmpScslVhtSAWBIXk7H1WCYIkWjc="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:e/nViVqao2K4e38Ejy+D4B86TfU=
	sha1:Fy0me64aTZH4I1szBK8CClo4AHc=
Bytes: 3858

Andrey Tarasevich <andreytarasevich@hotmail.com> writes:

> On 01/10/25 10:37 AM, Kaz Kylheku wrote:
>
>> Destruction by malloc is modifying in any system that recycles the
>> memory for another allocation.
>
> From such a radically "physical" point of view, nothing is and nothing
> will ever be `const`... Sorry, this is not even close to what
> "constness" in C is about.
>
> In C and C++ (as well in virtually all higher level languages)
> "constness" is not a physical concept.  It is a purely high-level
> logic-level concept, designed, implemented and enforced entirely by
> the author of the code (of the public interface of the module) in
> accordance with their intent.
>
> It has absolutely no relation to any physical modifications that might
> occur anywhere in the execution environment.  Nobody cares whether
> something somewhere gets "modified".  It is always a question of
> whether _I_ want to recognize such modifications as part of the public
> interface designed by me.  I'm the one who says whether the operation
> is "constant" or not, based purely on my idea of "logical constness".
>
> That's the reason `const` exists in C (and C++).
>
> However (returning to the more narrowly focused matter at hand), two
> things - creation and deletion of objects - will always indisputably
> stand apart as operations that transcend/defeat/ignore the idea of
> "constness" with relation to the object itself.  Creation/deletion
> might logically be seen as "non-constant" wrt to the surrounding
> environment (e.g. memory manager), but wrt to the object itself they
> shall not (and, obviously, cannot) care about its "constness" at all.
>
> An object begins being `const` only after the process of its creation
> (construction) is complete.  [...]

This idea doesn't match how C semantics works.  In particular, an
object in C can be "created" (start its lifetime) before it is
"constructed" (initialized).  Consider the following code:

    #include <stdio.h>

    int
    main(){
        int i = 0;
        const int *p;
        {
          MORE:
            if(  i > 0  )  printf( "  i, *p :  %2d %2d\n", i, *p  );
            const int j = i+7;
            p = &j;
            i++;
            if(  i < 10  )  goto MORE;
        }
        return  0;
    }

The object for j comes into existence once when the inner compound
statement is entered, but it is initialized 10 times.  The access
to j through *p has well-defined behavior.  The initializing
declaration for j (which is also a definition) does not modify the
value of j, in the sense that the C standard uses the term, but
only initializes j, even though the same object is being
initialized over and over.