Rocksolid Light

Welcome to Rocksolid Light

mail  files  register  newsreader  groups  login

Message-ID:  

Deliver yesterday, code today, think tomorrow.


devel / comp.lang.c / Re: NO vs. SE (was Re: Effect of CPP tags)

SubjectAuthor
* Effect of CPP tagsJanis Papanagnou
+- Effect of CPP tagsLowell Gilbert
+* Effect of CPP tagsKaz Kylheku
|`* Effect of CPP tagsSpiros Bousbouras
| `- Effect of CPP tagsTim Rentsch
+* Effect of CPP tagsJanis Papanagnou
|+* Effect of CPP tagsLowell Gilbert
||+* Effect of CPP tagsKeith Thompson
|||`* Effect of CPP tagsKaz Kylheku
||| `* Effect of CPP tagsKeith Thompson
|||  `* Re: Effect of CPP tagsTim Rentsch
|||   `* Re: Effect of CPP tagsKaz Kylheku
|||    +- Re: Effect of CPP tagsJames Kuyper
|||    +* Re: Effect of CPP tagsJames Kuyper
|||    |`* Re: Effect of CPP tagsKaz Kylheku
|||    | +* Re: Effect of CPP tagsJames Kuyper
|||    | |`- Re: Effect of CPP tagsTim Rentsch
|||    | `* Re: Effect of CPP tagsTim Rentsch
|||    |  `* Re: Effect of CPP tagsKeith Thompson
|||    |   +- Re: Effect of CPP tagsDavid Brown
|||    |   +* Re: Effect of CPP tagsTim Rentsch
|||    |   |`- Re: Effect of CPP tagsKeith Thompson
|||    |   `- Re: Effect of CPP tagsTim Rentsch
|||    `- Re: Effect of CPP tagsTim Rentsch
||+* Effect of CPP tagsKaz Kylheku
|||+- Effect of CPP tagsKaz Kylheku
|||`* Effect of CPP tagsLowell Gilbert
||| `- Effect of CPP tagsJanis Papanagnou
||`* Effect of CPP tagsJanis Papanagnou
|| `- Effect of CPP tagsKaz Kylheku
|+- Effect of CPP tagsKaz Kylheku
|`* Effect of CPP tagsScott Lurndal
| +* Effect of CPP tagsJanis Papanagnou
| |`* Effect of CPP tagsKeith Thompson
| | +* Effect of CPP tagsScott Lurndal
| | |`* Effect of CPP tagsDavid Brown
| | | `* Effect of CPP tagsJames Kuyper
| | |  `- Effect of CPP tagsDavid Brown
| | `- Effect of CPP tagsTim Rentsch
| `- usleep (Was: Effect of CPP tags)Kenny McCormack
+* Effect of CPP tagsLawrence D'Oliveiro
|`* Effect of CPP tagsBart
| +* Effect of CPP tagsDavid Brown
| |`* Effect of CPP tagsKeith Thompson
| | `* Effect of CPP tagsKaz Kylheku
| |  `* Effect of CPP tagsBart
| |   +* Effect of CPP tagsLawrence D'Oliveiro
| |   |`* Effect of CPP tagsBart
| |   | `* Effect of CPP tagsLawrence D'Oliveiro
| |   |  `* Effect of CPP tagsBart
| |   |   +* Effect of CPP tagsScott Lurndal
| |   |   |+* Effect of CPP tagsDavid Brown
| |   |   ||`- Effect of CPP tagsBGB
| |   |   |`* Effect of CPP tagsBart
| |   |   | `- Effect of CPP tagsDavid Brown
| |   |   `- Effect of CPP tagsLawrence D'Oliveiro
| |   `* Effect of CPP tagsDavid Brown
| |    +* Effect of CPP tagsBart
| |    |+- Effect of CPP tagsScott Lurndal
| |    |+* Effect of CPP tagsKaz Kylheku
| |    ||+* Effect of CPP tagsBart
| |    |||`* Effect of CPP tagsBart
| |    ||| +- Effect of CPP tagsKeith Thompson
| |    ||| `* Effect of CPP tagsKaz Kylheku
| |    |||  `* Effect of CPP tagsKeith Thompson
| |    |||   +* Effect of CPP tagsJanis Papanagnou
| |    |||   |`- Effect of CPP tagsKeith Thompson
| |    |||   `- Effect of CPP tagsKaz Kylheku
| |    ||`- Effect of CPP tagsScott Lurndal
| |    |`- Effect of CPP tagsDavid Brown
| |    `* Effect of CPP tagsLawrence D'Oliveiro
| |     +* Effect of CPP tagsChris M. Thomasson
| |     |`* Effect of CPP tagsLawrence D'Oliveiro
| |     | `* Effect of CPP tagsChris M. Thomasson
| |     |  `* Effect of CPP tagsLawrence D'Oliveiro
| |     |   +- Effect of CPP tagsChris M. Thomasson
| |     |   +- Effect of CPP tagsChris M. Thomasson
| |     |   `- Effect of CPP tagsKaz Kylheku
| |     +* Effect of CPP tagsDavid Brown
| |     |+* Effect of CPP tagsBart
| |     ||+* Effect of CPP tagsDavid Brown
| |     |||`* Effect of CPP tagsDavid Brown
| |     ||| `* Effect of CPP tagsBart
| |     |||  +* Effect of CPP tagsChris M. Thomasson
| |     |||  |`- Effect of CPP tagsChris M. Thomasson
| |     |||  +* Effect of CPP tagstTh
| |     |||  |+- Effect of CPP tagsLawrence D'Oliveiro
| |     |||  |+- Effect of CPP tagsKaz Kylheku
| |     |||  |`* Effect of CPP tagsBart
| |     |||  | `* Effect of CPP tagsScott Lurndal
| |     |||  |  `* Effect of CPP tagsBart
| |     |||  |   `* Effect of CPP tagsDavid Brown
| |     |||  |    +* Effect of CPP tagsKaz Kylheku
| |     |||  |    |`* Effect of CPP tagsDavid Brown
| |     |||  |    | `- Effect of CPP tagsKaz Kylheku
| |     |||  |    `* Effect of CPP tagsBart
| |     |||  |     +* Effect of CPP tagsScott Lurndal
| |     |||  |     |`* Effect of CPP tagsBart
| |     |||  |     | `* Effect of CPP tagsScott Lurndal
| |     |||  |     |  `* Effect of CPP tagsBart
| |     |||  |     |   +* Effect of CPP tagsJanis Papanagnou
| |     |||  |     |   `* Effect of CPP tagsScott Lurndal
| |     |||  |     `* Effect of CPP tagsDavid Brown
| |     |||  `* Effect of CPP tagsDavid Brown
| |     ||`* Effect of CPP tagsJanis Papanagnou
| |     |`* Effect of CPP tagsLawrence D'Oliveiro
| |     `* Effect of CPP tagsKaz Kylheku
| +- Effect of CPP tagsRichard Damon
| +* Effect of CPP tagsKaz Kylheku
| +* Effect of CPP tagsBlue-Maned_Hawk
| `- Effect of CPP tagsLawrence D'Oliveiro
`* Effect of CPP tagsTim Rentsch

Pages:123456789101112131415161718192021222324252627
Re: Effect of CPP tags

<uojes7$7nc8$1@dont-email.me>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=49026&group=comp.lang.c#49026

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: jameskuyper@alumni.caltech.edu (James Kuyper)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Sun, 21 Jan 2024 10:56:55 -0500
Organization: A noiseless patient Spider
Lines: 18
Message-ID: <uojes7$7nc8$1@dont-email.me>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me>
<4434vmp2fl.fsf@be-well.ilk.org> <87wmsyuj1l.fsf@nosuchdomain.example.com>
<20231228134234.49@kylheku.com> <87sf3lvs43.fsf@nosuchdomain.example.com>
<86y1cjiqpu.fsf@linuxsc.com> <20240120203343.615@kylheku.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Injection-Date: Sun, 21 Jan 2024 15:56:56 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="ce6704770b00353bd59d3c2592afc0cf";
logging-data="253320"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18/FRsVv6YZkJo5uqMiILo8dNKHnvgGFYE="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:I7vlOHdC/Krxh5eqpq3iy3HFEDI=
Content-Language: en-US
In-Reply-To: <20240120203343.615@kylheku.com>
 by: James Kuyper - Sun, 21 Jan 2024 15:56 UTC

On 1/20/24 23:46, Kaz Kylheku wrote:
> On 2024-01-20, Tim Rentsch <tr.17687@z991.linuxsc.com> wrote:
....
>> named is part of the implementation, or it isn't. If the named
>> header is part of the implementation, then it constitutes a
>> language extension, and so it must be documented (and defined).
>
> The problem with this reasoning is
> 1. Implementations in fact have internal headers that are not
> documented, and which are not supposed to be included directly. You
> will not get documentation for every single header that
> is accessible via #include, and it is not reasonable for ISO C to
> require it. I don't see where it does.

"An implementation shall be accompanied by a document that defines all
implementation-defined and locale-specific characteristics and all
extensions." 4p9

Re: Effect of CPP tags

<uojj7p$8crh$1@dont-email.me>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=49028&group=comp.lang.c#49028

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!rocksolid2!news.neodome.net!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: jameskuyper@alumni.caltech.edu (James Kuyper)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Sun, 21 Jan 2024 12:11:20 -0500
Organization: A noiseless patient Spider
Lines: 42
Message-ID: <uojj7p$8crh$1@dont-email.me>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me>
<4434vmp2fl.fsf@be-well.ilk.org> <87wmsyuj1l.fsf@nosuchdomain.example.com>
<20231228134234.49@kylheku.com> <87sf3lvs43.fsf@nosuchdomain.example.com>
<86y1cjiqpu.fsf@linuxsc.com> <20240120203343.615@kylheku.com>
<d1d7ac1e-63ff-41a0-9e3d-78e878b56afc@alumni.caltech.edu>
<a5f31f1747a49217b66c67f4deabd963@kylheku.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Injection-Date: Sun, 21 Jan 2024 17:11:21 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="ce6704770b00353bd59d3c2592afc0cf";
logging-data="275313"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/Y3UaD+USEfQJQfsPKyKkRi0LawGa87S4="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:z3lyYZZEtwOYVUEvbBY86l9/COE=
In-Reply-To: <a5f31f1747a49217b66c67f4deabd963@kylheku.com>
Content-Language: en-US
 by: James Kuyper - Sun, 21 Jan 2024 17:11 UTC

Initially, I accidentally sent my response as private e-mail to Kaz
rather than to the group. With his permission, here's the response he sent:

On 1/21/24 01:37, Kaz Kylheku wrote:
> On 2024-01-20 21:50, James Kuyper wrote:
>> "An implementation shall be accompanied by a document that defines all
>> implementation-defined and locale-specific characteristics and all
>> extensions." 4p9
> That sentence says something subtly different from something like
> "an implementation shall document everything that looks stable enough
> to be an extension".
>
> It is saying that there is required to be a document, and that in
> that document there may be a list of one or more extensions.
>
> The standard is defining the *fact* that this list is exhaustive:
> it comprises all the extensions that are offered in the contract
> between implementor and programmer.
>
> Thus, for instance, if programmers empirically discover a behavior
> which is not defined by ISO C, and which is not in that list,
> it is not an extension. The standard states that that list has
> all the extensions, and that discovered feature is not on it.
>
> The sentence does not require implementors to document,
> as an extension, every header file that is reachable by an #include
> directive.
The standard doesn't provide a definition for "extension", though it
makes many uses of the term, identifying a variety of things as possible
or common extensions to C. What you're saying is, essentially, that
extensions are defined as such by the fact that they are listed as such
in that document. The biggest problem I have with that is that ISO has a
convention that allows them to say just that - all they would have had
to do is put "extension" in italics in 4p9, and that would identify the
sentence in which it occurs as the definition of the term. They didn't
choose to do so. I concede that they might not have thought of doing so.

However, it seems more reasonable to me that whether or not something is
an extension is not supposed to be up to the implementor to decide.
Instead, anything that is an extension must be listed. This would be an
easier interpretation to defend if there were any explicit definition of
"extension" in the standard.

Re: Effect of CPP tags

<20240121094637.874@kylheku.com>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=49031&group=comp.lang.c#49031

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: 433-929-6894@kylheku.com (Kaz Kylheku)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Sun, 21 Jan 2024 17:55:27 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 25
Message-ID: <20240121094637.874@kylheku.com>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me>
<4434vmp2fl.fsf@be-well.ilk.org> <87wmsyuj1l.fsf@nosuchdomain.example.com>
<20231228134234.49@kylheku.com> <87sf3lvs43.fsf@nosuchdomain.example.com>
<86y1cjiqpu.fsf@linuxsc.com> <20240120203343.615@kylheku.com>
<d1d7ac1e-63ff-41a0-9e3d-78e878b56afc@alumni.caltech.edu>
<a5f31f1747a49217b66c67f4deabd963@kylheku.com>
<uojj7p$8crh$1@dont-email.me>
Injection-Date: Sun, 21 Jan 2024 17:55:27 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="33c09ed4842a7f81f4877f94e0219235";
logging-data="344133"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/YYmXb60mNGdVP3qFy75YtGyevXDVE1Qc="
User-Agent: slrn/pre1.0.4-9 (Linux)
Cancel-Lock: sha1:2kbFJvILqfpxE3S4qpqNWmdor6E=
 by: Kaz Kylheku - Sun, 21 Jan 2024 17:55 UTC

On 2024-01-21, James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
> However, it seems more reasonable to me that whether or not something is
> an extension is not supposed to be up to the implementor to decide.
> Instead, anything that is an extension must be listed. This would be an
> easier interpretation to defend if there were any explicit definition of
> "extension" in the standard.

The implication is that anything that works by accident must be listed
as an extension. If function arguments happen to be evaluated left to
right, with all side effects complete between them, this has to be
listed as an extension. Then in the future when the vendor finds that
inconvenient for further compiler work, they have to take away the
extension.

I don't see how it can not be the implementor's privilege to assert what
is reliable for use and documented, versus what is not.

Unless they have some legal contract with particular customers,
requiring certain things be provided.

--
TXR Programming Language: http://nongnu.org/txr
Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
Mastodon: @Kazinator@mstdn.ca
NOTE: If you use Google Groups, I don't see you, unless you're whitelisted.

Re: Effect of CPP tags

<86h6j6h19f.fsf@linuxsc.com>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=49034&group=comp.lang.c#49034

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: tr.17687@z991.linuxsc.com (Tim Rentsch)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Sun, 21 Jan 2024 12:36:44 -0800
Organization: A noiseless patient Spider
Lines: 139
Message-ID: <86h6j6h19f.fsf@linuxsc.com>
References: <umet9d$3hir9$1@dont-email.me> <86bka5uda0.fsf@linuxsc.com> <874jfxvqi0.fsf@nosuchdomain.example.com> <867cktu6mz.fsf@linuxsc.com> <87zfxpu4vq.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Info: dont-email.me; posting-host="92215711b06d8c3aeb5738d6959250bf";
logging-data="396303"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19Qfy+jv9KGm1ULAjLu7UVa8MUltKUjtJg="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:pbBATDafh8rnug7bIwcA56TABKU=
sha1:reMg5qJNF5ydt9g1AQ1TkAnyICc=
 by: Tim Rentsch - Sun, 21 Jan 2024 20:36 UTC

Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:

> Tim Rentsch <tr.17687@z991.linuxsc.com> writes:
>
>> Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:
>>
>>> Tim Rentsch <tr.17687@z991.linuxsc.com> writes:
>>>
>>>> Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:
>>>>
>>>>> This is a CPP question that arose last month. It's not about an
>>>>> actual issue with the software, just out of curiosity and to be sure
>>>>> it works reliable (it seemingly does).
>>>>>
>>>>> In a C99 program on Linux (Ubuntu) I intended to use usleep() and
>>>>> then also strnlen().
>>>>>
>>>>> When I added usleep() and its include file I got an error and was
>>>>> asked to define the CPP tag '_BSD_SOURCE'. I did so, and because I
>>>>> wanted side effects of that tag kept as small as possible I
>>>>> prepended it just before the respective #include and put it at the
>>>>> end of my #include list
>>>>>
>>>>> ...other #includes...
>>>>> #define _BSD_SOURCE
>>>>> #include <unistd.h>
>>>>>
>>>>> But as got obvious *that* way there had been side-effects and I
>>>>> had to put the tag at the beginning of all include files (which
>>>>> astonished me)
>>>>>
>>>>> #define _BSD_SOURCE
>>>>> #include <unistd.h>
>>>>> ...other #includes here...
>>>>>
>>>>> For the strnlen() function I needed another CPP tag, '_GNU_SOURCE'.
>>>>> So now I have both CPP tag definitions before the includes
>>>>
>>>> I second the recommendations of Lowell Gilbert and others not to
>>>> define _BSD_SOURCE or _GNU_SOURCE (especially not _GNU_SOURCE)
>>>> but instead seek alternatives, which are readily available for
>>>> the two functionalities being sought in this case.
>>>>
>>>>> #define _GNU_SOURCE /* necessary for strnlen() in string.h */
>>>>> #define _BSD_SOURCE /* necessary for usleep() in unistd.h */
>>>>> ...all #includes here...
>>>>
>>>> For strnlen(), put an inline definition in a header file:
>>>>
>>>> #ifndef HAVE_strnlen_dot_h_header
>>>> #define HAVE_strnlen_dot_h_header
>>>>
>>>> #include <stddef.h>
>>>>
>>>> static inline size_t
>>>> strnlen( const char *s, size_t n ){
>>>> extern void *memchr( const void *, int, size_t );
>>>> const char *p = memchr( s, 0, n );
>>>> return p ? (size_t){ p-s } : n;
>>>> }
>>>>
>>>> #include <string.h>
>>>>
>>>> #endif
>>>>
>>>> Disclaimer: this code has been compiled but not tested.
>>>
>>> strnlen() is specified by POSIX. It might make sense to
>>> re-implement it if your code needs to work on a non-POSIX system
>>> (that doesn't also provide it). Why would you want to do so
>>> otherwise?
>>
>> I'm trying to provide a helpful answer to the person I was
>> responding to, not espouse a philosophical viewpoint. Why do you
>> feel the need to start a style debate?
>
> I don't. I simply asked you a question. You've refused to answer
> it, and I won't waste my time asking again.

I did answer your question. My answer is "I'm trying to provide a
helpful answer to the person I was responding to [...]". I don't
know why you think that wasn't an answer.

>>> memchr() is declared in <string.h>. Why would you duplicate its
>>> declaration rather than just using `#include <string.h>`?
>>
>> I had a specific reason for writing the code the way I did.
>> It wasn't important to explain that so I didn't.
>
> Unsurprisingly, you refuse to do so even when asked directly.

You need to learn that declining is not refusing. Providing a
more complete explanation would uselessly muddy the waters. You
are completely free to ask any questions you want. You have no
right to demand answers, especially when my judgment is that what
you think of as an answer would be a waste of time. Stop being so
self-centered.

>>>> For usleep(), define an alternate function usnooze(), to be used
>>>> in place of usleep(). In header file usnooze.h:
>>>
>>> [snip]
>>>
>>> If your code doesn't need to be portable to systems that don't
>>> provide usleep(), you can just use usleep(). If it does, its
>>> probably better to modify the code so it uses nanosleep().
>>
>> Not everyone agrees with that opinion. Again, I'm just trying to
>> provide an answer helpful to OP, not advance an agenda. Like I
>> said in the part of my posting that you left out, I don't want to
>> get involved in a style war. If OP wants to modify his code to
>> use nanosleep(), I'm fine with that. If want wants to keep using
>> usleep() or switch to using usnooze(), I'm fine with that too. I
>> think it's more important in this case to provide options than to
>> try to change someone's point of view.
>
> As usual, you vaguely denigrate my opinion without sharing your own.

I'm not denigrating your opinion. I'm simply pointing out that
it is an opinion, and that other people have different opinions.
I'm not presenting my opinion (even assuming I have one on this
subject, which is not guaranteed), because my purpose in posting
was to provide options to the OP, so they could make a decision
based on /their/ needs and their own opinions. I didn't consider,
or even start to consider, what my own opinions on the question
might be.

I have a general observation. In giving your opinions, often they
include a degree of argument or justification for why the views
expressed are a good idea. I have very little interest in getting
into an argument over personal opinions. If you want to hear more
of my opinions, probably it would help if you could focus on the
opinions more, and on the justifications or arguments less. If
and when I feel like it would be useful to express an opinion,
that does not automatically mean I think it would be useful to
explain it or justify it, or have any interest in doing so. For
me the first step is always understanding what it is the other
person is thinking (and hopefully vice versa); anything past
that is optional, and in most cases not worth pursuing.

Re: Effect of CPP tags

<uoklil$et2j$2@dont-email.me>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=49062&group=comp.lang.c#49062

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: jameskuyper@alumni.caltech.edu (James Kuyper)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Sun, 21 Jan 2024 21:57:25 -0500
Organization: A noiseless patient Spider
Lines: 31
Message-ID: <uoklil$et2j$2@dont-email.me>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me>
<4434vmp2fl.fsf@be-well.ilk.org> <87wmsyuj1l.fsf@nosuchdomain.example.com>
<20231228134234.49@kylheku.com> <87sf3lvs43.fsf@nosuchdomain.example.com>
<86y1cjiqpu.fsf@linuxsc.com> <20240120203343.615@kylheku.com>
<d1d7ac1e-63ff-41a0-9e3d-78e878b56afc@alumni.caltech.edu>
<a5f31f1747a49217b66c67f4deabd963@kylheku.com> <uojj7p$8crh$1@dont-email.me>
<20240121094637.874@kylheku.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Injection-Date: Mon, 22 Jan 2024 02:57:26 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="74d1c30c7548c2c7b2cee884ce9ac0bf";
logging-data="488531"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19/g8tv1O54cKoG6cr2YTlSdBAlQiN1HZo="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:YIj0PZ2WwnP1Q99ODgZv2F62YYM=
Content-Language: en-US
In-Reply-To: <20240121094637.874@kylheku.com>
 by: James Kuyper - Mon, 22 Jan 2024 02:57 UTC

On 1/21/24 12:55, Kaz Kylheku wrote:
> On 2024-01-21, James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
>> However, it seems more reasonable to me that whether or not something is
>> an extension is not supposed to be up to the implementor to decide.
>> Instead, anything that is an extension must be listed. This would be an
>> easier interpretation to defend if there were any explicit definition of
>> "extension" in the standard.
>
> The implication is that anything that works by accident must be listed
> as an extension. If function arguments happen to be evaluated left to
> right, with all side effects complete between them, this has to be
> listed as an extension. Then in the future when the vendor finds that
> inconvenient for further compiler work, they have to take away the
> extension.

No, that's unspecified behavior, if 4p9 were intended to be understood
as mandating documentation of all unspecified behavior, it would make
the category of implementation-defined behavior redundant.

Since extensions are also explicitly prohibited from changing the
behavior of strictly conforming code, I think that in order for
something qualify as an extension, it has to define behavior that the
standard leaves undefined. In a certain sense, every implementation
implicitly defines that behavior - whatever it is that actually happens
when the behavior is undefined is that definition. However, I think an
extension should have to be explicitly activated by some deliberate user
choice, such as a compiler option or by defining the behavior of some
kinds of syntax not allowed by the C standard. That's just IMHO, of
course - in the absence of a explicit definition in the standard, it's
hard to be sure what the committee intended.

Re: Effect of CPP tags

<86il3ieo0t.fsf@linuxsc.com>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=49252&group=comp.lang.c#49252

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!rocksolid2!news.neodome.net!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: tr.17687@z991.linuxsc.com (Tim Rentsch)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Wed, 24 Jan 2024 07:42:26 -0800
Organization: A noiseless patient Spider
Lines: 90
Message-ID: <86il3ieo0t.fsf@linuxsc.com>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me> <4434vmp2fl.fsf@be-well.ilk.org> <87wmsyuj1l.fsf@nosuchdomain.example.com> <20231228134234.49@kylheku.com> <87sf3lvs43.fsf@nosuchdomain.example.com> <86y1cjiqpu.fsf@linuxsc.com> <20240120203343.615@kylheku.com> <d1d7ac1e-63ff-41a0-9e3d-78e878b56afc@alumni.caltech.edu> <a5f31f1747a49217b66c67f4deabd963@kylheku.com> <uojj7p$8crh$1@dont-email.me> <20240121094637.874@kylheku.com> <uoklil$et2j$2@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Info: dont-email.me; posting-host="081b48eb4d739c8d0f1cd5168e73e868";
logging-data="1967494"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19MDwNdcs8/zsVPoPj2CyyA6qntotfSQu8="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:J5hrcpS/fKfosHRPv6U1YgDgll4=
sha1:jHe+AIF/2C8d04ACBQWHkEOGJ38=
 by: Tim Rentsch - Wed, 24 Jan 2024 15:42 UTC

James Kuyper <jameskuyper@alumni.caltech.edu> writes:

> On 1/21/24 12:55, Kaz Kylheku wrote:
>
>> On 2024-01-21, James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
>>
>>> However, it seems more reasonable to me that whether or not
>>> something is an extension is not supposed to be up to the
>>> implementor to decide. Instead, anything that is an extension
>>> must be listed. This would be an easier interpretation to defend
>>> if there were any explicit definition of "extension" in the
>>> standard.
>>
>> The implication is that anything that works by accident must be
>> listed as an extension. If function arguments happen to be
>> evaluated left to right, with all side effects complete between
>> them, this has to be listed as an extension. Then in the future
>> when the vendor finds that inconvenient for further compiler work,
>> they have to take away the extension.
>
> No, that's unspecified behavior, if 4p9 were intended to be
> understood as mandating documentation of all unspecified behavior,
> it would make the category of implementation-defined behavior
> redundant.

Quite so.

> Since extensions are also explicitly prohibited from changing the
> behavior of strictly conforming code, I think that in order for
> something qualify as an extension, it has to define behavior that
> the standard leaves undefined.

The essential property of an extension is that it must specify a
language feature or library feature that is not specified in the C
standard. Implementations are free to /define/ undefined behavior
any way they want, and doing so doesn't require an extension; the
point of documenting an extension is to /specify what happens/ in
certain cases, which also means giving a guarantee that what is
documented is what will happen (with the understanding that the
guarantee is only that the implementation will make its best
efforts to do so, because some results are outside of an
implementation's ability to control).

(I note in passing that an odd consequence of how the C standard
uses certain terminology is that "defining" something doesn't stop
it from being "undefined". The term "undefined behavior" is thus
something of a misnomer. But I digress.)

Conversely, an extension can specify a feature that is not, or
might not be, undefined behavior, but still needs to be documented
as an extension. For example

#include <foo.h>

is not undefined behavior, but must be documented as an extension
if the header <foo.h> is part of the implementation, because what
is in the header <foo.h> is not specified in the C standard.
Similarly, a declaration like

typedef __uint128_t U128;

is not necessarily undefined behavior, because implementations are
free to define reserved identifiers any way they wish. But if it's
important that it work, then it must be documented as an extension,
as otherwise an implementation is free to reject it by virtue of
using a language feature not specified in the C standard (which
therefore means the program is not strictly conforming, and so can
be rejected).

> In a certain sense, every
> implementation implicitly defines that behavior - whatever it is
> that actually happens when the behavior is undefined is that
> definition. However, I think an extension should have to be
> explicitly activated by some deliberate user choice, such as a
> compiler option or by defining the behavior of some kinds of
> syntax not allowed by the C standard. That's just IMHO, of course
> - in the absence of a explicit definition in the standard, it's
> hard to be sure what the committee intended.

That's a QOI issue. I'm not convinced that it's a good idea in
all cases. For example, either of the two cases mentioned above:

#include <foo.h>

typedef __uint128_t U128;

do not IMO need an explicit user action to activate, because it's
obvious they are making use of extensions, and are pretty unlikely
to occur by accident. I concede however that other people may
reasonably hold other views on that question.

Re: Effect of CPP tags

<86wmrp9qt8.fsf@linuxsc.com>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=49861&group=comp.lang.c#49861

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: tr.17687@z991.linuxsc.com (Tim Rentsch)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Wed, 31 Jan 2024 12:43:47 -0800
Organization: A noiseless patient Spider
Lines: 56
Message-ID: <86wmrp9qt8.fsf@linuxsc.com>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me> <4434vmp2fl.fsf@be-well.ilk.org> <87wmsyuj1l.fsf@nosuchdomain.example.com> <20231228134234.49@kylheku.com> <87sf3lvs43.fsf@nosuchdomain.example.com> <86y1cjiqpu.fsf@linuxsc.com> <20240120203343.615@kylheku.com> <d1d7ac1e-63ff-41a0-9e3d-78e878b56afc@alumni.caltech.edu> <a5f31f1747a49217b66c67f4deabd963@kylheku.com> <uojj7p$8crh$1@dont-email.me> <20240121094637.874@kylheku.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Info: dont-email.me; posting-host="fb4244b8d2c04d3d864a981f3fa61ba0";
logging-data="1778188"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19jVFEHzd9dd3sakjfe60UcBFuGxSXmwkw="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:Yp0Y1/qSDUGUEaO6wM0cYUqnLaA=
sha1:WPURyp7FVVYV7bCayzoE47Ms6QA=
 by: Tim Rentsch - Wed, 31 Jan 2024 20:43 UTC

Kaz Kylheku <433-929-6894@kylheku.com> writes:

> On 2024-01-21, James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
>
>> However, it seems more reasonable to me that whether or not something is
>> an extension is not supposed to be up to the implementor to decide.
>> Instead, anything that is an extension must be listed. This would be an
>> easier interpretation to defend if there were any explicit definition of
>> "extension" in the standard.
>
> The implication is that anything that works by accident must be
> listed as an extension. If function arguments happen to be
> evaluated left to right, with all side effects complete between
> them, this has to be listed as an extension. Then in the future
> when the vendor finds that inconvenient for further compiler work,
> they have to take away the extension.
>
> I don't see how it can not be the implementor's privilege to
> assert what is reliable for use and documented, versus what is
> not.

It's important to understand what constitutes an extension. And
there are different kinds of extensions.

If an implementation chooses, say, to evaluate function arguments
always left-to-right, that is perfectly okay (and need not be an
extension). But if an there is to be a /guarantee/ that function
arguments will always be evaluated left-to-right, that means
providing a guarantee that the C standard does not; thus we have an
extension (to the requirements in the C standard), and the extension
must be documented. This case is one kind of extension.

If an implementation chooses to alter the semantics of, for example,
an extern declaration inside a function body, so that the declared
identifier has file scope rather than block scope, that is a
different kind of extension. At the point of the extern declaration
we can't actually detect any difference. A subsequent use, however,
outside the function body, would normally be a constraint violation
and so require a diagnostic, but under the altered semantics the
identifier has already been declared and so no diagnostic is needed.
(Note that this behavior is one of the cases listed in Annex J.5,
"Common extensions".) This example illustrates a second kind of
extension, and they always must be documented as such.

If an implementation chooses to define, for example, __uint128_t to
be the name of an integer type, that represents a third kind of
extension. (Annex J.5 also mentions such definitions as an example
on its list of "Common extensions".) Such cases must be documented
as extensions because, one, the expected default is that there be no
definition (which normally would cause a diagnostic because of some
constraint violation), and two, only the implementation is in a
position to know if the symbol in question was defined by the
implementation or by something else. Clearly any definition the
implementation provides signals a change from the expected default,
which by any reasonable definition of the word constitutes an
extension, and hence must be documented.

Re: Effect of CPP tags

<87cythrxip.fsf@nosuchdomain.example.com>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=49867&group=comp.lang.c#49867

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!nntp.comgw.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Keith.S.Thompson+u@gmail.com (Keith Thompson)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Wed, 31 Jan 2024 13:41:34 -0800
Organization: None to speak of
Lines: 53
Message-ID: <87cythrxip.fsf@nosuchdomain.example.com>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me>
<4434vmp2fl.fsf@be-well.ilk.org>
<87wmsyuj1l.fsf@nosuchdomain.example.com>
<20231228134234.49@kylheku.com>
<87sf3lvs43.fsf@nosuchdomain.example.com> <86y1cjiqpu.fsf@linuxsc.com>
<20240120203343.615@kylheku.com>
<d1d7ac1e-63ff-41a0-9e3d-78e878b56afc@alumni.caltech.edu>
<a5f31f1747a49217b66c67f4deabd963@kylheku.com>
<uojj7p$8crh$1@dont-email.me> <20240121094637.874@kylheku.com>
<86wmrp9qt8.fsf@linuxsc.com>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Info: dont-email.me; posting-host="e9ab33cd51e38659416bab92bcd2f21f";
logging-data="1798154"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18h1cSSbLxA6zQ/o+sfPtbF"
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)
Cancel-Lock: sha1:auDh5pSs8LWI/HPENElOiHAAQtc=
sha1:ErM3wYAWmJxiNh9+fEJKfkofQFE=
 by: Keith Thompson - Wed, 31 Jan 2024 21:41 UTC

Tim Rentsch <tr.17687@z991.linuxsc.com> writes:
> Kaz Kylheku <433-929-6894@kylheku.com> writes:
> It's important to understand what constitutes an extension. And
> there are different kinds of extensions.
>
> If an implementation chooses, say, to evaluate function arguments
> always left-to-right, that is perfectly okay (and need not be an
> extension). But if an there is to be a /guarantee/ that function
> arguments will always be evaluated left-to-right, that means
> providing a guarantee that the C standard does not; thus we have an
> extension (to the requirements in the C standard), and the extension
> must be documented. This case is one kind of extension.

If an implementation chooses to guarantee left-to-right evaluation, I
don't see anything in the standard that requires that guarantee to be
documented. (Of course it can and should be.)

It's not entirely clear to me exactly what must or must not be
considered to be an "extension" as the C standard uses the term. The
standard doesn't show the word "extension" in italics or provide a
definition in section 3.

Unless your point is that it's not a guarantee unless it's documented?
But I don't see that that documentation is required *by the standard*.

[...]

> If an implementation chooses to define, for example, __uint128_t to
> be the name of an integer type, that represents a third kind of
> extension. (Annex J.5 also mentions such definitions as an example
> on its list of "Common extensions".) Such cases must be documented
> as extensions because, one, the expected default is that there be no
> definition (which normally would cause a diagnostic because of some
> constraint violation), and two, only the implementation is in a
> position to know if the symbol in question was defined by the
> implementation or by something else. Clearly any definition the
> implementation provides signals a change from the expected default,
> which by any reasonable definition of the word constitutes an
> extension, and hence must be documented.

Again, that can and should be documented, but since any use of the
identifer __uint128_t has undefined behavior, I don't see any
requirement in the standard that it must be documented.

(Aside: gcc has an extension adding __int128 as a keyword, supporting
types "__int128" and "unsigned __int128", but only on some target
systems. These do not qualify as extended integer types. I understand
that "__uint128_t" was a hypothetical example.)

--
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
Working, but not speaking, for Medtronic
void Void(void) { Void(); } /* The recursive call of the void */

Re: Effect of CPP tags

<upfk6t$1vt73$1@dont-email.me>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=49897&group=comp.lang.c#49897

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: david.brown@hesbynett.no (David Brown)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Thu, 1 Feb 2024 09:19:40 +0100
Organization: A noiseless patient Spider
Lines: 35
Message-ID: <upfk6t$1vt73$1@dont-email.me>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me>
<4434vmp2fl.fsf@be-well.ilk.org> <87wmsyuj1l.fsf@nosuchdomain.example.com>
<20231228134234.49@kylheku.com> <87sf3lvs43.fsf@nosuchdomain.example.com>
<86y1cjiqpu.fsf@linuxsc.com> <20240120203343.615@kylheku.com>
<d1d7ac1e-63ff-41a0-9e3d-78e878b56afc@alumni.caltech.edu>
<a5f31f1747a49217b66c67f4deabd963@kylheku.com> <uojj7p$8crh$1@dont-email.me>
<20240121094637.874@kylheku.com> <86wmrp9qt8.fsf@linuxsc.com>
<87cythrxip.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Thu, 1 Feb 2024 08:19:41 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="a04b42576799853a16182ef36d2318ae";
logging-data="2094307"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+ANsUkd3ntk703WTtRI7nToSksyZeX4Qc="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
Thunderbird/102.11.0
Cancel-Lock: sha1:Bq3IulLf9ouLEadaDZAGoT6aJN4=
Content-Language: en-GB
In-Reply-To: <87cythrxip.fsf@nosuchdomain.example.com>
 by: David Brown - Thu, 1 Feb 2024 08:19 UTC

On 31/01/2024 22:41, Keith Thompson wrote:
> Tim Rentsch <tr.17687@z991.linuxsc.com> writes:
>> Kaz Kylheku <433-929-6894@kylheku.com> writes:
>> It's important to understand what constitutes an extension. And
>> there are different kinds of extensions.
>>
>> If an implementation chooses, say, to evaluate function arguments
>> always left-to-right, that is perfectly okay (and need not be an
>> extension). But if an there is to be a /guarantee/ that function
>> arguments will always be evaluated left-to-right, that means
>> providing a guarantee that the C standard does not; thus we have an
>> extension (to the requirements in the C standard), and the extension
>> must be documented. This case is one kind of extension.
>
> If an implementation chooses to guarantee left-to-right evaluation, I
> don't see anything in the standard that requires that guarantee to be
> documented. (Of course it can and should be.)
>

I would say that a "guarantee" is a promise - in this case, from the
compiler writers to compiler users. It's not a guarantee if they don't
tell anyone! Then it's just an implementation detail. But I don't see
that it has to be documented in any particular way, or called an
"extension". IIRC MSVC's "guarantee" that it won't use type-based alias
analysis for optimisation (and thus casting between pointer types will
work as some people think they should work) is "documented" in a blog
post by one of the compiler developers.

Of course it is up to the user to decide how much they trust the
guaranteed additional behaviour. A mailing list post with "We'll
evaluate left to right, or your money back!" or a note in a blog page
would probably not inspire as much confidence as clear information in
the main reference documentation for a compiler.

Re: Effect of CPP tags

<86bk8m4g36.fsf@linuxsc.com>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=50810&group=comp.lang.c#50810

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: tr.17687@z991.linuxsc.com (Tim Rentsch)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Sun, 11 Feb 2024 17:38:21 -0800
Organization: A noiseless patient Spider
Lines: 114
Message-ID: <86bk8m4g36.fsf@linuxsc.com>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me> <4434vmp2fl.fsf@be-well.ilk.org> <87wmsyuj1l.fsf@nosuchdomain.example.com> <20231228134234.49@kylheku.com> <87sf3lvs43.fsf@nosuchdomain.example.com> <86y1cjiqpu.fsf@linuxsc.com> <20240120203343.615@kylheku.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Info: dont-email.me; posting-host="354d2f36c9690da15a8ae0972e0ffebc";
logging-data="1275019"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18Nkge2O+8SEPg2wuivwaO0uNPHT8MqWZY="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:9N3QkUsKA7TVQoR1U5GqiLUy7t0=
sha1:r+5uJpP0flwaQU0qIuGLxKwPDqk=
 by: Tim Rentsch - Mon, 12 Feb 2024 01:38 UTC

Kaz Kylheku <433-929-6894@kylheku.com> writes:

> On 2024-01-20, Tim Rentsch <tr.17687@z991.linuxsc.com> wrote:
>
>> Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:
>>
>>> [...] Just including <unistd.h> has undefined behavior as far as
>>> ISO C is concerned, [...]
>>
>> Not true. The behavior of #include <unistd.h> is defined in
>> section 6.10.2 p2. One of two things is true: either the header
>> named is part of the implementation, or it isn't. If the named
>> header is part of the implementation, then it constitutes a
>> language extension, and so it must be documented (and defined).
>
> The problem with this reasoning is
>
> 1. Implementations in fact have internal headers that are not
> documented, and which are not supposed to be included directly.
> You will not get documentation for every single header that
> is accessible via #include, and it is not reasonable for ISO C to
> require it. I don't see where it does.

First, James Kuyper already identified section 4 paragraph 9.

Second, implementations do have lots of internal headers that are
not meant to be included directly, but just because such headers
exist doesn't mean they can be #include'd. Consider these lines
at the start of <bits/byteswap.h>

#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H
# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
#endif

Clearly implementations can and do distinguish between headers
that are meant to be user #include-able and those that are not,
and take steps to protect the hidden ones. It seems obvious
that implementations consider it reasonable to document headers
that are meant to be user #include-able, and to protect the
hidden headers so they can't be #included directly, because
that is what existing implementations do.

> 2. A documented extension continues to be undefined behavior.
> The behavior is "defined", but not "ISO C defined". So even
> if all the implementation's internal headers were documented
> as extensions, their use would still be UB.
>
> Undefined behavior is for which "this document imposes not
> requirements", right?
>
> It is not behavior for which "this document, together with the
> ocumentation accompanying a given implementation, imposes
> no requirements". Just "this document" (and no other).
>
> If "this document" imposes no requirements, it's "undefined
> behavior", no matter who or what imposes additional requirements!

Your logic here is all messed up. The very first sentence uses
circular reasoning. Next you ignore the point that the "define" in
section 4 paragraph 9 is a Standard-imposed requirement, and surely
the Standard means to require that implementations obey their own
definitions, because that's what "define" means. The idea that
having to document extensions doesn't imply an ISO C requirement is
just being obtuse.

Perhaps a more fundamental flaw is you have the key implication
backwards. IF using a particular program construct or data value
has been identified as undefined behavior, THEN the C standard
imposes no requirements on those uses. The implication doesn't go
the other way. For example, the C standard imposes no requirements
for what happens on Tuesdays. That does not mean that compiling a
program on a Tuesday is undefined behavior. The universe of
discourse is program constructs and data values ("values" here also
includes things such as trap representations). Saying "an unknown
header is undefined behavior" is meaningless, because it's outside
the universe of discourse, just like Tuesdays are. The C construct
in question is "#include <unistd.h>", and the C standard defines
behavior for that construct.

> Intuitively, a header which is part of an implementation can do
> anything. For instance #include <pascal.h> can cause the rest of
> the translation unit to be analyzed as Pascal syntax, and not C.
>
> An implementation can provide a header <reboot.h>, including
> which causes a reboot at compile time, link time, or
> execution time.
>
> If such headers happen to exist, what in the standard is violated?

More bad logic. Of course the contents of a header or #include'd
file can have, for example, syntax errors, that result in crossing
the line into undefined behavior. The question is not whether an
unknown header /can/ cross the line into undefined behavior but
whether it /must/ cross that line. Whether a #include of an unknown
header encounters undefined behavior depends on the contents of the
header, and nothing else. A #include <unistd.h> MIGHT cross the
line into UB land, but there is nothing that says it MUST cross that
line.

Note by the way that exactly the same reasoning applies to an
unknown source file, such as #include "foo.h". If we don't know
what's in foo.h (maybe it was left by a hacker in a little-used
byway of where the implementation looks for #include'd source
files), then undefined behavior is possible, but whether UB
actually happens depends only on the contents of the file, not on
whether we know what's in it.

> I used to experience a lot of push-back against the above views,
> but I'm seeing that people are coming around.

I expect that is simply a consequence of your dogged persistence
and the brighter people dropping out of the conversations. It's
not whether some people start to be convinced, but rather which
people are convinced, and how firmly convinced, and why.

Re: Effect of CPP tags

<kglotidbu6cjn4tdso7r73go1hheuak365@4ax.com>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=51479&group=comp.lang.c#51479

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: dave_thompson_2@comcast.net
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Mon, 26 Feb 2024 04:17:30 -0500
Organization: A noiseless patient Spider
Lines: 36
Message-ID: <kglotidbu6cjn4tdso7r73go1hheuak365@4ax.com>
References: <20240111133742.530@kylheku.com> <unpt44$35qn1$1@dont-email.me> <unrfgs$3fo6l$1@dont-email.me> <unrocu$3h2ah$1@dont-email.me> <65eoN.26119$9cLc.94@fx02.iad> <uo8cuc$1vhf8$1@dont-email.me> <20240117102412.168@kylheku.com> <uo9aju$2610i$1@dont-email.me> <7nYpN.354614$83n7.12579@fx18.iad> <uo9p0e$286f8$1@dont-email.me> <20240117161344.847@kylheku.com> <uo9sfu$28k8t$1@dont-email.me> <20240117181142.279@kylheku.com> <uoaucc$2i2b6$1@dont-email.me> <20240118113155.496@kylheku.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Injection-Info: dont-email.me; posting-host="4fc000dd80b5f2898b8276ffc73dd31d";
logging-data="2591599"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/ksCoCGj2f/cnbwGyhg+XlfYg2cxvGgpw="
Cancel-Lock: sha1:053xLY60XDvxXjUamAAtLWVOaHs=
X-Newsreader: Forte Agent 3.3/32.846
 by: dave_thompson_2@comcast.net - Mon, 26 Feb 2024 09:17 UTC

On Thu, 18 Jan 2024 19:40:44 -0000 (UTC), Kaz Kylheku
<433-929-6894@kylheku.com> wrote:

> On 2024-01-18, bart <bc@freeuk.com> wrote:

> > All I know about PowerShell is that instead of typing 'prog' to run the
> > 'prog.exe' you've just created, you have to do '.\prog' just like you
> > have to do './prog' in Linux.
>
That's not true for 'prog', but is true for any name of a PS cmdlet or
alias. In that case you must use a pathname (which can be EITHER
..\name OR ./name) OR name.exe.

CMD has some builtins which similarly make program files inaccessible
by simple name, but fewer. The ones I recall off the top of my head
are cd pushd popd dir mkdir md rmdir rd erase type set rem. And here
..\name or name.exe works but not ./name.

> I don't know anything about PowerShell. In the case of the POSIX-like
> shells, this is just a consequence of the . directory not being listed
> in the PATH variable, which is an end-user configuration matter.
>
> If you care about the convenience of just typing "prog", more than
> about the security aspect, you can just add . to your PATH.
>
No. In PS (_and_ in CMD) current directory aka dot is _always_ tried
even if it's not in PATH (which by default it isn't). But cmdlets and
aliases or builtins are tried first and override any file, per above.

Unix shells similarly won't find by simple name a program in . even
when . IS in PATH if the name is a builtin or keyword like 'cd' or
'if' or 'test' (probably the most popular name to encounter this
error), or a function or alias (shells don't come with lots of aliases
predefined like PS, but many distros or users add them).

Re: Effect of CPP tags

<Lw2DN.586146$p%Mb.87073@fx15.iad>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=51499&group=comp.lang.c#51499

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!fx15.iad.POSTED!not-for-mail
X-newsreader: xrn 9.03-beta-14-64bit
Sender: scott@dragon.sl.home (Scott Lurndal)
From: scott@slp53.sl.home (Scott Lurndal)
Reply-To: slp53@pacbell.net
Subject: Re: Effect of CPP tags
Newsgroups: comp.lang.c
References: <20240111133742.530@kylheku.com> <unrfgs$3fo6l$1@dont-email.me> <unrocu$3h2ah$1@dont-email.me> <65eoN.26119$9cLc.94@fx02.iad> <uo8cuc$1vhf8$1@dont-email.me> <20240117102412.168@kylheku.com> <uo9aju$2610i$1@dont-email.me> <7nYpN.354614$83n7.12579@fx18.iad> <uo9p0e$286f8$1@dont-email.me> <20240117161344.847@kylheku.com> <uo9sfu$28k8t$1@dont-email.me> <20240117181142.279@kylheku.com> <uoaucc$2i2b6$1@dont-email.me> <20240118113155.496@kylheku.com> <kglotidbu6cjn4tdso7r73go1hheuak365@4ax.com>
Lines: 18
Message-ID: <Lw2DN.586146$p%Mb.87073@fx15.iad>
X-Complaints-To: abuse@usenetserver.com
NNTP-Posting-Date: Mon, 26 Feb 2024 15:56:27 UTC
Organization: UsenetServer - www.usenetserver.com
Date: Mon, 26 Feb 2024 15:56:27 GMT
X-Received-Bytes: 1825
 by: Scott Lurndal - Mon, 26 Feb 2024 15:56 UTC

dave_thompson_2@comcast.net writes:
>On Thu, 18 Jan 2024 19:40:44 -0000 (UTC), Kaz Kylheku
><433-929-6894@kylheku.com> wrote:
>
>> On 2024-01-18, bart <bc@freeuk.com> wrote:
>
>> > All I know about PowerShell is that instead of typing 'prog' to run the
>> > 'prog.exe' you've just created, you have to do '.\prog' just like you
>> > have to do './prog' in Linux.
>>
>That's not true for 'prog', but is true for any name of a PS cmdlet or
>alias. In that case you must use a pathname (which can be EITHER
>.\name OR ./name) OR name.exe.

Actually, on linux, one can just do 'prog', if PATH includes
an path element containing a single dot. One generally doesn't
do this, but it is certainly possible.

Re: Effect of CPP tags

<867ci4owhc.fsf@linuxsc.com>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=52083&group=comp.lang.c#52083

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: tr.17687@z991.linuxsc.com (Tim Rentsch)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Thu, 14 Mar 2024 23:11:27 -0700
Organization: A noiseless patient Spider
Lines: 128
Message-ID: <867ci4owhc.fsf@linuxsc.com>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me> <4434vmp2fl.fsf@be-well.ilk.org> <87wmsyuj1l.fsf@nosuchdomain.example.com> <20231228134234.49@kylheku.com> <87sf3lvs43.fsf@nosuchdomain.example.com> <86y1cjiqpu.fsf@linuxsc.com> <20240120203343.615@kylheku.com> <d1d7ac1e-63ff-41a0-9e3d-78e878b56afc@alumni.caltech.edu> <a5f31f1747a49217b66c67f4deabd963@kylheku.com> <uojj7p$8crh$1@dont-email.me> <20240121094637.874@kylheku.com> <86wmrp9qt8.fsf@linuxsc.com> <87cythrxip.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Info: dont-email.me; posting-host="ebc16c50d4d7433bc8cd997a3211d402";
logging-data="2261931"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX186hASSO1uOzPF8T87qL4Zj5knHWXndqx4="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:ucqCiUr0XucIXEtpR9orVbWiRUg=
sha1:QRjBpmqDj6tvguuEn2Tmut2e0lw=
 by: Tim Rentsch - Fri, 15 Mar 2024 06:11 UTC

Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:

> Tim Rentsch <tr.17687@z991.linuxsc.com> writes:
>
>> Kaz Kylheku <433-929-6894@kylheku.com> writes:
>> It's important to understand what constitutes an extension. And
>> there are different kinds of extensions.
>>
>> If an implementation chooses, say, to evaluate function arguments
>> always left-to-right, that is perfectly okay (and need not be an
>> extension). But if an there is to be a /guarantee/ that function
>> arguments will always be evaluated left-to-right, that means
>> providing a guarantee that the C standard does not; thus we have an
>> extension (to the requirements in the C standard), and the extension
>> must be documented. This case is one kind of extension.
>
> If an implementation chooses to guarantee left-to-right evaluation, I
> don't see anything in the standard that requires that guarantee to be
> documented. (Of course it can and should be.)
>
> It's not entirely clear to me exactly what must or must not be
> considered to be an "extension" as the C standard uses the term. The
> standard doesn't show the word "extension" in italics or provide a
> definition in section 3.
>
> Unless your point is that it's not a guarantee unless it's documented?
> But I don't see that that documentation is required *by the standard*.

It seems likely that we have different notions of what "a guarantee"
is. As I am using the term it does not mean a statement of what
does happen but a promise for what will happen. Consulting some
online dictionaries, I find the following definitions (among others
that for the most part are not relevant). Note that all of these
are for "guarantee" used as a noun (presented in the order of
shortest first):

an assurance for the fulfillment of a condition

Something that assures a particular outcome or condition.

A pledge that something will be performed in a specified
manner.

an unconditional commitment that something will happen or
that something is true

a written assurance that some product or service will be
provided or will meet certain specifications

A promise or assurance, especially one given in writing, that
attests to the quality or durability of a product or service.

a promise or assurance, especially one in writing, that
something is of specified quality, content, benefit, etc.,
or that it will perform satisfactorily for a given length of
time: "a money-back guarantee".

In the context of a C implementation, for some condition to be a
guarantee I would say it must be written down (which is to say,
documented), as otherwise it doesn't qualify as a guarantee. In
any case that is how I am using the term.

Incidentally, as best I can determine the C standard uses the
term "guarantee" as a noun in only one place in normative text
(6.5.2.3 p6) and in two places in informative text (5.1.2.4 p23
and a footnote to 7.22.2.1 p2). Various forms of "guarantee"
used as a verb appear in the C standard in lots of places. I am
specifically using the noun form in my comments here.

I think most people would agree that any documented guarantee of
behavior beyond what the C standard requires of all implementations
(and is not part of the documentation for implementation-defined
behaviors) qualifies as an extension to the C language, and thus
should be considered an extension as the ISO C standard uses the
term, given that the C standard itself does not define the term
but (one assumes) uses the word in its ordinary English sense.

> [...]
>
>> If an implementation chooses to define, for example, __uint128_t to
>> be the name of an integer type, that represents a third kind of
>> extension. (Annex J.5 also mentions such definitions as an example
>> on its list of "Common extensions".) Such cases must be documented
>> as extensions because, one, the expected default is that there be no
>> definition (which normally would cause a diagnostic because of some
>> constraint violation), and two, only the implementation is in a
>> position to know if the symbol in question was defined by the
>> implementation or by something else. Clearly any definition the
>> implementation provides signals a change from the expected default,
>> which by any reasonable definition of the word constitutes an
>> extension, and hence must be documented.
>
> Again, that can and should be documented, but since any use of the
> identifer __uint128_t has undefined behavior,

That isn't right. The C standard says that declaring or defining a
reserved identifier is undefined behavior. The C standard does NOT
say that using a reserved identifier is undefined behavior. If an
implementation does not define an identifier like __uint128_t, then
any use in ordinary code (that is, not part of a pre-processor
directive) should produce a diagnostic due to a syntax or constraint
violation. If we don't get a diagnostic we know that the identifier
/must/ have been defined by the implementation, and because it is a
change in behavior over standard C it must be documented as an
extension.

(Note added during editing: "any use in ordinary code" is meant in
the sense of "a use that is not a declaration or definition".)

> I don't see any
> requirement in the standard that it must be documented.

It must be documented because it represents a change in behavior
over what the C standard requires, and any such change constitutes
an extension to the language, and the C standard requires extensions
to be documented.

> (Aside: gcc has an extension adding __int128 as a keyword, supporting
> types "__int128" and "unsigned __int128", but only on some target
> systems. These do not qualify as extended integer types. I understand
> that "__uint128_t" was a hypothetical example.)

On the systems I use the identifiers __int128_t and __uint128_t are
both predefined type names (and not keywords), under both gcc and
clang. I see some support for __int128 as a keyword, but the
predefined type names seem to be more reliable (at least in my
environments).

Re: Effect of CPP tags

<8634ssowfk.fsf@linuxsc.com>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=52084&group=comp.lang.c#52084

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: tr.17687@z991.linuxsc.com (Tim Rentsch)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Thu, 14 Mar 2024 23:12:31 -0700
Organization: A noiseless patient Spider
Lines: 6
Message-ID: <8634ssowfk.fsf@linuxsc.com>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me> <4434vmp2fl.fsf@be-well.ilk.org> <87wmsyuj1l.fsf@nosuchdomain.example.com> <20231228134234.49@kylheku.com> <87sf3lvs43.fsf@nosuchdomain.example.com> <86y1cjiqpu.fsf@linuxsc.com> <20240120203343.615@kylheku.com> <d1d7ac1e-63ff-41a0-9e3d-78e878b56afc@alumni.caltech.edu> <a5f31f1747a49217b66c67f4deabd963@kylheku.com> <uojj7p$8crh$1@dont-email.me> <20240121094637.874@kylheku.com> <86wmrp9qt8.fsf@linuxsc.com> <87cythrxip.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Info: dont-email.me; posting-host="ebc16c50d4d7433bc8cd997a3211d402";
logging-data="2261931"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/bI/y9RDT26LMC6cevPFkRDE1oCO6/JyQ="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:O1A8TPi7PbkDEG9csQbkcrvGcGw=
sha1:UQbtN7XA3vJVfym3Hd4E1hdYzn4=
 by: Tim Rentsch - Fri, 15 Mar 2024 06:12 UTC

Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:

[...]

P.S. My apologies for not responding to your posting earlier.

Re: Effect of CPP tags

<874jd83rw4.fsf@nosuchdomain.example.com>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=52085&group=comp.lang.c#52085

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Keith.S.Thompson+u@gmail.com (Keith Thompson)
Newsgroups: comp.lang.c
Subject: Re: Effect of CPP tags
Date: Thu, 14 Mar 2024 23:56:11 -0700
Organization: None to speak of
Lines: 34
Message-ID: <874jd83rw4.fsf@nosuchdomain.example.com>
References: <umet9d$3hir9$1@dont-email.me> <umk836$ehn5$1@dont-email.me>
<4434vmp2fl.fsf@be-well.ilk.org>
<87wmsyuj1l.fsf@nosuchdomain.example.com>
<20231228134234.49@kylheku.com>
<87sf3lvs43.fsf@nosuchdomain.example.com> <86y1cjiqpu.fsf@linuxsc.com>
<20240120203343.615@kylheku.com>
<d1d7ac1e-63ff-41a0-9e3d-78e878b56afc@alumni.caltech.edu>
<a5f31f1747a49217b66c67f4deabd963@kylheku.com>
<uojj7p$8crh$1@dont-email.me> <20240121094637.874@kylheku.com>
<86wmrp9qt8.fsf@linuxsc.com> <87cythrxip.fsf@nosuchdomain.example.com>
<867ci4owhc.fsf@linuxsc.com>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Info: dont-email.me; posting-host="1424ef631298fc5a748d3d307144615d";
logging-data="2275736"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18KIbq2rG/U27Il0q67Hf6h"
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)
Cancel-Lock: sha1:3dPCNiO9m0e8LvOoZXCmz2ZnRmM=
sha1:eUNX4G5VxVOCB3W2hcLVJBExrPQ=
 by: Keith Thompson - Fri, 15 Mar 2024 06:56 UTC

Tim Rentsch <tr.17687@z991.linuxsc.com> writes:
> Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:
[...]
>> (Aside: gcc has an extension adding __int128 as a keyword, supporting
>> types "__int128" and "unsigned __int128", but only on some target
>> systems. These do not qualify as extended integer types. I understand
>> that "__uint128_t" was a hypothetical example.)
>
> On the systems I use the identifiers __int128_t and __uint128_t are
> both predefined type names (and not keywords), under both gcc and
> clang. I see some support for __int128 as a keyword, but the
> predefined type names seem to be more reliable (at least in my
> environments).

That's odd. The gcc documentation describes __int128 as an extension:
https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/_005f_005fint128.html

As an extension the integer scalar type __int128 is supported for
targets which have an integer mode wide enough to hold 128
bits. Simply write __int128 for a signed 128-bit integer, or
unsigned __int128 for an unsigned 128-bit integer. There is no
support in GCC for expressing an integer constant of type __int128
for targets with long long integer less than 128 bits wide.

It doesn't mention __int128_t or __uint128_t at all, though I see it
does recognize both, and as you say it doesn't treat them as keywords.
Likewise for clang, though I haven't checked the clang documentation.

(I might reply to other parts of your post later.)

--
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
Working, but not speaking, for Medtronic
void Void(void) { Void(); } /* The recursive call of the void */

Re: NO vs. SE (was Re: Effect of CPP tags)

<87wmprakcj.fsf@fatphil.org>

  copy mid

https://news.novabbs.org/devel/article-flat.php?id=52404&group=comp.lang.c#52404

  copy link   Newsgroups: comp.lang.c
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: pc+usenet@asdf.org (Phil Carmody)
Newsgroups: comp.lang.c
Subject: Re: NO vs. SE (was Re: Effect of CPP tags)
Date: Sun, 24 Mar 2024 14:24:28 +0200
Organization: A noiseless patient Spider
Lines: 23
Message-ID: <87wmprakcj.fsf@fatphil.org>
References: <umet9d$3hir9$1@dont-email.me> <unpd89$33jlu$1@dont-email.me>
<20240111133742.530@kylheku.com> <unpt44$35qn1$1@dont-email.me>
<unrfgs$3fo6l$1@dont-email.me> <unrocu$3h2ah$1@dont-email.me>
<20240112132216.285@kylheku.com> <uo0je6$e8fv$1@dont-email.me>
<20240114115640.506@kylheku.com> <uo24di$lo8r$1@dont-email.me>
<uo3ilc$vjmt$1@dont-email.me> <YYdpN.177805$c3Ea.78753@fx10.iad>
<uo44ch$12fes$1@dont-email.me> <SLgpN.41334$5Hnd.11118@fx03.iad>
<uo62le$1finu$2@dont-email.me> <xMxpN.207476$PuZ9.33416@fx11.iad>
<uo6gcp$1i5rh$1@dont-email.me> <uo7r3e$1skfj$1@dont-email.me>
<87bk9i1xa6.fsf@tigger.extechop.net>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Info: dont-email.me; posting-host="693b6ff091b7ddffd157dd44787d2457";
logging-data="398195"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+F/TrisACqODHFUEKdCBX3"
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux)
Cancel-Lock: sha1:SqMNVQu2nIm5FN0jn+iy3VkIJIE=
sha1:jFtgPy/jbq5AdsnHXxUaQEGED7U=
 by: Phil Carmody - Sun, 24 Mar 2024 12:24 UTC

om@iki.fi (Otto J. Makela) writes:
> Janis Papanagnou <janis_papanagnou+ng@hotmail.com> wrote:
>> On 16.01.2024 19:03, David Brown wrote:
>>> [...], because they know that Norwegians are superior to Swedes in
>>> every way...
>>
>> I just wanted to reply on that but then I saw your email address... :-)
>
> A Finn smirking from the sidelines.

As if you have no rivalry with Swedes. What's the score? 5-1? Ooops, now
it's 5-6. We have a great view here from Estonia.

> /* Mail: Mechelininkatu 26 B 27, FI-00100 Helsinki */

Send my regards to Vastarannan Kiiski.

Phil
--
We are no longer hunters and nomads. No longer awed and frightened, as we have
gained some understanding of the world in which we live. As such, we can cast
aside childish remnants from the dawn of our civilization.
-- NotSanguine on SoylentNews, after Eugen Weber in /The Western Tradition/

Pages:123456789101112131415161718192021222324252627
server_pubkey.txt

rocksolid light 0.9.81
clearnet tor