• Re: Command Languages Versus Programming Languages

    From Jim Jackson@21:1/5 to Kaz Kylheku on Tue Apr 9 19:51:56 2024
    On 2024-04-09, Kaz Kylheku <[email protected]> wrote:
    On 2024-04-09, [email protected] <[email protected]> wrote:
    On Mon, 8 Apr 2024 19:32:21 -0000 (UTC)
    Kaz Kylheku <[email protected]> wrote:
    On 2024-04-08, [email protected] <[email protected]> wrote:
    On Mon, 8 Apr 2024 14:35:48 +0200
    David Brown <[email protected]> wrote:
    On 08/04/2024 09:47, [email protected] wrote:
    What makes you so sure about that? Are you assuming that because /you/ >>>>>are sexist, everyone else is?

    An immediate fallacious ad hominem no doubt in order to prop up whatever >>>> straw men follow.

    You wrote, "people like you ... would never use a male pronoun if
    talking about nurses", written by you, is already ad hominem;
    it's a direct accusation of hypocrisy, rather than focusing on the >>>argument content.

    Mine was correct in general, yours shows you don't understand the difference >> between sexism and realism.

    I've not addressed myself to that topic whatsoever, let alone revealed
    a position.


    He is easily confused - not worth arguing with.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From [email protected]@21:1/5 to Jim Jackson on Wed Apr 10 07:32:10 2024
    On Tue, 9 Apr 2024 19:51:56 -0000 (UTC)
    Jim Jackson <[email protected]> wrote:
    On 2024-04-09, Kaz Kylheku <[email protected]> wrote:
    On 2024-04-09, [email protected] <[email protected]> wrote:
    On Mon, 8 Apr 2024 19:32:21 -0000 (UTC)
    Kaz Kylheku <[email protected]> wrote:
    On 2024-04-08, [email protected] <[email protected]> wrote: >>>>> On Mon, 8 Apr 2024 14:35:48 +0200
    David Brown <[email protected]> wrote:
    On 08/04/2024 09:47, [email protected] wrote:
    What makes you so sure about that? Are you assuming that because /you/ >>>>>>are sexist, everyone else is?

    An immediate fallacious ad hominem no doubt in order to prop up whatever >>>>> straw men follow.

    You wrote, "people like you ... would never use a male pronoun if >>>>talking about nurses", written by you, is already ad hominem;
    it's a direct accusation of hypocrisy, rather than focusing on the >>>>argument content.

    Mine was correct in general, yours shows you don't understand the difference

    between sexism and realism.

    I've not addressed myself to that topic whatsoever, let alone revealed
    a position.


    He is easily confused - not worth arguing with.

    If no argument then
    patronise
    end if

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kenny McCormack@21:1/5 to [email protected] on Wed Apr 10 12:46:52 2024
    In article <uv5f9q$qojn$[email protected]>, <[email protected]> wrote:
    ...
    He is easily confused - not worth arguing with.

    If no argument then
    patronise
    end if

    Earlier, I said that when you find yourself in a hole, the first thing to
    do is to stop digging. Let me re-iterate that. Trying to defend this
    position online is a loser.

    Now, that said, it may surprise you to learn that I basically share your opinion about the state of the world (*). I just realize that arguing and defending it online is a loser.

    (*) I think the so-called "inclusive language" fad is stupid at best. But
    like all fads, you can't really fight it. You just have to wait for it to
    pass (as all fads eventually do).

    --
    I don't do things wrong.
    I do things right.

    I'm a legitimate person.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Janis Papanagnou@21:1/5 to Kenny McCormack on Wed Apr 10 15:24:37 2024
    On 10.04.2024 14:46, Kenny McCormack wrote:

    (*) I think the so-called "inclusive language" fad is stupid at best. But like all fads, you can't really fight it. You just have to wait for it to pass (as all fads eventually do).

    If it's institutionalized; "abandon all hope ye who enter here".

    Janis

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From [email protected]@21:1/5 to Kenny McCormack on Wed Apr 10 15:13:54 2024
    On Wed, 10 Apr 2024 12:46:52 -0000 (UTC)
    [email protected] (Kenny McCormack) wrote:
    (*) I think the so-called "inclusive language" fad is stupid at best. But >like all fads, you can't really fight it. You just have to wait for it to >pass (as all fads eventually do).

    The reason woke became so prevelant is because people were too timid to fight it where it mattered. The end result is it caused polarisation between left
    and right and the US ended up with Trump, poland ended up with a reactionary right wing government and hungary still has one. All this could have been avoided if the grown ups on the left had told the so called "progressive" kidults who were only ever a tiny minority to STFU but they didn't because
    they were and are cowards. And here we are.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kenny McCormack@21:1/5 to [email protected] on Wed Apr 10 16:21:32 2024
    In article <uv6abh$11f3e$[email protected]>, <[email protected]> wrote: >On Wed, 10 Apr 2024 12:46:52 -0000 (UTC)
    [email protected] (Kenny McCormack) wrote:
    (*) I think the so-called "inclusive language" fad is stupid at best. But >>like all fads, you can't really fight it. You just have to wait for it to >>pass (as all fads eventually do).

    The reason woke became so prevelant is because people were too timid to
    fight it where it mattered. The end result is it caused polarisation
    between left and right and the US ended up with Trump, Poland ended up
    with a reactionary right wing government and Hungary still has one.
    All this could have been avoided if the grown ups on the left had told
    the so called "progressive" kidults who were only ever a tiny minority
    to STFU but they didn't because they were and are cowards. And here we
    are.

    I can't disagree with any of this.

    --
    Shikata ga nai...

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kaz Kylheku@21:1/5 to [email protected] on Wed Apr 10 17:25:49 2024
    On 2024-04-10, [email protected] <[email protected]> wrote:
    On Tue, 9 Apr 2024 19:51:56 -0000 (UTC)
    Jim Jackson <[email protected]> wrote:
    On 2024-04-09, Kaz Kylheku <[email protected]> wrote:
    On 2024-04-09, [email protected] <[email protected]> wrote:
    I've not addressed myself to that topic whatsoever, let alone revealed
    a position.


    He is easily confused - not worth arguing with.

    If no argument then
    patronise
    end if

    Finally, you are correct. There is indeed no argument with you. The
    purpose of an argument is to persuade position changes, using reason.

    Why a reasoned position might change is that the reasoning was not
    adequately informed in some important point, or contained a mistake; but
    a it's a fool's errand to use reason to try to change an unreasoned
    position.

    --
    TXR Programming Language: http://nongnu.org/txr
    Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
    Mastodon: @[email protected]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From [email protected]@21:1/5 to Kaz Kylheku on Thu Apr 11 07:28:12 2024
    On Wed, 10 Apr 2024 17:25:49 -0000 (UTC)
    Kaz Kylheku <[email protected]> wrote:
    On 2024-04-10, [email protected] <[email protected]> wrote:
    On Tue, 9 Apr 2024 19:51:56 -0000 (UTC)
    Jim Jackson <[email protected]> wrote:
    On 2024-04-09, Kaz Kylheku <[email protected]> wrote:
    On 2024-04-09, [email protected] <[email protected]> wrote: >>>> I've not addressed myself to that topic whatsoever, let alone revealed >>>> a position.


    He is easily confused - not worth arguing with.

    If no argument then
    patronise
    end if

    Finally, you are correct. There is indeed no argument with you. The
    purpose of an argument is to persuade position changes, using reason.

    When you find any reasoning for your position do let me know.

    Why a reasoned position might change is that the reasoning was not
    adequately informed in some important point, or contained a mistake; but
    a it's a fool's errand to use reason to try to change an unreasoned
    position.

    Smug superiority does you no favours.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From [email protected]@21:1/5 to Kenny McCormack on Thu Apr 11 07:26:50 2024
    On Wed, 10 Apr 2024 16:21:32 -0000 (UTC)
    [email protected] (Kenny McCormack) wrote:
    In article <uv6abh$11f3e$[email protected]>, <[email protected]> wrote: >>On Wed, 10 Apr 2024 12:46:52 -0000 (UTC)
    [email protected] (Kenny McCormack) wrote:
    (*) I think the so-called "inclusive language" fad is stupid at best. But >>>like all fads, you can't really fight it. You just have to wait for it to >>>pass (as all fads eventually do).

    The reason woke became so prevelant is because people were too timid to >>fight it where it mattered. The end result is it caused polarisation >>between left and right and the US ended up with Trump, Poland ended up
    with a reactionary right wing government and Hungary still has one.
    All this could have been avoided if the grown ups on the left had told
    the so called "progressive" kidults who were only ever a tiny minority
    to STFU but they didn't because they were and are cowards. And here we
    are.

    I can't disagree with any of this.

    I forgot Italy - Meloni got voted in precisely as a reaction against the attempted introduction of so called progressive policies.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kenny McCormack@21:1/5 to [email protected] on Thu Apr 11 08:57:17 2024
    In article <uv83bq$1il3f$[email protected]>, <[email protected]> wrote: ...
    I can't disagree with any of this.

    I forgot Italy - Meloni got voted in precisely as a reaction against the >attempted introduction of so called progressive policies.


    And Virginia. Youngkin ran on "anti-woke".

    And Florida...

    --
    Every time a Republican gets caught doing something illegal (i.e., just about every
    day or two), they always immediately issue two simultaneous statements about it:
    1) "I didn't do it" (Standard denial, which of course only cult-members pay any attention to)
    2) "Here's how I did it and why I did it and why it shouldn't matter to you and why you should go back to watching sports on TV"

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Janis Papanagnou@21:1/5 to [email protected] on Thu Apr 11 11:19:37 2024
    On 11.04.2024 09:26, [email protected] wrote:
    On Wed, 10 Apr 2024 16:21:32 -0000 (UTC)
    [email protected] (Kenny McCormack) wrote:
    In article <uv6abh$11f3e$[email protected]>, <[email protected]> wrote: >>> On Wed, 10 Apr 2024 12:46:52 -0000 (UTC)

    The reason woke became so prevelant is because people were too timid to
    fight it where it mattered. The end result is it caused polarisation
    between left and right and the US ended up with Trump, Poland ended up
    with a reactionary right wing government and Hungary still has one.
    All this could have been avoided if the grown ups on the left had told
    the so called "progressive" kidults who were only ever a tiny minority
    to STFU but they didn't because they were and are cowards. And here we
    are.

    I can't disagree with any of this.

    I forgot Italy - Meloni got voted in precisely as a reaction against the attempted introduction of so called progressive policies.

    Rightist populists and neo-fascists grow all over Europe these days.

    I disagree with the (simplistic) argument that "progressive" policies
    would imply such evolution. Decades long "conservative" populism made
    the substrate for such mindset and fostered it! Nowadays they still
    seem to think that if instead of "progressive" policies they'd follow
    the rightists mindset they would be the party who get the rightists
    populists votes. Instead, of course, the rightists get yet more votes
    since they effectively got affirmed by such tactical appeasement moves.

    I agree that topics like the before mentioned "inclusive language"
    types of policies provide an easy entry that can be exploited by the
    rightist populists for their goals. I also agree that such themes have
    the property to contribute to (and probably to foster) polarization.

    [ followup-to alt.politics.international ] (That I don't read :-)

    Janis

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Andreas Kempe@21:1/5 to All on Sun Apr 14 17:11:02 2024
    Den 2024-03-29 skrev Lawrence D'Oliveiro <[email protected]d>:
    At one time, we distinguished between “scripting” languages and “programming” languages. To begin with, the “scripting” languages were
    somehow more limited in functionality than full-fledged “programming” languages. Or they were slower, because they were interpreted.


    I guess this could be a language thing since English is not my first
    language, but I have never encountered this distinction between
    programming languages and scripting languages before. I have always
    seen scripting languages as a subset of programming languages. In
    Swedish, scripting languages are referred to as programspråk or programmeringsspråk, i.e. program languages or programming languages,
    just as C/C++/whatever.

    My personal view of a scripting languages' defining trait has been that
    you distribute human readable code for a scripting language. You don't
    compile it to something else before shipping it to the consumer. It is
    always translated or interpreted by the consumer, but as all rules
    have exceptions, I'm sure there are some good ones to this as well.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Janis Papanagnou@21:1/5 to [email protected] on Sun Oct 13 14:29:00 2024
    [ X-post list reduced ]

    On 13.10.2024 10:18, [email protected] wrote:
    [...]

    I disagree. Modern linux reminds me a lot of SunOS and HP-UX from back in
    the day. Not something that can be said for MacOS with its role-our-own
    Apple specific way of doing pretty much everything.

    I've never programmed on Mac OS X (if the discussion is about that)
    but since its kernel is based on a BSD system it doesn't seem to be
    different from other Unixes; as far as the subtopic "interpreter vs.
    compiler" goes. (Ignoring other technical implementation details of
    Unix.)

    Myself I programmed on UTS, SunOS, AIX, HP-UX, and Linux, each with
    its quirks, specialities and commonalities, some based on SysV, some
    on BSD, and some used concepts from both. Linux reminds me more on
    systems borrowing from both worlds (plus some more newer concepts).

    Concerning the subtopic "interpreter vs. compiler" I don't think it
    makes sense to continue the battle. With intermediate code and VM
    languages, firmware and arbitrary specific variants how interpreter
    can work, there's plenty of room to digress, nit-pick, and create
    red herrings and straw men. The terms are (despite all the variants)
    quite clear and can be looked up even in common (non-CS) sources;
    there's no necessity to arm oneself with Tannenbaum or others. Hope
    we can get over that. A practically useful way to discuss things
    might be to speak about concrete concepts, not about (potentially
    misleading) labels.

    Janis

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From [email protected]@21:1/5 to All on Sun Oct 13 14:03:23 2024
    On Sun, 13 Oct 2024 14:29:00 +0200
    Janis Papanagnou <[email protected]> boring babbled:
    [ X-post list reduced ]

    On 13.10.2024 10:18, [email protected] wrote:
    [...]

    I disagree. Modern linux reminds me a lot of SunOS and HP-UX from back in
    the day. Not something that can be said for MacOS with its role-our-own
    Apple specific way of doing pretty much everything.

    I've never programmed on Mac OS X (if the discussion is about that)
    but since its kernel is based on a BSD system it doesn't seem to be

    It isn't. Its a Mach kernel with a BSD compat layer on top. Off the top of
    my head MacOS oddities include:

    - A lot of the API (particularly graphics) only accessable via objective-C
    including stuff that should be available in plain C such as low level wifi
    APIs.
    - Doesn't use X windows though you can install it
    - XML based config
    - Case insensitive command line regardless of shell unless you use wildcards or
    regex then suddenly its case sensitive.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From [email protected]@21:1/5 to All on Sun Oct 13 14:56:54 2024
    On Sun, 13 Oct 2024 16:21:20 +0200
    Janis Papanagnou <[email protected]> boring babbled:
    On 13.10.2024 16:03, [email protected] wrote:
    On Sun, 13 Oct 2024 14:29:00 +0200
    Janis Papanagnou <[email protected]> boring babbled:
    [ X-post list reduced ]

    On 13.10.2024 10:18, [email protected] wrote:
    [...]

    I disagree. Modern linux reminds me a lot of SunOS and HP-UX from back in >>>> the day. Not something that can be said for MacOS with its role-our-own >>>> Apple specific way of doing pretty much everything.

    I've never programmed on Mac OS X (if the discussion is about that)
    but since its kernel is based on a BSD system it doesn't seem to be

    It isn't. Its a Mach kernel with a BSD compat layer on top. [...]

    I've ever only heared that it's based on FreeBSD. From Wikipedia I'm
    getting told that the contemporary Darwin (Apple's Unix) was derived
    from FreeBSD, supplemented by OpenBSD, NetBSD, and own parts. Anyway,
    not worth a dispute (as far as I am concerned).

    Its a common misconception. MacOS has nothing to do with FreeBSD other than Apple nicked a lot of user layer and posix code from them back in the day.

    https://en.wikipedia.org/wiki/Mach_(kernel)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Janis Papanagnou@21:1/5 to [email protected] on Sun Oct 13 16:21:20 2024
    On 13.10.2024 16:03, [email protected] wrote:
    On Sun, 13 Oct 2024 14:29:00 +0200
    Janis Papanagnou <[email protected]> boring babbled:
    [ X-post list reduced ]

    On 13.10.2024 10:18, [email protected] wrote:
    [...]

    I disagree. Modern linux reminds me a lot of SunOS and HP-UX from back in >>> the day. Not something that can be said for MacOS with its role-our-own
    Apple specific way of doing pretty much everything.

    I've never programmed on Mac OS X (if the discussion is about that)
    but since its kernel is based on a BSD system it doesn't seem to be

    It isn't. Its a Mach kernel with a BSD compat layer on top. [...]

    I've ever only heared that it's based on FreeBSD. From Wikipedia I'm
    getting told that the contemporary Darwin (Apple's Unix) was derived
    from FreeBSD, supplemented by OpenBSD, NetBSD, and own parts. Anyway,
    not worth a dispute (as far as I am concerned).

    Janis

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Nicolas George@21:1/5 to All on Mon Oct 14 07:47:40 2024
    Janis Papanagnou , dans le message <vehkbt$s85f$[email protected]>, a
    �crit�:
    I was speaking about [formal] languages as introduced by Chomsky

    Are we not progressively realizing that most of what Chomsky said was unsubstantiated bullshit?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Janis Papanagnou@21:1/5 to Nicolas George on Mon Oct 14 14:27:10 2024
    On 14.10.2024 09:47, Nicolas George wrote:
    Janis Papanagnou , dans le message <vehkbt$s85f$[email protected]>, a
    �crit :
    I was speaking about [formal] languages as introduced by Chomsky

    Are we not progressively realizing that most of what Chomsky said was unsubstantiated bullshit?

    Given the generalization and lack of any substance in your post, and
    the (enduring) relevance of Chomsky's work for computer science your
    comment appears to reveal nothing but ignorance (and of course your
    offending habits).

    Janis

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Lawrence D'Oliveiro@21:1/5 to Nicolas George on Mon Oct 14 21:03:47 2024
    On 14 Oct 2024 07:47:40 GMT, Nicolas George wrote:

    Janis Papanagnou , dans le message <vehkbt$s85f$[email protected]>, a
    écrit :
    I was speaking about [formal] languages as introduced by Chomsky

    Are we not progressively realizing that most of what Chomsky said was unsubstantiated bullshit?

    And we have found yet another shibboleth for exposing those of a, shall we
    say, certain backwards-looking political persuasion ...

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Nicolas George@21:1/5 to All on Mon Oct 14 23:25:36 2024
    Janis Papanagnou , dans le message <vej2n0$16ljv$[email protected]>, a
    �crit�:
    Given the generalization and lack of any substance in your post, and
    the (enduring) relevance of Chomsky's work for computer science your
    comment appears to reveal nothing but ignorance (and of course your
    offending habits).

    After checking, his works in linguistics are indeed mostly unsubstantiated
    and nowadays mostly discredited, but he did indeed some valid math and
    computer science a long time ago.

    Funny he's mostly known for what he's bad at.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Nicolas George@21:1/5 to All on Mon Oct 14 23:26:11 2024
    Lawrence D'Oliveiro , dans le message <vek0vj$1bek1$[email protected]>, a
    �crit�:
    And we have found yet another shibboleth for exposing those of a, shall we say, certain backwards-looking political persuasion ...

    Care to elaborate, or will you leave the vacuum of your message hidden
    behind the obscurity of its wording?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to [email protected] on Thu Nov 21 16:08:16 2024
    [email protected] writes:
    On 2024-11-20, Rainer Weikusat <[email protected]> wrote:
    Janis Papanagnou <[email protected]> writes:

    Assuming that p is a pointer to the current position in a string, e is a
    pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky'
    C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    size_t xlen = p-mystr;
    printf("digits: '%.*s'\n", (int) xlen, mystr);
    printf("mystr %p p %p e %p\n", mystr, p, e);
    printf("xlen %zd\n", xlen);

    return 0;
    }

    ./a.out
    digits: '12#45'
    mystr 0x7ffc92ac55ff p 0x7ffc92ac5604 e 0x7ffc92ac5608
    xlen 5


    Indeed. Rainer's while loop should be using isdigit(*p).

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From [email protected]@21:1/5 to Rainer Weikusat on Thu Nov 21 15:46:42 2024
    On 2024-11-20, Rainer Weikusat <[email protected]> wrote:
    Janis Papanagnou <[email protected]> writes:

    Assuming that p is a pointer to the current position in a string, e is a pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky'
    C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    size_t xlen = p-mystr;
    printf("digits: '%.*s'\n", (int) xlen, mystr);
    printf("mystr %p p %p e %p\n", mystr, p, e);
    printf("xlen %zd\n", xlen);

    return 0;
    }

    ./a.out
    digits: '12#45'
    mystr 0x7ffc92ac55ff p 0x7ffc92ac5604 e 0x7ffc92ac5608
    xlen 5

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rainer Weikusat@21:1/5 to [email protected] on Thu Nov 21 17:19:51 2024
    [email protected] writes:
    On 2024-11-20, Rainer Weikusat <[email protected]> wrote:
    Janis Papanagnou <[email protected]> writes:

    Assuming that p is a pointer to the current position in a string, e is a
    pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky'
    C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    The code I'm actually using is

    while (p < e && (unsigned)*p - '0' < 10)
    ++p;

    I just omitted that when posting this beause I mistakenly assumed that
    it probably wasn't needed, ;-). You could have pointed this out instead
    of trying to dress it up as some sort of mystery problem¹. Especially as
    I did mention that using unsigned arithmetic was necessary (should
    really be self-evident).

    I should really have replied with

    [rw@doppelsaurus]/tmp#gcc a.c
    a.c: In function 'main':
    a.c:12:5: error: unknown type name 'size_t'
    12 | size_t xlen = p-mystr;
    | ^~~~~~
    a.c:1:1: note: 'size_t' is defined in header '<stddef.h>'; did you forget to '#include <stddef.h>'?
    +++ |+#include <stddef.h>
    1 | int
    a.c:13:5: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
    13 | printf("digits: '%.*s'\n", (int) xlen, mystr);
    | ^~~~~~
    a.c:13:5: warning: incompatible implicit declaration of built-in function 'printf'
    a.c:1:1: note: include '<stdio.h>' or provide a declaration of 'printf'
    +++ |+#include <stdio.h>
    1 | int

    as code which cannot even be compiled as no runtime behaviour.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rainer Weikusat@21:1/5 to Scott Lurndal on Thu Nov 21 17:31:16 2024
    [email protected] (Scott Lurndal) writes:
    [email protected] writes:
    On 2024-11-20, Rainer Weikusat <[email protected]> wrote:
    Janis Papanagnou <[email protected]> writes:

    Assuming that p is a pointer to the current position in a string, e is a >>> pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky' >>> C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    size_t xlen = p-mystr;
    printf("digits: '%.*s'\n", (int) xlen, mystr);
    printf("mystr %p p %p e %p\n", mystr, p, e);
    printf("xlen %zd\n", xlen);

    return 0;
    }

    ./a.out
    digits: '12#45'
    mystr 0x7ffc92ac55ff p 0x7ffc92ac5604 e 0x7ffc92ac5608
    xlen 5


    Indeed. Rainer's while loop should be using isdigit(*p).

    I'm even using

    c &= ~0x20;
    if (c - 'A' < 6) return c - 'A' + 10;

    for detecting hex digits (type of c is unsigned). JSON demands UTF8
    which implies demanding ASCII (which means that the code point of a
    lowercase letter is that of the corresponding uppercase letter but with
    the sixth bit additionally set).

    Constructs like this are great insurance policy against people inventing spurious character encodings.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Nicolas George@21:1/5 to All on Thu Nov 21 17:53:02 2024
    Scott Lurndal, dans le message <QVI%O.179460$[email protected]>, a
    �crit�:
    Indeed. Rainer's while loop should be using isdigit(*p).

    No it should, that would be a mistake.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to [email protected] on Fri Nov 22 14:14:00 2024
    In article <[email protected]>,
    Rainer Weikusat <[email protected]> wrote:
    [email protected] writes:
    On 2024-11-20, Rainer Weikusat <[email protected]> wrote:
    Janis Papanagnou <[email protected]> writes:

    Assuming that p is a pointer to the current position in a string, e is a >>> pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky' >>> C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    The code I'm actually using is

    while (p < e && (unsigned)*p - '0' < 10)
    ++p;

    I just omitted that when posting this beause I mistakenly assumed that
    it probably wasn't needed, ;-). You could have pointed this out instead
    of trying to dress it up as some sort of mystery problem¹. Especially as
    I did mention that using unsigned arithmetic was necessary (should
    really be self-evident).

    Well, no, not exactly. You said that it was important that the
    pointers point to unsigned quantities, but that wasn't the
    issue. The issue is that both operands of the `-` are promoted
    to _signed_ int before the subtraction (sec 6.3.1.8 of n220),
    and so the comparison is done against signed quantities. Your
    cast fixes this by forcing promotion of '0' and 10 to unsigned
    int before either operation.

    I do agree that the presentation was overly terse and came off
    poorly.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rainer Weikusat@21:1/5 to Dan Cross on Fri Nov 22 15:27:43 2024
    [email protected] (Dan Cross) writes:
    In article <[email protected]>,
    Rainer Weikusat <[email protected]> wrote:
    [email protected] writes:
    On 2024-11-20, Rainer Weikusat <[email protected]> wrote:
    Janis Papanagnou <[email protected]> writes:

    Assuming that p is a pointer to the current position in a string, e is a >>>> pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky' >>>> C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    The code I'm actually using is

    while (p < e && (unsigned)*p - '0' < 10)
    ++p;

    I just omitted that when posting this beause I mistakenly assumed that
    it probably wasn't needed, ;-). You could have pointed this out instead
    of trying to dress it up as some sort of mystery problem¹. Especially as >>I did mention that using unsigned arithmetic was necessary (should
    really be self-evident).

    Well, no, not exactly. You said that it was important that the
    pointers point to unsigned quantities, but that wasn't the
    issue.

    The issue here is that I mistakenly assumed the (unsigned) in the code
    was a left-over from before the time when I had changed to pointers to
    unsigned char to fix a different issue. As C tries really hard to force
    signed arithmetic onto people despite this basically never makes any
    sense, the type of '0' is int *p gets promoted to int and hence, the
    result of the subtraction will also be an int and the '< 10' condition
    will be true for every codepoint numerically less than '9' which
    obviously won't work as intended.

    That's a mistake I made which would have warranted being pointed out and possibly explained instead of posting some broken code together with
    some output the broken code certainly never generated due it being
    broken.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to [email protected] on Fri Nov 22 21:14:28 2024
    In article <[email protected]>,
    Rainer Weikusat <[email protected]> wrote:
    [email protected] (Dan Cross) writes:
    In article <[email protected]>,
    Rainer Weikusat <[email protected]> wrote:
    [email protected] writes:
    On 2024-11-20, Rainer Weikusat <[email protected]> wrote:
    Janis Papanagnou <[email protected]> writes:

    Assuming that p is a pointer to the current position in a string, e is a >>>>> pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky' >>>>> C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    The code I'm actually using is

    while (p < e && (unsigned)*p - '0' < 10)
    ++p;

    I just omitted that when posting this beause I mistakenly assumed that
    it probably wasn't needed, ;-). You could have pointed this out instead >>>of trying to dress it up as some sort of mystery problem¹. Especially as >>>I did mention that using unsigned arithmetic was necessary (should
    really be self-evident).

    Well, no, not exactly. You said that it was important that the
    pointers point to unsigned quantities, but that wasn't the
    issue.

    The issue here is that I mistakenly assumed the (unsigned) in the code
    was a left-over from before the time when I had changed to pointers to >unsigned char to fix a different issue.

    That you "changed to pointers to unsigned char" is completely
    irrelevant. That's not how C works: C will promote those
    `unsigned char` values to `signed int` before it does the
    subtraction. It does this because `unsigned char` has _rank_
    lower than _int_ and the entire range of values is expressible
    in a signed int. These are called, "the usual arithmetic
    conversions."

    I pointed you to the section of the standard that explains this.

    As C tries really hard to force
    signed arithmetic onto people despite this basically never makes any
    sense,

    It actually makes a lot of sense in a lot of contexts, and is
    usually what people actually want.

    You've shown that you, personally, don't have a great command of
    the language, so perhaps you shouldn't opine quite so
    forcefully.

    the type of '0' is int *p gets promoted to int and hence, the
    result of the subtraction will also be an int and the '< 10' condition
    will be true for every codepoint numerically less than '9' which
    obviously won't work as intended.

    Yes, that's how it works.

    That's a mistake I made which would have warranted being pointed out and >possibly explained instead of posting some broken code together with
    some output the broken code certainly never generated due it being
    broken.

    Perhaps if you stopped being so unbearably smug and pretentious
    in your judgements people would give you that grace. As it is,
    you come across as thin-skinned and terribly insecure, and your
    code shows a lack of competence.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rainer Weikusat@21:1/5 to Dan Cross on Fri Nov 22 22:09:44 2024
    [email protected] (Dan Cross) writes:

    [...]

    That's a mistake I made which would have warranted being pointed out and >>possibly explained instead of posting some broken code together with
    some output the broken code certainly never generated due it being
    broken.

    Perhaps if you stopped being so unbearably smug and pretentious
    in your judgements people would give you that grace. As it is,
    you come across as thin-skinned and terribly insecure, and your
    code shows a lack of competence.

    I suggest you print this and pin to to a place you frequently look
    at. This may eventually lead you to a much more realistic assessment of yourself than you presently seem to have.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From James Kuyper@21:1/5 to Dan Cross on Fri Nov 22 17:26:59 2024
    On 11/22/24 14:05, Dan Cross wrote:
    In article <[email protected]>,
    Rainer Weikusat <[email protected]> wrote:...
    char **argv

    declares an array of pointers

    No, it declares a pointer to a pointer to char.

    Agreed.

    (as each pointer in C points to an array)

    That's absolutely not true. A pointer in C may refer to
    an array, or a scalar. Consider,

    char c;
    char *p = &c;
    char **pp = &p;

    Not actually relevant. For purposes of pointer arithmetic, a pointer to
    a single object is treated as if it pointed at the first element of a
    1-element array of that object's type.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From James Kuyper@21:1/5 to Dan Cross on Fri Nov 22 17:16:05 2024
    On 11/22/24 16:14, Dan Cross wrote:
    ...
    irrelevant. That's not how C works: C will promote those
    `unsigned char` values to `signed int` before it does the
    subtraction. It does this because `unsigned char` has _rank_
    lower than _int_ ...

    True.

    ... and the entire range of values is expressible
    in a signed int.

    Not necessarily. An implementation is allowed to have UCHAR_MAX >
    INT_MAX, in which case unsigned char promotes to unsigned int rather
    than int. I'm aware of systems where UCHAR_MAX > LONG_MAX was true:
    char, short, int, and long were all 32 bits.


    ... These are called, "the usual arithmetic
    conversions."

    Actually, what you're talking about are the integer promotions. The
    first step of the usual arithmetic conversions is to apply the integer promotions to each operand, but then a few other things happen as well.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to [email protected] on Fri Nov 22 22:34:52 2024
    In article <[email protected]>,
    James Kuyper <[email protected]> wrote:
    On 11/22/24 16:14, Dan Cross wrote:
    ...
    irrelevant. That's not how C works: C will promote those
    `unsigned char` values to `signed int` before it does the
    subtraction. It does this because `unsigned char` has _rank_
    lower than _int_ ...

    True.

    ... and the entire range of values is expressible
    in a signed int.

    Not necessarily. An implementation is allowed to have UCHAR_MAX >
    INT_MAX, in which case unsigned char promotes to unsigned int rather
    than int. I'm aware of systems where UCHAR_MAX > LONG_MAX was true:
    char, short, int, and long were all 32 bits.

    Yes, but in this context, that's obviously not the case as he
    posted the behavior he saw. I was merely explaining _why_ he
    saw that behavior, vis the standard.

    ... These are called, "the usual arithmetic
    conversions."

    Actually, what you're talking about are the integer promotions. The
    first step of the usual arithmetic conversions is to apply the integer >promotions to each operand, but then a few other things happen as well.

    This is correct, but IMHO too far down into the weeds. Consider
    section 6.3.1.1 para 3, which notes that, "the integer
    promotions are applied only: ... 1. as part of the usual
    arithmetic conversions". Since we're talking about operands to
    a binary operator, 6.3.1.8 applies. 6.3.1.8 is why converting
    one side to unsigned is sufficient to get an unsigned result.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to [email protected] on Fri Nov 22 23:06:18 2024
    In article <vhr0fj$1bq0o$[email protected]>,
    James Kuyper <[email protected]> wrote:
    On 11/22/24 14:05, Dan Cross wrote:
    In article <[email protected]>,
    Rainer Weikusat <[email protected]> wrote:...
    char **argv

    declares an array of pointers

    No, it declares a pointer to a pointer to char.

    Agreed.

    (as each pointer in C points to an array)

    That's absolutely not true. A pointer in C may refer to
    an array, or a scalar. Consider,

    char c;
    char *p = &c;
    char **pp = &p;

    Not actually relevant. For purposes of pointer arithmetic, a pointer to
    a single object is treated as if it pointed at the first element of a >1-element array of that object's type.

    a) Please stop emailing me this stuff _and_ posting it here. I
    have asked you this in the past, and previously you'd said that
    it was because you switched news readers. That's fine, but that
    was a year ago or more.

    b) What you are referring to, from the section on Additive
    Operators (6.5.7 in n3220; 6.5.6 in C99) is in reference to
    pointer arithmetic; the statement that I was replying to was a
    general statement about pointers, independent of issues of
    pointer arithmetic. That is, it is not the case that, "each
    pointer in C points to an array". The above example, to which
    you replied, is a counterpoint to the general statement.

    So while what you are saying is true, it doesn't change the
    general point.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to [email protected] on Fri Nov 22 23:10:09 2024
    In article <[email protected]>,
    Rainer Weikusat <[email protected]> wrote:
    [email protected] (Dan Cross) writes:

    [...]

    That's a mistake I made which would have warranted being pointed out and >>>possibly explained instead of posting some broken code together with
    some output the broken code certainly never generated due it being >>>broken.

    Perhaps if you stopped being so unbearably smug and pretentious
    in your judgements people would give you that grace. As it is,
    you come across as thin-skinned and terribly insecure, and your
    code shows a lack of competence.

    I suggest you print this and pin to to a place you frequently look
    at. This may eventually lead you to a much more realistic assessment of >yourself than you presently seem to have.

    *shrug* If you don't want to be criticized, don't be wrong so
    often. Not my problem if you don't program well.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From James Kuyper@21:1/5 to Dan Cross on Fri Nov 22 22:49:46 2024
    On 11/22/24 18:06, Dan Cross wrote:
    ...
    a) Please stop emailing me this stuff _and_ posting it here. I
    have asked you this in the past, and previously you'd said that
    it was because you switched news readers. That's fine, but that
    was a year ago or more.

    Actually, Thunderbird made the change to how the "Reply" button works
    sometime around April 2021, and I'm still making the mistake of hitting
    it when I should hit "Followup". At my age it's hard to change a habit
    acquired over a couple of decades of posting to usenet; I'm doing my
    best to change it, and still failing frequently.

    I'm unlikely to deliberately send you e-mail, so you can easily avoid
    the aggravation of dealing with my accidental e-mails by simply
    kill-filing me.

    b) What you are referring to, from the section on Additive
    Operators (6.5.7 in n3220; 6.5.6 in C99) is in reference to
    pointer arithmetic; the statement that I was replying to was a
    general statement about pointers, independent of issues of
    pointer arithmetic. That is, it is not the case that, "each
    pointer in C points to an array". The above example, to which
    you replied, is a counterpoint to the general statement.

    I disagree. It is not independent, because there's nothing you can do
    with pointer itself that has either it's value or it's validity
    dependent upon whether that pointer points at a single object or the
    first element of an array of length one.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From James Kuyper@21:1/5 to Dan Cross on Fri Nov 22 23:44:49 2024
    On 11/22/24 17:34, Dan Cross wrote:
    In article <[email protected]>,
    James Kuyper <[email protected]> wrote:
    On 11/22/24 16:14, Dan Cross wrote:
    ...
    ... and the entire range of values is expressible
    in a signed int.

    Not necessarily. An implementation is allowed to have UCHAR_MAX >
    INT_MAX, in which case unsigned char promotes to unsigned int rather
    than int. I'm aware of systems where UCHAR_MAX > LONG_MAX was true:
    char, short, int, and long were all 32 bits.

    Yes, but in this context, that's obviously not the case as he
    posted the behavior he saw. I was merely explaining _why_ he
    saw that behavior, vis the standard.

    Your wording could easily give the false impression, to anyone who
    didn't already know better, that promotion of unsigned char to signed
    int is required by the standard, rather than it being dependent upon
    whether UCHAR_MAX > INT_MAX.

    ... These are called, "the usual arithmetic
    conversions."

    Actually, what you're talking about are the integer promotions. The
    first step of the usual arithmetic conversions is to apply the integer
    promotions to each operand, but then a few other things happen as well.

    This is correct, but IMHO too far down into the weeds. Consider
    section 6.3.1.1 para 3, which notes that, "the integer
    promotions are applied only: ... 1. as part of the usual
    arithmetic conversions".

    The latest draft of the standard that I have is n3096.pdf, dated
    2023-04-01. In that draft, that wording is not present in paragraph 3,
    but only footnote 63, which is referenced by paragraph 2. That footnote
    does not contain the "1." that is present in your citation. That
    footnote goes on to list the other contexts in which integer promotions
    can occur: ", to certain argument expressions, to the operands of the
    unary +, -, and ~ operators, and to both operands of the shift
    operators, as specified by their respective subclauses."
    Which version are you quoting? I have copies of most of the draft
    standards that are available for free, but none of the final versions of
    the standards, since those cost money.

    ... Since we're talking about operands to
    a binary operator, 6.3.1.8 applies. 6.3.1.8 is why converting
    one side to unsigned is sufficient to get an unsigned result.

    Calling them the usual arithmetic conversions rather than the integer promotions is being unnecessarily vague. Your description only covers
    the integer promotions, it doesn't cover any of the other usual
    arithmetic conversions.

    I'm going to try to come up with an analogy; the best one I could come
    up on the spur of the moment involves the US federal income tax form
    1040. It has a section called "Payments". The first four payments are
    all amounts that have been withheld from various income sources before
    you ever get a chance to spend the money. Most the other payments are
    things that you spent money on that you are entitled to take as a credit against your tax liability.
    What you've done is analogous to describing how withholding works, and
    even using the term "withheld", and then referring to what you've just described as "payments" rather than "amounts withheld", even though your description doesn't fit the tax credits, which are the other kinds of
    payments.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to [email protected] on Sat Nov 23 13:53:09 2024
    In article <vhrjcr$1ijr4$[email protected]>,
    James Kuyper <[email protected]> wrote:
    On 11/22/24 18:06, Dan Cross wrote:
    ...
    a) Please stop emailing me this stuff _and_ posting it here. I
    have asked you this in the past, and previously you'd said that
    it was because you switched news readers. That's fine, but that
    was a year ago or more.

    Actually, Thunderbird made the change to how the "Reply" button works >sometime around April 2021, and I'm still making the mistake of hitting
    it when I should hit "Followup". At my age it's hard to change a habit >acquired over a couple of decades of posting to usenet; I'm doing my
    best to change it, and still failing frequently.

    Three and a half years is a long time to learn how to use a tool
    competently.

    I'm unlikely to deliberately send you e-mail, so you can easily avoid
    the aggravation of dealing with my accidental e-mails by simply
    kill-filing me.

    Please don't put the onus to deal with your mistakes on me.

    b) What you are referring to, from the section on Additive
    Operators (6.5.7 in n3220; 6.5.6 in C99) is in reference to
    pointer arithmetic; the statement that I was replying to was a
    general statement about pointers, independent of issues of
    pointer arithmetic. That is, it is not the case that, "each
    pointer in C points to an array". The above example, to which
    you replied, is a counterpoint to the general statement.

    I disagree. It is not independent, because there's nothing you can do
    with pointer itself that has either it's value or it's validity
    dependent upon whether that pointer points at a single object or the
    first element of an array of length one.

    You can indirect it without doing arithmetic on it. This isn't
    a particularly interesting topic, however. The point was that
    the OP's statement was factually incorrect.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to [email protected] on Sat Nov 23 14:05:35 2024
    In article <vhrmk1$1ivhr$[email protected]>,
    James Kuyper <[email protected]> wrote:
    On 11/22/24 17:34, Dan Cross wrote:
    In article <[email protected]>,
    James Kuyper <[email protected]> wrote:
    On 11/22/24 16:14, Dan Cross wrote:
    ...
    ... and the entire range of values is expressible
    in a signed int.

    Not necessarily. An implementation is allowed to have UCHAR_MAX >
    INT_MAX, in which case unsigned char promotes to unsigned int rather
    than int. I'm aware of systems where UCHAR_MAX > LONG_MAX was true:
    char, short, int, and long were all 32 bits.

    Yes, but in this context, that's obviously not the case as he
    posted the behavior he saw. I was merely explaining _why_ he
    saw that behavior, vis the standard.

    Your wording could easily give the false impression, to anyone who
    didn't already know better, that promotion of unsigned char to signed
    int is required by the standard, rather than it being dependent upon
    whether UCHAR_MAX > INT_MAX.

    Actually I'm not sure that it did. Note the part that you
    quoted above that says, "the entire range values is expressible
    in a signed int." This implies UCHAR_MAX <= INT_MAX. (By
    "values" I meant, "values of that type", not specific values in
    any given program).

    Regardless, if you wanted to provide more detail, it would be
    done more usefully by doing so within the context, "here's why
    this is true in this context, but note that other contexts
    exist in which this doesn't hold, and here's why..." etc.

    ... These are called, "the usual arithmetic
    conversions."

    Actually, what you're talking about are the integer promotions. The
    first step of the usual arithmetic conversions is to apply the integer
    promotions to each operand, but then a few other things happen as well.

    This is correct, but IMHO too far down into the weeds. Consider
    section 6.3.1.1 para 3, which notes that, "the integer
    promotions are applied only: ... 1. as part of the usual
    arithmetic conversions".

    The latest draft of the standard that I have is n3096.pdf, dated
    2023-04-01.

    As I mentioned, I'm looking at n3220. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf

    You may want to looka t n3301, which seems to be the latest. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3301.pdf

    In that draft, that wording is not present in paragraph 3,
    but only footnote 63, which is referenced by paragraph 2. That footnote
    does not contain the "1." that is present in your citation. That
    footnote goes on to list the other contexts in which integer promotions
    can occur: ", to certain argument expressions, to the operands of the
    unary +, -, and ~ operators, and to both operands of the shift
    operators, as specified by their respective subclauses."
    Which version are you quoting? I have copies of most of the draft
    standards that are available for free, but none of the final versions of
    the standards, since those cost money.

    See above.

    ... Since we're talking about operands to
    a binary operator, 6.3.1.8 applies. 6.3.1.8 is why converting
    one side to unsigned is sufficient to get an unsigned result.

    Calling them the usual arithmetic conversions rather than the integer >promotions is being unnecessarily vague. Your description only covers
    the integer promotions, it doesn't cover any of the other usual
    arithmetic conversions.

    The integer promotions were the only relevant part in context.
    Perhaps it would have allayed your concerns to say, "part of"?

    I'm going to try to come up with an analogy; the best one I could come
    up on the spur of the moment involves the US federal income tax form
    1040. It has a section called "Payments". The first four payments are
    all amounts that have been withheld from various income sources before
    you ever get a chance to spend the money. Most the other payments are
    things that you spent money on that you are entitled to take as a credit >against your tax liability.
    What you've done is analogous to describing how withholding works, and
    even using the term "withheld", and then referring to what you've just >described as "payments" rather than "amounts withheld", even though your >description doesn't fit the tax credits, which are the other kinds of >payments.

    Sorry, I think this analogy is poor and unhelpful. See the
    above references.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From James Kuyper@21:1/5 to Dan Cross on Sat Nov 23 10:22:19 2024
    On 11/23/24 09:05, Dan Cross wrote:
    In article <vhrmk1$1ivhr$[email protected]>,
    James Kuyper <[email protected]> wrote:
    ...
    Your wording could easily give the false impression, to anyone who
    didn't already know better, that promotion of unsigned char to signed
    int is required by the standard, rather than it being dependent upon
    whether UCHAR_MAX > INT_MAX.

    Actually I'm not sure that it did. Note the part that you
    quoted above that says, "the entire range values is expressible
    in a signed int." This implies UCHAR_MAX <= INT_MAX. (By
    "values" I meant, "values of that type", not specific values in
    any given program).

    You paired that assertion with "`unsigned char` has _rank_
    lower than _int_", which is a fact guaranteed by the standard, which
    could easily give the impression that the comment about the range of
    values was either explicitly stated in the standard, or correctly
    inferrable from the statement about the ranks.


    ...
    ... Since we're talking about operands to
    a binary operator, 6.3.1.8 applies. 6.3.1.8 is why converting
    one side to unsigned is sufficient to get an unsigned result.

    Calling them the usual arithmetic conversions rather than the integer
    promotions is being unnecessarily vague. Your description only covers
    the integer promotions, it doesn't cover any of the other usual
    arithmetic conversions.

    The integer promotions were the only relevant part in context.
    Perhaps it would have allayed your concerns to say, "part of"?

    Partially. However since you described the integer promotions, and the description you provided didn't fit any other part of the usual
    arithmetic conversions, and the part you described has it's own special
    name, and the integer promotions can occur without the usual arithmetic conversions, it still seems to me more appropriate to say that what you described were the integer promotions.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to [email protected] on Sat Nov 23 16:38:37 2024
    This is amazing. Yet another response that was both emailed to
    me _and_ posted to USENET.

    In article <vhsrvb$1oct2$[email protected]>,
    James Kuyper <[email protected]> wrote:
    [snip]

    I'm not particularly interested in the technical conent of your
    article, which seems like it's trying to force a pedantic point
    of interpretation without regard to the current standard (which
    you admitted you didn't have a copy of) so I'm not going to
    respond to that. Now you've admitted that your issue is that
    someone _could_ misinterpret my statement. Ok, but this is comp.unix.programmer, not comp.lang.c.

    But I am interested in this repeated mistake of emailing and
    then posting.

    In another email sent to me, but curiously NOT posted to USENET,
    you said that you were "trying your best" and that if your best
    was not good enough, I should take steps on my end to discard
    your emails. No. It's not my responsibility to deal with your
    mistakes.

    I find this troubling. I really don't care how long you've been
    programming, whether or not APL was your third language 50 years
    ago (appeal to length of experience is, of course, a logical
    fallacy) or how long you used the prior version of your tool.
    Three and a half years is a long time to learn your way around a
    new user interface; excuses related to age and prior experience
    just don't cut it. As a former Drill Instructor once told me on
    Parris Island, "excuses are like assholes: everybody has one."

    It's the height of arrogance to assume that your words are so
    important that it's someone else's responsibility to account for
    the fact that you care to post them correctly. How about,
    instead of excuses and asking others to deal with your mistakes,
    you take some personal responsibility for using your tools
    competently? Sure, mistakes _do_ happen, but with you it seems
    to happen more often than not. If you're the one continually
    making the mistake, you ought to be owning that, not asking
    others to take steps to deal with your failures in this regard.

    Here are some ideas for you to consider:

    1. If you email someone something you intended to post, why not
    follow up? You could, for example, send a follow-up email
    ("oops, I accidentally sent that via email; sorry about that,
    I'll post it instead").
    2. Alternatively, you could acknowledge that in your USENET post
    with a disclaimer ("this was accidentally mailed to the
    respondee").
    3. If you email someone when you intended to post, you could
    exercise some discipline and simply not post, acknowledging
    the mistake while assuming responsibility for it. Perhaps
    that would encourage you to learn to use your tools
    correctly.
    4. If you cannot use your existing newsreader without making
    this mistake so frequently, perhaps consider switching to
    different software for your USENET consumption; maybe a
    program that more accurately tracks your desired user
    interface?
    5. Perhaps make yourself a checklist of things to check before
    responding; #1 on that might be, "am I sending this by email
    or posting? Is that really what I want to do?"

    I'm sure you can think of others.

    And while you clearly have the ability to post whatever you like
    to USENET, it is a choice to do so, and it sure seems you lack
    the discipline and discretion to do so competently. Perhaps
    consider stopping until you develop or refine the necessary
    skills to do so without such frequent error.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kalevi Kolttonen@21:1/5 to Dan Cross on Fri Dec 27 13:59:47 2024
    Dan Cross <[email protected]> wrote:
    Here are some ideas for you to consider:

    Sorry for replying to an old post. I do not even
    remember who it is that keeps sending emails when
    he intends to send follow-ups to Usenet. However,
    I have a good solution.

    Thunderbird is open source, maybe even free software.

    I am sure it is extremely easy to either remove the
    "reply" button or to bind it to the "followup" function.

    Problem solved.

    br,
    KK

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Kettlewell@21:1/5 to Kalevi Kolttonen on Fri Dec 27 14:56:52 2024
    [email protected] (Kalevi Kolttonen) writes:
    Dan Cross <[email protected]> wrote:
    Here are some ideas for you to consider:

    Sorry for replying to an old post. I do not even
    remember who it is that keeps sending emails when
    he intends to send follow-ups to Usenet. However,
    I have a good solution.

    Thunderbird is open source, maybe even free software.

    I am sure it is extremely easy to either remove the
    "reply" button or to bind it to the "followup" function.

    Go on then?

    --
    https://www.greenend.org.uk/rjk/

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to John Ames on Fri Dec 27 17:39:30 2024
    John Ames <[email protected]> writes:
    On Fri, 27 Dec 2024 13:59:47 -0000 (UTC)
    [email protected] (Kalevi Kolttonen) wrote:

    I am sure it is extremely easy to either remove the
    "reply" button or to bind it to the "followup" function.

    Have you, like, actually *checked* this assertion?


    Unlikely, to be sure.

    I personally still use xrn, which _is_ completely customizable
    via X11 resources.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Paul@21:1/5 to John Ames on Fri Dec 27 13:15:47 2024
    On Fri, 12/27/2024 10:43 AM, John Ames wrote:
    On Fri, 27 Dec 2024 13:59:47 -0000 (UTC)
    [email protected] (Kalevi Kolttonen) wrote:

    I am sure it is extremely easy to either remove the
    "reply" button or to bind it to the "followup" function.

    Have you, like, actually *checked* this assertion?


    The Followup button on the copy of Thunderbird I'm typing on,
    is actually a menu. It's not just a button. This is why
    this nonsense happens. It's a graphical trap, a hole in the
    back yard for you to fall into while walking past.

    Followup V <=== Normally, you are hitting this as if it is a button
    Followup
    Reply All
    Reply <=== If you "smear" or "wipe" the Followup V at
    the top, and you're not paying attention, THAT
    is when you hit the Reply.

    Paul

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kaz Kylheku@21:1/5 to Kalevi Kolttonen on Fri Dec 27 19:14:42 2024
    On 2024-12-27, Kalevi Kolttonen <[email protected]> wrote:
    Dan Cross <[email protected]> wrote:
    Here are some ideas for you to consider:

    Sorry for replying to an old post. I do not even
    remember who it is that keeps sending emails when
    he intends to send follow-ups to Usenet. However,
    I have a good solution.

    Thunderbird is open source, maybe even free software.

    Thunderbird is yet another mail program whose developers think that
    Usenet is just like e-mail, and can be bolted onto a mail client.

    Just use a fscking newsreader.

    I've never sent an e-mail by accident in slrn.

    --
    TXR Programming Language: http://nongnu.org/txr
    Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
    Mastodon: @[email protected]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kalevi Kolttonen@21:1/5 to Richard Kettlewell on Fri Dec 27 23:22:53 2024
    Richard Kettlewell <[email protected]d> wrote:
    [email protected] (Kalevi Kolttonen) writes:
    Dan Cross <[email protected]> wrote:
    Here are some ideas for you to consider:

    Sorry for replying to an old post. I do not even
    remember who it is that keeps sending emails when
    he intends to send follow-ups to Usenet. However,
    I have a good solution.

    Thunderbird is open source, maybe even free software.

    I am sure it is extremely easy to either remove the
    "reply" button or to bind it to the "followup" function.

    Go on then?

    Working on it.

    br,
    KK

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Janis Papanagnou@21:1/5 to Kaz Kylheku on Sat Dec 28 00:38:23 2024
    On 27.12.2024 20:14, Kaz Kylheku wrote:
    [ Thunderbird issues ]

    Thunderbird is yet another mail program whose developers think that
    Usenet is just like e-mail, and can be bolted onto a mail client.

    I may be using Thunderbird now for two decades or more, don't recall.

    That it's a combined client (for email, news, chat, and some more)
    with a common [basic] GUI is not the problem. Thunderbird has a lot
    of (real, unnecessary) problems that the product managers obviously
    failed to understand or see. (I won't even start here to enumerate
    them.) And it makes things not easier if versions differ completely
    in what can be done to try to fix some of these severe shortcomings.

    The state of that product is IMO beyond all hope; it would require a
    complete redesign to make its interface follow some basic ergonomic
    principles (including all the possible configuration capabilities).
    (Mileages may vary.)

    I've fixed the Reply-button issue in the two (completely different)
    versions I'm mostly using - but don't ask me how I did that! - and
    I'm meanwhile thus fine with Thunderbird's newsreader component in
    a single mail/news application - as long as I don't follow my urge
    to fix anything else in this product.

    Janis

    [...]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)