• Re: Naughty C?

    From Lawrence D?Oliveiro@3:633/10 to All on Sun Jan 4 21:18:51 2026
    On Sun, 04 Jan 2026 19:41:11 GMT, Charlie Gibbs wrote:

    Does C# qualify as a Microsoft proprietary language? Or are there implementations on OSes other than Windows (and compilers, either
    open source or available from other vendors)?

    The only implementation I?m aware of is Microsoft?s one built on top
    of Dotnet.

    Dotnet itself is supposedly open-source and portable to some degree
    now. There are reports of it running on Linux.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From c186282@3:633/10 to All on Sun Jan 4 19:04:14 2026
    On 1/4/26 16:18, Lawrence D?Oliveiro wrote:
    On Sun, 04 Jan 2026 19:41:11 GMT, Charlie Gibbs wrote:

    Does C# qualify as a Microsoft proprietary language? Or are there
    implementations on OSes other than Windows (and compilers, either
    open source or available from other vendors)?

    The only implementation I?m aware of is Microsoft?s one built on top
    of Dotnet.

    Dotnet itself is supposedly open-source and portable to some degree
    now. There are reports of it running on Linux.

    That would be very end-around ...

    Maybe just to forget C# ... CPP is good enough.

    Actually, don't even like CPP ... plain 'C' has
    so far met all my needs.


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Charlie Gibbs@3:633/10 to All on Mon Jan 5 05:57:24 2026
    On 2026-01-05, c186282 <c186282@nnada.net> wrote:

    On 1/4/26 16:18, Lawrence D?Oliveiro wrote:

    On Sun, 04 Jan 2026 19:41:11 GMT, Charlie Gibbs wrote:

    Does C# qualify as a Microsoft proprietary language? Or are there
    implementations on OSes other than Windows (and compilers, either
    open source or available from other vendors)?

    The only implementation I?m aware of is Microsoft?s one built on top
    of Dotnet.

    Dotnet itself is supposedly open-source and portable to some degree
    now. There are reports of it running on Linux.

    That would be very end-around ...

    Maybe just to forget C# ... CPP is good enough.

    Actually, don't even like CPP ... plain 'C' has
    so far met all my needs.

    Ditto - and I'm too old to change now. I'd rather spend
    what little time I have on having fun and maintaining my
    existing code base (including comprehensive home-brewed
    C libraries) rather than going through the software
    equivalent of moving to a foreign country.

    --
    /~\ Charlie Gibbs | Growth for the sake of
    \ / <cgibbs@kltpzyxm.invalid> | growth is the ideology
    X I'm really at ac.dekanfrus | of the cancer cell.
    / \ if you read it the right way. | -- Edward Abbey

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Richard Kettlewell@3:633/10 to All on Mon Jan 5 08:24:58 2026
    rbowman <bowman@montana.com> writes:
    Lawrence D?Oliveiro wrote:
    Charlie Gibbs wrote:
    Does C# qualify as a Microsoft proprietary language? Or are there
    implementations on OSes other than Windows (and compilers, either open
    source or available from other vendors)?

    The only implementation I?m aware of is Microsoft?s one built on top
    of Dotnet.

    Dotnet itself is supposedly open-source and portable to some degree
    now. There are reports of it running on Linux.

    It definitely runs on Linux and is easily installed with dnf or apt. GUIs have been problematic but console and ASP.NET workks fine.

    https://dotnet.microsoft.com/en-us/apps/aspnet

    This isn't Ballmer's Microsoft.

    https://en.wikipedia.org/wiki/Mono_(software) originated as an
    independent implementation of (some of) .Net and C#, but apparently now
    has some MS code (.Net Core) in the runtime.

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

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From The Natural Philosopher@3:633/10 to All on Mon Jan 5 11:26:31 2026
    On 05/01/2026 00:04, c186282 wrote:
    plain 'C' has ÿ so far met all my needs.

    ditto.

    --
    "Socialist governments traditionally do make a financial mess. They
    always run out of other people's money. It's quite a characteristic of them"

    Margaret Thatcher


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From The Natural Philosopher@3:633/10 to All on Mon Jan 5 11:29:02 2026
    On 05/01/2026 03:55, rbowman wrote:
    The Pico SDK documentation talks about C/C++ but I
    haven't seen C++ being used much in the examples.

    I tend to avoid the examples where it is being used.

    Anyway C++ is handy in small doses.

    I've not found it at all necessary, ever.



    --
    Labour - a bunch of rich people convincing poor people to vote for rich
    people by telling poor people that "other" rich people are the reason
    they are poor.

    Peter Thompson


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris Ahlstrom@3:633/10 to All on Mon Jan 5 06:50:55 2026
    Lawrence D?Oliveiro wrote this post by blinking in Morse code:

    On Sun, 04 Jan 2026 19:41:11 GMT, Charlie Gibbs wrote:

    Does C# qualify as a Microsoft proprietary language? Or are there
    implementations on OSes other than Windows (and compilers, either
    open source or available from other vendors)?

    The only implementation I?m aware of is Microsoft?s one built on top
    of Dotnet.

    Dotnet itself is supposedly open-source and portable to some degree
    now. There are reports of it running on Linux.

    <https://learn.microsoft.com/en-us/dotnet/core/install/linux>

    Install .NET on Linux

    Also:

    <https://github.com/mono/mono>

    --
    The bank sent our statement this morning,
    The red ink was a sight of great awe!
    Their figures and mine might have balanced,
    But my wife was too quick on the draw.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris Ahlstrom@3:633/10 to All on Mon Jan 5 06:55:59 2026
    rbowman wrote this post by blinking in Morse code:

    On Sun, 4 Jan 2026 19:04:14 -0500, c186282 wrote:

    <brevsnip>

    Actually, don't even like CPP ... plain 'C' has so far met all my
    needs.

    I was thinking about C++ on my walk today. Arduino sketches and other MCU SDKs refer to C/C++.

    #include <nRF24L01.h>
    #include <RF24.h>

    #define led 12

    RF24 radio(7, 8);
    const byte addresses[][6] = {"00001", "00002"};
    int angleValue = 0;
    boolean buttonState = 0;

    I've been getting used to using the universal initializer (from
    C++11):

    const byte addresses[][6] { "00001", "00002" };
    int angleValue { 0 };
    boolean buttonState { 0 };

    Also getting used to using "in-class" member initialization.

    <snip>

    Anyway C++ is handy in small doses.

    I use it in large doses. :-)

    --
    My love runs by like a day in June, / And he makes no friends of sorrows.
    He'll tread his galloping rigadoon / In the pathway or the morrows.
    He'll live his days where the sunbeams start / Nor could storm or wind uproot him.
    My own dear love, he is all my heart -- / And I wish somebody'd shoot him.
    -- Dorothy Parker, part 3

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris Ahlstrom@3:633/10 to All on Mon Jan 5 06:59:21 2026
    The Natural Philosopher wrote this post by blinking in Morse code:

    On 05/01/2026 03:55, rbowman wrote:
    The Pico SDK documentation talks about C/C++ but I
    haven't seen C++ being used much in the examples.

    I tend to avoid the examples where it is being used.

    Anyway C++ is handy in small doses.

    I've not found it at all necessary, ever.

    It's by far my favorite language. I still do some C, however.

    I don't like languages that make "." that overload its meaning
    with "::".

    --
    Truly simple systems... require infinite testing.
    -- Norman Augustine

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From c186282@3:633/10 to All on Mon Jan 5 08:26:21 2026
    On 1/4/26 22:55, rbowman wrote:
    On Sun, 4 Jan 2026 19:04:14 -0500, c186282 wrote:

    On 1/4/26 16:18, Lawrence D?Oliveiro wrote:
    On Sun, 04 Jan 2026 19:41:11 GMT, Charlie Gibbs wrote:

    Does C# qualify as a Microsoft proprietary language? Or are there
    implementations on OSes other than Windows (and compilers, either open >>>> source or available from other vendors)?

    The only implementation I?m aware of is Microsoft?s one built on top of
    Dotnet.

    Dotnet itself is supposedly open-source and portable to some degree
    now. There are reports of it running on Linux.

    That would be very end-around ...

    Maybe just to forget C# ... CPP is good enough.

    Actually, don't even like CPP ... plain 'C' has so far met all my
    needs.

    I was thinking about C++ on my walk today. Arduino sketches and other MCU SDKs refer to C/C++.

    #include <nRF24L01.h>
    #include <RF24.h>

    #define led 12

    RF24 radio(7, 8);
    const byte addresses[][6] = {"00001", "00002"};
    int angleValue = 0;
    boolean buttonState = 0;


    void setup() {
    Serial.begin(9600);
    radio.begin();
    radio.openWritingPipe(addresses[1]);
    radio.openReadingPipe(1, addresses[0]);
    radio.setPALevel(RF24_PA_MIN);
    }

    Obviously when you instantiate the RF24 objects and start calling class methods that will use parameters passed in to the constructor, you're in
    C++ land. However for the most part it's 'C with Classes' and very seldom
    has to get into the C++ esoterica.

    Arduino simplifies it by magically creating setup() and loop() without
    the boilerplate. The Pico SDK documentation talks about C/C++ but I
    haven't seen C++ being used much in the examples.

    Anyway C++ is handy in small doses.

    I built a dozen solar-powered dataloggers using
    Arduino 2560s. Great little boards and there is
    not the 5v -vs- 3.3v prob you get with PI prods.
    Most instrumentation you get is still 5v.

    On the flip you can get a Pico with wi-fi already
    built in, perhaps more useful than Rf24 unless you
    want yer Ards to be like a very 'private network'.
    There are some other serial->RF transceivers out
    there too which work down in the megahertz zone
    and may offer more range.

    Anyway, Ard 'C' is pretty straight 'C'. Some of
    the libs CAN have an 'object' character however,
    but I don't see that as an entire paradigm
    shift to CPP.

    C#/dotnet ... I'm uncomfortable seeing such
    heavily M$ solutions used in Linux. I still
    have this vision of M$ lawyers waiting until
    enough Linux stuff is writ using their stuff
    and then POUNCING.


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Niklas Karlsson@3:633/10 to All on Mon Jan 5 18:08:21 2026
    On 2026-01-05, rbowman <bowman@montana.com> wrote:

    You can really blame Microsoft for creating MFC; they had to wrap their C API in something. You can blame them for DDE/OLE/COM, the ATl, and
    adopting Hungarian notation.

    (I assume you meant "can't really blame" at the beginning there?)

    Time to dip into the quotes file again:

    Hungarian Notation is the tactical nuclear weapon of source code
    obfuscation techniques.
    -- Roedy Green

    Niklas
    --
    My main argument against autonomous probes is what alien cultures
    would think us if the got hold of a deep-space probe running Windows 7.
    Their anthropologists might enjoy the paradox of a civilisation
    being able to get off the planet with such software. -- Bernd Felsche

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From The Natural Philosopher@3:633/10 to All on Mon Jan 5 18:09:34 2026
    On 05/01/2026 17:48, rbowman wrote:
    The C changes over the years like being able to declare variables where
    they are first used and single line comments were something I greeted with "Hell yeah!" rather than "What CS PhD dreamed this crap up?"

    Spot on.

    C is enough to do the job and simple to learn. Why complicate shit?

    --
    Any fool can believe in principles - and most of them do!




    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Charlie Gibbs@3:633/10 to All on Mon Jan 5 18:16:31 2026
    On 2026-01-05, c186282 <c186282@nnada.net> wrote:

    C#/dotnet ... I'm uncomfortable seeing such
    heavily M$ solutions used in Linux. I still
    have this vision of M$ lawyers waiting until
    enough Linux stuff is writ using their stuff
    and then POUNCING.

    Just because you're paranoid doesn't mean that
    they aren't out to get you.

    --
    /~\ Charlie Gibbs | I tried to join Paranoids
    \ / <cgibbs@kltpzyxm.invalid> | Anonymous but they wouldn't
    X I'm really at ac.dekanfrus | tell me where they hold
    / \ if you read it the right way. | their meetings.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Charlie Gibbs@3:633/10 to All on Mon Jan 5 18:20:24 2026
    On 2026-01-05, The Natural Philosopher <tnp@invalid.invalid> wrote:

    On 05/01/2026 17:48, rbowman wrote:

    The C changes over the years like being able to declare variables where
    they are first used and single line comments were something I greeted with >> "Hell yeah!" rather than "What CS PhD dreamed this crap up?"

    Spot on.

    C is enough to do the job and simple to learn. Why complicate shit?

    Let me guess: so companies can sell you a new compiler every year,
    plus courses in how to use the new shit.

    --
    /~\ Charlie Gibbs | Growth for the sake of
    \ / <cgibbs@kltpzyxm.invalid> | growth is the ideology
    X I'm really at ac.dekanfrus | of the cancer cell.
    / \ if you read it the right way. | -- Edward Abbey

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Charlie Gibbs@3:633/10 to All on Mon Jan 5 18:24:48 2026
    On 2026-01-05, Charlie Gibbs <cgibbs@kltpzyxm.invalid> wrote:

    On 2026-01-05, The Natural Philosopher <tnp@invalid.invalid> wrote:

    On 05/01/2026 17:48, rbowman wrote:

    The C changes over the years like being able to declare variables where
    they are first used and single line comments were something I greeted with >>> "Hell yeah!" rather than "What CS PhD dreamed this crap up?"

    Spot on.

    C is enough to do the job and simple to learn. Why complicate shit?

    Let me guess: so companies can sell you a new compiler every year,
    plus courses in how to use the new shit.

    Oh, and so conslutants can bleed you white offering so-called "solutions".

    --
    /~\ Charlie Gibbs | Growth for the sake of
    \ / <cgibbs@kltpzyxm.invalid> | growth is the ideology
    X I'm really at ac.dekanfrus | of the cancer cell.
    / \ if you read it the right way. | -- Edward Abbey

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Lawrence D?Oliveiro@3:633/10 to All on Mon Jan 5 21:44:23 2026
    On Mon, 05 Jan 2026 18:20:24 GMT, Charlie Gibbs wrote:

    Let me guess: so companies can sell you a new compiler every year,
    plus courses in how to use the new shit.

    Nobody pays money for compilers any more. All the important tools are open-source now.

    The days of trying to monetize development tools, like in the 1980s
    and 1990s, are long past.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris Ahlstrom@3:633/10 to All on Mon Jan 5 17:25:52 2026
    Niklas Karlsson wrote this post by blinking in Morse code:

    On 2026-01-05, rbowman <bowman@montana.com> wrote:

    You can really blame Microsoft for creating MFC; they had to wrap their C >> API in something. You can blame them for DDE/OLE/COM, the ATl, and
    adopting Hungarian notation.

    (I assume you meant "can't really blame" at the beginning there?)

    Time to dip into the quotes file again:

    Hungarian Notation is the tactical nuclear weapon of source code
    obfuscation techniques.
    -- Roedy Green

    Agreed. The only warts I use are:

    m_ A class member. But I often make an accessor function
    without the "m_"
    sm_ A static class member.
    c_ A constant, not in a class..

    Of course, there's no way in hell to get programmer's to agree on
    coding conventions.

    That's why I'm happy to work on my own now.

    --
    ... an anecdote from IBM's Yorktown Heights Research Center. When a
    programmer used his new computer terminal, all was fine when he was sitting down, but he couldn't log in to the system when he was standing up. That behavior was 100 percent repeatable: he could always log in when sitting and never when standing.

    Most of us just sit back and marvel at such a story; how could that terminal know whether the poor guy was sitting or standing? Good debuggers, though, know that there has to be a reason. Electrical theories are the easiest to hypothesize: was there a loose wire under the carpet, or problems with static electricity? But electrical problems are rarely consistently reproducible.
    An alert IBMer finally noticed that the problem was in the terminal's keyboard: the tops of two keys were switched. When the programmer was seated he was a touch typist and the problem went unnoticed, but when he stood he was led astray by hunting and pecking.
    -- "Programming Pearls" column, by Jon
  • From c186282@3:633/10 to All on Mon Jan 5 19:31:31 2026
    On 1/5/26 13:20, Charlie Gibbs wrote:
    On 2026-01-05, The Natural Philosopher <tnp@invalid.invalid> wrote:

    On 05/01/2026 17:48, rbowman wrote:

    The C changes over the years like being able to declare variables where
    they are first used and single line comments were something I greeted with >>> "Hell yeah!" rather than "What CS PhD dreamed this crap up?"

    Spot on.

    C is enough to do the job and simple to learn. Why complicate shit?

    Let me guess: so companies can sell you a new compiler every year,
    plus courses in how to use the new shit.

    Cynical ... but perhaps partially true.

    Mostly, it's that everybody thinks they
    have the Better Idea, the Better Approach.

    There really isn't anything you can't do
    with 'C'. However 'C' is kind of CLUNKY
    sometimes - so people find ways to hide
    that, write something more 'elegant' in
    the process. Python is ACTUALLY 'C' ...
    but many of the clunky and/or long bits
    have been much streamlined.

    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    But it CAN be much more friendly and/or
    tuned to a particular area of interest
    or preferred programming style.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Pancho@3:633/10 to All on Tue Jan 6 07:55:01 2026
    On 1/5/26 22:25, Chris Ahlstrom wrote:
    Niklas Karlsson wrote this post by blinking in Morse code:

    On 2026-01-05, rbowman <bowman@montana.com> wrote:

    You can really blame Microsoft for creating MFC; they had to wrap their C >>> API in something. You can blame them for DDE/OLE/COM, the ATl, and
    adopting Hungarian notation.

    (I assume you meant "can't really blame" at the beginning there?)

    Time to dip into the quotes file again:

    Hungarian Notation is the tactical nuclear weapon of source code
    obfuscation techniques.
    -- Roedy Green

    Agreed. The only warts I use are:

    m_ A class member. But I often make an accessor function
    without the "m_"
    sm_ A static class member.
    c_ A constant, not in a class..


    I thought that all stopped 15-20 years ago when IDEs introduced auto colouring.



    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Pancho@3:633/10 to All on Tue Jan 6 08:03:13 2026
    On 1/5/26 11:50, Chris Ahlstrom wrote:
    Lawrence D?Oliveiro wrote this post by blinking in Morse code:

    On Sun, 04 Jan 2026 19:41:11 GMT, Charlie Gibbs wrote:

    Does C# qualify as a Microsoft proprietary language? Or are there
    implementations on OSes other than Windows (and compilers, either
    open source or available from other vendors)?

    The only implementation I?m aware of is Microsoft?s one built on top
    of Dotnet.

    Dotnet itself is supposedly open-source and portable to some degree
    now. There are reports of it running on Linux.

    <https://learn.microsoft.com/en-us/dotnet/core/install/linux>

    Install .NET on Linux

    Also:

    <https://github.com/mono/mono>

    C# is a lovely language, but isn't different enough from Java to make it worthwhile doing something with much less online support when using Linux.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris Ahlstrom@3:633/10 to All on Tue Jan 6 06:19:14 2026
    Pancho wrote this post by blinking in Morse code:

    On 1/5/26 22:25, Chris Ahlstrom wrote:
    Niklas Karlsson wrote this post by blinking in Morse code:

    On 2026-01-05, rbowman <bowman@montana.com> wrote:

    You can really blame Microsoft for creating MFC; they had to wrap their C >>>> API in something. You can blame them for DDE/OLE/COM, the ATl, and
    adopting Hungarian notation.

    (I assume you meant "can't really blame" at the beginning there?)

    Time to dip into the quotes file again:

    Hungarian Notation is the tactical nuclear weapon of source code
    obfuscation techniques.
    -- Roedy Green

    Agreed. The only warts I use are:

    m_ A class member. But I often make an accessor function
    without the "m_"
    sm_ A static class member.
    c_ A constant, not in a class..

    I thought that all stopped 15-20 years ago when IDEs introduced auto colouring.

    I don't use an IDE. Just vim and build scripts like make and
    Meson.

    Vim has syntax highlighting, and I've added a ton of my own key
    words to ~/.vim/after/syntax.

    What IDEs auto-color tokens based on whether they are class
    members or not?

    --
    Marriage is the sole cause of divorce.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Carlos E.R.@3:633/10 to All on Tue Jan 6 13:36:18 2026
    On 2026-01-05 19:09, The Natural Philosopher wrote:
    On 05/01/2026 17:48, rbowman wrote:
    The C changes over the years like being able to declare variables where
    they are first used and single line comments were something I greeted
    with
    "Hell yeah!" rather than "What CS PhD dreamed this crap up?"

    Spot on.

    C is enough to do the job and simple to learn. Why complicate shit?


    My C teacher said it was a mistake to use C as an all purpose language,
    like for userland applications. Using C is the cause of many bugs that a proper language would catch.

    That was around 1991.

    He knew. He participated in some study tasked by the Canadian government
    to study C compilers, but he could not talk about what they wrote.

    --
    Cheers, Carlos.
    ES??, EU??;

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Peter Flass@3:633/10 to All on Tue Jan 6 07:55:03 2026
    On 1/6/26 05:36, Carlos E.R. wrote:
    On 2026-01-05 19:09, The Natural Philosopher wrote:
    On 05/01/2026 17:48, rbowman wrote:
    The C changes over the years like being able to declare variables where
    they are first used and single line comments were something I greeted
    with
    "Hell yeah!" rather than "What CS PhD dreamed this crap up?"

    Spot on.

    C is enough to do the job and simple to learn. Why complicate shit?


    My C teacher said it was a mistake to use C as an all purpose language,
    like for userland applications. Using C is the cause of many bugs that a proper language would catch.

    That was around 1991.

    He knew. He participated in some study tasked by the Canadian government
    to study C compilers, but he could not talk about what they wrote.


    This was always my feeling. C is great as a low-level language, but
    extending its use cases caused a lot of problems. Also, extensions has
    been added to K&R C (some necessary, but many not) that has complexified
    the syntax into unreadability. PL/I was designed with all the features
    that were later added to C, so the end result is cleaner.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Chris Ahlstrom@3:633/10 to All on Tue Jan 6 11:12:44 2026
    Waldek Hebisch wrote this post by blinking in Morse code:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C.

    <interjection>

    C++ (and some other languages)
    have exceptions, C do not have them.

    What about setjmp()/longjmp() ?

    </interjection>

    There are several
    smaller things, for example Ada or Pascal modulo is different
    that C/Fortran modulo. During optimization passes gcc
    keeps such information, to allow better optimization and
    error reporting.

    There were/are compilers that work by translating to C. But
    this has limitations: generated code typically is worse because
    language specific information is lost in translation. Error
    reporting is worse because translator is not doing as many
    analyzes as gcc do. For those reasons compilers in gcc
    generate common representation which contains sum of features
    of all supported languages and not C.

    --
    Paul's Law:
    You can't fall off the floor.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Dan Cross@3:633/10 to All on Tue Jan 6 16:25:46 2026
    In article <10jjc9s$3uhtk$1@dont-email.me>,
    Chris Ahlstrom <OFeem1987@teleworm.us> wrote:
    Waldek Hebisch wrote this post by blinking in Morse code:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C.

    <interjection>

    C++ (and some other languages)
    have exceptions, C do not have them.

    What about setjmp()/longjmp() ?

    Not at all the same thing. `setjmp`/`longjmp` are about
    non-local flows of control; exceptions are about non-local
    passing of values.

    Of course, one can use `setjmp` and `longjmp` to build an ersatz
    exception system, but only as a part. One can also use them to
    build green threads, but they are not in themselves "threads".

    - Dan C.


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From The Natural Philosopher@3:633/10 to All on Tue Jan 6 17:17:23 2026
    On 06/01/2026 12:36, Carlos E.R. wrote:
    On 2026-01-05 19:09, The Natural Philosopher wrote:
    On 05/01/2026 17:48, rbowman wrote:
    The C changes over the years like being able to declare variables where
    they are first used and single line comments were something I greeted
    with
    "Hell yeah!" rather than "What CS PhD dreamed this crap up?"

    Spot on.

    C is enough to do the job and simple to learn. Why complicate shit?


    My C teacher said it was a mistake to use C as an all purpose language,
    like for userland applications. Using C is the cause of many bugs that a proper language would catch.

    That was around 1991.

    He knew.

    How to make mistakes, but not to program defensively

    You don't treat a chainsaw like a palette knife for cake icing.


    He participated in some study tasked by the Canadian government
    to study C compilers, but he could not talk about what they wrote.


    Mostly bollocks then...

    --
    ?Puritanism: The haunting fear that someone, somewhere, may be happy.?

    H.L. Mencken, A Mencken Chrestomathy


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From The Natural Philosopher@3:633/10 to All on Tue Jan 6 17:26:22 2026
    On 06/01/2026 16:12, Chris Ahlstrom wrote:
    Waldek Hebisch wrote this post by blinking in Morse code:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C.

    <interjection>

    C++ (and some other languages)
    have exceptions, C do not have them.

    What about setjmp()/longjmp() ?

    Exactly. The problem with making high level 'features' in a language is
    people then don't see how they actually work.

    One of the worst features of C libs is malloc() and free() where the underlying mechanism is opaque.

    auto allocation and garbage collection is even worse.

    Also operator overloading and weak typing.

    You simply do not know where you are.

    It's all fearfully clever ins a smart alec sort of way but it makes for
    a lot of problems downstream...

    --
    I was brought up to believe that you should never give offence if you
    can avoid it; the new culture tells us you should always take offence if
    you can. There are now experts in the art of taking offence, indeed
    whole academic subjects, such as 'gender studies', devoted to it.

    Sir Roger Scruton


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Dan Cross@3:633/10 to All on Tue Jan 6 17:50:00 2026
    In article <10jjgju$5l5$3@dont-email.me>,
    The Natural Philosopher <tnp@invalid.invalid> wrote:
    On 06/01/2026 16:12, Chris Ahlstrom wrote:
    Waldek Hebisch wrote this post by blinking in Morse code:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C.

    <interjection>

    C++ (and some other languages)
    have exceptions, C do not have them.

    What about setjmp()/longjmp() ?

    Exactly. The problem with making high level 'features' in a language is >people then don't see how they actually work.

    What an odd take.

    The point of programming is to write programs. The point of
    maintenance is to make sure those programs continue working over
    time as technology and environments change. C (and for that
    matter Unix) were invented to make writing and maintaining
    programs easier than the techniques that had been used up to
    that point, not to elucidate the implementation. This idea of
    C as some kind of glorified "high-level" assembler hasn't been
    true since we started to see optimizing compilers in the 1970s.

    One of the worst features of C libs is malloc() and free() where the >underlying mechanism is opaque.

    ...because it is utterly irrelevant to 99.99% of programs.

    If you want to see how it works under the hood, go look up the
    system interface. But if done properly, that's independent of
    the user application language. Or, if you can, read the library
    source if you want to see how `malloc` is implemented: this is
    one of the benefits of open source software.

    The claim that `malloc` is bad because it hides the details of
    memory management is just silly. stdio hides the details of
    blocks, buffer caches, bus acceses, DMA, asynchronous descriptor
    queues, IO devices and their access mechanisms, and so on, from
    programmers. Because, again, it's totally irrelevant for _most_
    programs. Is that similarly bad?

    auto allocation and garbage collection is even worse.

    Also operator overloading and weak typing.

    You simply do not know where you are.

    Most programmers don't know that stuff anyway. Most have no
    idea how their program is loaded into memory or starts running,
    how the platform is initialized, the implementation of the sorts
    of abstractions that the OS provides, and so on.

    It's all fearfully clever ins a smart alec sort of way but it makes for
    a lot of problems downstream...

    Nonsense.

    - Dan C.


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Scott Lurndal@3:633/10 to All on Tue Jan 6 17:59:32 2026
    cross@spitfire.i.gajendra.net (Dan Cross) writes:
    In article <10jjc9s$3uhtk$1@dont-email.me>,
    Chris Ahlstrom <OFeem1987@teleworm.us> wrote:
    Waldek Hebisch wrote this post by blinking in Morse code:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C.

    <interjection>

    C++ (and some other languages)
    have exceptions, C do not have them.

    What about setjmp()/longjmp() ?

    Not at all the same thing. `setjmp`/`longjmp` are about
    non-local flows of control; exceptions are about non-local
    passing of values.

    However, in many real world situations, [sig]setjump and
    [sig]longjmp can be used to emulate exceptions.

    I have a C++ application that models a computer (Burroughs V380
    et alia). The thread that models each processor (cpu) uses
    longjmp whenever a condition is encountered that would have
    been signaled as a fault on the real cpu. The processor code
    doesn't do dynamic memory allocation; and the fault code is
    stored in the processor class before the longjmp call.

    I once tried replacing setjmp/longjmp with C++ exceptions which
    led to a 20% reduction in simulated CPU performance (as measured
    by the time to compile a COBOL program).

    //
    // Now we execute the instruction.
    //
    switch (setjmp(p_fault)) {
    case 0:
    //
    // If a fault was thrown (longjmp) during operand
    // fetch, p_fetch_fault will be true, the state of the
    // p_operands[] array will be indeterminate and we don't
    // want to execute the instruction. Unless it is a non-taken
    // branch, that is, which is allowed to have e.g. undigits in
    // the branch address. Blech. This means the branch ops
    // must test the p_operands[0] value before accessing it.
    //
    if (branch || !p_fetch_fault) {
    failed = (this->*opp->op_insn)(opp);
    }

    if (branch) {
    if (!p_taken) {
    if (p_fetch_fault) {
    p_fetch_fault = false;
    p_rd.clear();
    }
    }
    }

    if (p_fetch_fault) {
    char buf[10];
    char buf1[20];

    p_rd.format(buf1, sizeof(buf1));
    p_logger->log("[%01lu/%04lu] Fetch Fault %s at @%s:%06llu\n",
    p_procnum, p_curtasknum, buf1,
    p_active_env.print(buf, sizeof(buf)), p_ip);
    failed = true;
    }
    break;
    case 1:
    failed = false;
    //
    // Generic error. Assume failed; there's most likely a non-zero
    // processor Result Descriptor (p_rd) at this point.
    //
    break;
    case 2:
    //
    // Hard memory area fault. We've already done the hardware call
    // procedure (since we knew the mast number), so the processor R/D
    // has already been stored and cleared. Fake success for the op
    // to handle the fault.
    //
    failed = false;
    break;
    case 3:
    //
    // Maintenance processor requested a stop while we were idle on a
    // IDL or BRV instruction. Just replay the instruction.
    //
    p_logger->log("[%1.1lu/%4.4lu] Maintenance Processor Stop\n",
    p_procnum, p_curtasknum);
    p_ip = p_origip;
    return false;
    }

    inline void
    c_processor::instruction_error(instruction_error_t extension)
    {
    p_rd.instruction_error(extension);
    //p_logger->backtrace();
    longjmp(p_fault, 1);
    }

    inline void
    c_processor::address_error(address_error_t extension)
    {
    p_rd.address_error(extension);
    //p_logger->backtrace();
    longjmp(p_fault, 1);
    }

    /**
    * Raise an instruction_timeout. Caused by infinite (or too long) recursion in
    * indirect field lengths, indirect addresses and search list instructions.
    */
    inline void
    c_processor::instruction_timeout(void)
    {
    p_rd.instruction_timeout();
    longjmp(p_fault, 1);
    }

    inline void
    c_processor::stack_overflow(void)
    {
    p_rd.stack_overflow();
    longjmp(p_fault, 1);
    }

    inline void
    c_processor::invalid_arithmetic_data(void)
    {
    p_rd.invalid_arithmetic_data();
    //p_logger->backtrace();
    longjmp(p_fault, 1);
    }

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Dan Cross@3:633/10 to All on Tue Jan 6 19:59:54 2026
    In article <84c7R.819121$PGrb.160843@fx10.iad>,
    Scott Lurndal <slp53@pacbell.net> wrote:
    cross@spitfire.i.gajendra.net (Dan Cross) writes:
    In article <10jjc9s$3uhtk$1@dont-email.me>,
    Chris Ahlstrom <OFeem1987@teleworm.us> wrote:
    Waldek Hebisch wrote this post by blinking in Morse code:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C.

    <interjection>

    C++ (and some other languages)
    have exceptions, C do not have them.

    What about setjmp()/longjmp() ?

    Not at all the same thing. `setjmp`/`longjmp` are about
    non-local flows of control; exceptions are about non-local
    passing of values.

    However, in many real world situations, [sig]setjump and
    [sig]longjmp can be used to emulate exceptions.

    Yes, I said just that. :-)

    I have a C++ application that models a computer (Burroughs V380
    et alia). The thread that models each processor (cpu) uses
    longjmp whenever a condition is encountered that would have
    been signaled as a fault on the real cpu. The processor code
    doesn't do dynamic memory allocation; and the fault code is
    stored in the processor class before the longjmp call.

    I once tried replacing setjmp/longjmp with C++ exceptions which
    led to a 20% reduction in simulated CPU performance (as measured
    by the time to compile a COBOL program).

    Huh. Interesting. I wonder why...possibly to run a bunch of
    nop destructors?

    - Dan C.


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From c186282@3:633/10 to All on Tue Jan 6 16:24:18 2026
    On 1/6/26 07:16, Waldek Hebisch wrote:
    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C. C++ (and some other languages)
    have exceptions, C do not have them. There are several
    smaller things, for example Ada or Pascal modulo is different
    that C/Fortran modulo. During optimization passes gcc
    keeps such information, to allow better optimization and
    error reporting.

    There were/are compilers that work by translating to C. But
    this has limitations: generated code typically is worse because
    language specific information is lost in translation. Error
    reporting is worse because translator is not doing as many
    analyzes as gcc do. For those reasons compilers in gcc
    generate common representation which contains sum of features
    of all supported languages and not C.

    You give it a file in whatever lang, it produces
    a file in 'C' and compiles that. So, I'll basically
    stick with my 'translator' def. And if 'C' does not
    'natively support' something you can FAKE it with code,
    not really anything you CAN'T do with 'C'.

    By 'compiler' I mean "source in -> (agitating sounds) ->
    binary executable out.

    I think there are still a few FORTRAN compilers out
    there for Linux, maybe COBOL too. There's at least
    one forth IDE/compiler. Digital Mars makes 'C' and
    'D' compilers. GCC is not the alpha and omega
    of software development.

    But it CAN be much more friendly and/or
    tuned to a particular area of interest
    or preferred programming style.


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Scott Lurndal@3:633/10 to All on Tue Jan 6 21:57:31 2026
    cross@spitfire.i.gajendra.net (Dan Cross) writes:
    In article <84c7R.819121$PGrb.160843@fx10.iad>,
    Scott Lurndal <slp53@pacbell.net> wrote:
    cross@spitfire.i.gajendra.net (Dan Cross) writes:
    In article <10jjc9s$3uhtk$1@dont-email.me>,
    Chris Ahlstrom <OFeem1987@teleworm.us> wrote:
    Waldek Hebisch wrote this post by blinking in Morse code:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C.

    <interjection>

    C++ (and some other languages)
    have exceptions, C do not have them.

    What about setjmp()/longjmp() ?

    Not at all the same thing. `setjmp`/`longjmp` are about
    non-local flows of control; exceptions are about non-local
    passing of values.

    However, in many real world situations, [sig]setjump and
    [sig]longjmp can be used to emulate exceptions.

    Yes, I said just that. :-)

    I have a C++ application that models a computer (Burroughs V380
    et alia). The thread that models each processor (cpu) uses
    longjmp whenever a condition is encountered that would have
    been signaled as a fault on the real cpu. The processor code
    doesn't do dynamic memory allocation; and the fault code is
    stored in the processor class before the longjmp call.

    I once tried replacing setjmp/longjmp with C++ exceptions which
    led to a 20% reduction in simulated CPU performance (as measured
    by the time to compile a COBOL program).

    Huh. Interesting. I wonder why...possibly to run a bunch of
    nop destructors?

    A large component of the overhead was the code generated in every
    function to handle unwinding during exception processing. When
    using setjmp/longjmp, I compiled with the following options so
    it wouldn't generate the unwind code:

    GXXFLAGS = -mno-red-zone
    GXXFLAGS += -fno-strict-aliasing
    GXXFLAGS += -fno-stack-protector
    GXXFLAGS += -fno-exceptions
    GXXFLAGS += -Wall
    GXXFLAGS += -mtune=native


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Scott Lurndal@3:633/10 to All on Wed Jan 7 00:22:56 2026
    antispam@fricas.org (Waldek Hebisch) writes:
    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    On 1/6/26 07:16, Waldek Hebisch wrote:
    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C. C++ (and some other languages)
    have exceptions, C do not have them. There are several
    smaller things, for example Ada or Pascal modulo is different
    that C/Fortran modulo. During optimization passes gcc
    keeps such information, to allow better optimization and
    error reporting.

    There were/are compilers that work by translating to C. But
    this has limitations: generated code typically is worse because
    language specific information is lost in translation. Error
    reporting is worse because translator is not doing as many
    analyzes as gcc do. For those reasons compilers in gcc
    generate common representation which contains sum of features
    of all supported languages and not C.

    You give it a file in whatever lang, it produces
    a file in 'C' and compiles that.

    No, if you looked at what compilers in gcc are doing you
    will see that there are no intemediate C file. There
    is intermediate assembler, but between source file and
    assembler each compiler work independently

    AFAIK you can remove C compiler binary and other compilers in
    gcc will still work.

    So, I'll basically
    stick with my 'translator' def. And if 'C' does not
    'natively support' something you can FAKE it with code,
    not really anything you CAN'T do with 'C'.

    A I wrote, you can use "via C" translators, but results are
    not so good as with dedicated compilers, that is why gcc
    contains separate compilers.

    By 'compiler' I mean "source in -> (agitating sounds) ->
    binary executable out.

    By that definition gcc does _not_ contain a C compiler:
    gcc generates assembly and then assembler and linker produce
    final executable.

    Actually, the C front-end will translate C into an
    intermediate tree representation. That tree is passed to a
    target architecture specific back-end that generates
    assembler and the gcc driver calls gas(1) (or other
    compatible assembler) to convert the assembler language
    into a binary object file. The driver then passes the
    object file (and other command line arguments) to the
    linker utility to generate the executable.

    The back-ends only look at the common intermediate
    representation and have no visibility into the actual
    source language.



    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From c186282@3:633/10 to All on Tue Jan 6 21:00:25 2026
    On 1/6/26 18:10, Waldek Hebisch wrote:
    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    On 1/6/26 07:16, Waldek Hebisch wrote:
    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C. C++ (and some other languages)
    have exceptions, C do not have them. There are several
    smaller things, for example Ada or Pascal modulo is different
    that C/Fortran modulo. During optimization passes gcc
    keeps such information, to allow better optimization and
    error reporting.

    There were/are compilers that work by translating to C. But
    this has limitations: generated code typically is worse because
    language specific information is lost in translation. Error
    reporting is worse because translator is not doing as many
    analyzes as gcc do. For those reasons compilers in gcc
    generate common representation which contains sum of features
    of all supported languages and not C.

    You give it a file in whatever lang, it produces
    a file in 'C' and compiles that.

    No, if you looked at what compilers in gcc are doing you
    will see that there are no intemediate C file. There
    is intermediate assembler, but between source file and
    assembler each compiler work independently

    AFAIK you can remove C compiler binary and other compilers in
    gcc will still work.

    So, I'll basically
    stick with my 'translator' def. And if 'C' does not
    'natively support' something you can FAKE it with code,
    not really anything you CAN'T do with 'C'.

    A I wrote, you can use "via C" translators, but results are
    not so good as with dedicated compilers, that is why gcc
    contains separate compilers.

    By 'compiler' I mean "source in -> (agitating sounds) ->
    binary executable out.

    By that definition gcc does _not_ contain a C compiler:
    gcc generates assembly and then assembler and linker produce
    final executable. Things are more complicated when you use
    LTO, because "linker" in this case actially is doing large part
    of compiler work and optimized code before producing final
    executable. But non-LTO compilation works via assembly.


    Clearly the GCC collection is More Complicated
    than I thought.

    But I'm still not sure I'll call them 'compilers'
    in the older sense of the word. Some intermediate
    term is required.


    I think there are still a few FORTRAN compilers out
    there for Linux, maybe COBOL too. There's at least
    one forth IDE/compiler. Digital Mars makes 'C' and
    'D' compilers. GCC is not the alpha and omega
    of software development.

    But it CAN be much more friendly and/or
    tuned to a particular area of interest
    or preferred programming style.



    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Charlie Gibbs@3:633/10 to All on Wed Jan 7 06:33:47 2026
    On 2026-01-06, Waldek Hebisch <antispam@fricas.org> wrote:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:

    On 1/6/26 07:16, Waldek Hebisch wrote:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C. C++ (and some other languages)
    have exceptions, C do not have them. There are several
    smaller things, for example Ada or Pascal modulo is different
    that C/Fortran modulo. During optimization passes gcc
    keeps such information, to allow better optimization and
    error reporting.

    There were/are compilers that work by translating to C. But
    this has limitations: generated code typically is worse because
    language specific information is lost in translation. Error
    reporting is worse because translator is not doing as many
    analyzes as gcc do. For those reasons compilers in gcc
    generate common representation which contains sum of features
    of all supported languages and not C.

    You give it a file in whatever lang, it produces
    a file in 'C' and compiles that.

    No, if you looked at what compilers in gcc are doing you
    will see that there are no intemediate C file. There
    is intermediate assembler, but between source file and
    assembler each compiler work independently

    Still, Bjarne Stroustrup's first implementation of C++
    was a program called cfront, which translated C++ to C.

    --
    /~\ Charlie Gibbs | Growth for the sake of
    \ / <cgibbs@kltpzyxm.invalid> | growth is the ideology
    X I'm really at ac.dekanfrus | of the cancer cell.
    / \ if you read it the right way. | -- Edward Abbey

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Dan Cross@3:633/10 to All on Wed Jan 7 11:53:07 2026
    In article <ZN-dnY--SfIc4MD0nZ2dnZfqnPednZ2d@giganews.com>,
    c186282 <c186282@nnada.net> wrote:
    On 1/6/26 07:16, Waldek Hebisch wrote:
    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C. C++ (and some other languages)
    have exceptions, C do not have them. There are several
    smaller things, for example Ada or Pascal modulo is different
    that C/Fortran modulo. During optimization passes gcc
    keeps such information, to allow better optimization and
    error reporting.

    There were/are compilers that work by translating to C. But
    this has limitations: generated code typically is worse because
    language specific information is lost in translation. Error
    reporting is worse because translator is not doing as many
    analyzes as gcc do. For those reasons compilers in gcc
    generate common representation which contains sum of features
    of all supported languages and not C.

    You give it a file in whatever lang, it produces
    a file in 'C' and compiles that.

    No. That's not how it works. This is factually wrong.

    - Dan C.


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Bob Vloon@3:633/10 to All on Wed Jan 7 12:01:19 2026
    rbowman <bowman@montana.com> writes:

    On Tue, 6 Jan 2026 08:03:13 +0000, Pancho wrote:

    C# is a lovely language, but isn't different enough from Java to make it
    worthwhile doing something with much less online support when using
    Linux.

    C# is what Java should have been, I had hopes for Java in the late '90s
    that were dashed when it became bloated and slow.

    I find this remark interesting. C# is actively acquiring all kinds of programming paradigms / language constructs making it a "large" language,
    and imposing the "burden" of continuously having to think "should I use
    this construct, or should I use that construct" upon the programmer.

    Apart from that, MS continuously changes the .NET libraries, yielding a permanent present "technical debt".

    Also, in C# I have to actively program for efficiency, while in Java the JVM takes more or less care of that.

    I always find Java very productive. Conservative, but productive. Simply because, well, there is less choice in language constructs and the API's
    are more stable. And because Maven is much more sophisticated than NuGet :)

    Don't get me wrong, I appreciate C# as a language, but I think quite a lot
    of software would be better off (read: could be constructed faster) if not written written in C# / .NET but in Java and it's ecosystem.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Dan Cross@3:633/10 to All on Wed Jan 7 13:37:52 2026
    In article <fzf7R.805815$i%aa.272881@fx12.iad>,
    Scott Lurndal <slp53@pacbell.net> wrote:
    cross@spitfire.i.gajendra.net (Dan Cross) writes:
    In article <84c7R.819121$PGrb.160843@fx10.iad>,
    Scott Lurndal <slp53@pacbell.net> wrote:
    cross@spitfire.i.gajendra.net (Dan Cross) writes:
    In article <10jjc9s$3uhtk$1@dont-email.me>,
    Chris Ahlstrom <OFeem1987@teleworm.us> wrote:
    Waldek Hebisch wrote this post by blinking in Morse code:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C.

    <interjection>

    C++ (and some other languages)
    have exceptions, C do not have them.

    What about setjmp()/longjmp() ?

    Not at all the same thing. `setjmp`/`longjmp` are about
    non-local flows of control; exceptions are about non-local
    passing of values.

    However, in many real world situations, [sig]setjump and
    [sig]longjmp can be used to emulate exceptions.

    Yes, I said just that. :-)

    I have a C++ application that models a computer (Burroughs V380
    et alia). The thread that models each processor (cpu) uses
    longjmp whenever a condition is encountered that would have
    been signaled as a fault on the real cpu. The processor code
    doesn't do dynamic memory allocation; and the fault code is
    stored in the processor class before the longjmp call.

    I once tried replacing setjmp/longjmp with C++ exceptions which
    led to a 20% reduction in simulated CPU performance (as measured
    by the time to compile a COBOL program).

    Huh. Interesting. I wonder why...possibly to run a bunch of
    nop destructors?

    A large component of the overhead was the code generated in every
    function to handle unwinding during exception processing.

    That makes sense; thanks.

    When
    using setjmp/longjmp, I compiled with the following options so
    it wouldn't generate the unwind code:

    GXXFLAGS = -mno-red-zone
    GXXFLAGS += -fno-strict-aliasing
    GXXFLAGS += -fno-stack-protector
    GXXFLAGS += -fno-exceptions
    GXXFLAGS += -Wall
    GXXFLAGS += -mtune=native

    Most of those seem irrelevant to generating extra code for stack
    unwinding. `setjmp`/`longjmp` are really just pushing and
    popping some register state (including the stack pointer) so
    presumably it simply skips all of that code by skipping over any
    intermediate stack frame frames?

    - Dan C.


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Peter Flass@3:633/10 to All on Wed Jan 7 07:34:47 2026
    On 1/6/26 14:24, c186282 wrote:
    On 1/6/26 07:16, Waldek Hebisch wrote:
    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    ÿÿ Hmm ... look at all the GNU 'compilers' -
    ÿÿ FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    ÿÿ G++, even Algol-68. None are 'compilers'
    ÿÿ per-se, but to-'C' TRANSLATORS. So, 'C',
    ÿÿ pretty much All Are One And One Is All.

    No.ÿ Compiler as first stage translate given language to a
    common representation.ÿ This representatiton is different
    than C.ÿ Ada and GNU Pascal have parametrized types, there
    is nothing like that in C.ÿ C++ (and some other languages)
    have exceptions, C do not have them.ÿ There are several
    smaller things, for example Ada or Pascal modulo is different
    that C/Fortran modulo.ÿ During optimization passes gcc
    keeps such information, to allow better optimization and
    error reporting.

    There were/are compilers that work by translating to C.ÿ But
    this has limitations: generated code typically is worse because
    language specific information is lost in translation.ÿ Error
    reporting is worse because translator is not doing as many
    analyzes as gcc do.ÿ For those reasons compilers in gcc
    generate common representation which contains sum of features
    of all supported languages and not C.

    ÿ You give it a file in whatever lang, it produces
    ÿ a file in 'C' and compiles that. So, I'll basically
    ÿ stick with my 'translator' def. And if 'C' does not
    ÿ 'natively support' something you can FAKE it with code,
    ÿ not really anything you CAN'T do with 'C'.

    ÿ By 'compiler' I mean "source in -> (agitating sounds) ->
    ÿ binary executable out.

    ÿ I think there are still a few FORTRAN compilers out
    ÿ there for Linux, maybe COBOL too. There's at least
    ÿ one forth IDE/compiler. Digital Mars makes 'C' and
    ÿ 'D' compilers. GCC is not the alpha and omega
    ÿ of software development.

    ÿÿ But it CAN be much more friendly and/or
    ÿÿ tuned to a particular area of interest
    ÿÿ or preferred programming style.


    Iron Spring PL/I compiles directly to binary. It can produce assembler
    output, but only as a by-product of generating the object file. I have occasionally thought of trying to make it another front-end for GCC. As
    I understand it, GCC compiles to an intermediate language, not to C.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Dan Cross@3:633/10 to All on Wed Jan 7 15:13:41 2026
    In article <10jlqu8$mvh2$3@dont-email.me>,
    Peter Flass <Peter@Iron-Spring.com> wrote:
    On 1/6/26 14:24, c186282 wrote:
    On 1/6/26 07:16, Waldek Hebisch wrote:
    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    ÿÿ Hmm ... look at all the GNU 'compilers' -
    ÿÿ FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    ÿÿ G++, even Algol-68. None are 'compilers'
    ÿÿ per-se, but to-'C' TRANSLATORS. So, 'C',
    ÿÿ pretty much All Are One And One Is All.

    No.ÿ Compiler as first stage translate given language to a
    common representation.ÿ This representatiton is different
    than C.ÿ Ada and GNU Pascal have parametrized types, there
    is nothing like that in C.ÿ C++ (and some other languages)
    have exceptions, C do not have them.ÿ There are several
    smaller things, for example Ada or Pascal modulo is different
    that C/Fortran modulo.ÿ During optimization passes gcc
    keeps such information, to allow better optimization and
    error reporting.

    There were/are compilers that work by translating to C.ÿ But
    this has limitations: generated code typically is worse because
    language specific information is lost in translation.ÿ Error
    reporting is worse because translator is not doing as many
    analyzes as gcc do.ÿ For those reasons compilers in gcc
    generate common representation which contains sum of features
    of all supported languages and not C.

    ÿ You give it a file in whatever lang, it produces
    ÿ a file in 'C' and compiles that. So, I'll basically
    ÿ stick with my 'translator' def. And if 'C' does not
    ÿ 'natively support' something you can FAKE it with code,
    ÿ not really anything you CAN'T do with 'C'.

    ÿ By 'compiler' I mean "source in -> (agitating sounds) ->
    ÿ binary executable out.

    ÿ I think there are still a few FORTRAN compilers out
    ÿ there for Linux, maybe COBOL too. There's at least
    ÿ one forth IDE/compiler. Digital Mars makes 'C' and
    ÿ 'D' compilers. GCC is not the alpha and omega
    ÿ of software development.

    ÿÿ But it CAN be much more friendly and/or
    ÿÿ tuned to a particular area of interest
    ÿÿ or preferred programming style.


    Iron Spring PL/I compiles directly to binary. It can produce assembler >output, but only as a by-product of generating the object file. I have >occasionally thought of trying to make it another front-end for GCC. As
    I understand it, GCC compiles to an intermediate language, not to C.

    GCC's frontends, like those of most modern compilers, generate
    an intermediate representation (that is, indeed, not C). That,
    in turn, is optimized and presented to a backend, that uses the
    IR to generate machine code for a target instruction set. In
    this way, any of the languages that the GCC front-end recognize
    can be targetted to any of the architectures its backend
    supports.

    Whether that machine code is in binary object code or textual
    assembly code hardly matters; the hard work of the compiler is
    in the transation from source to machine code.

    Separate assembly and link stages are hidden by the compiler
    driver program (e.g., the `gcc` program itself), but don't
    change the fact that, yes, Virginia, GCC is actually a compiler.

    These bizarre definitional assertions about what makes something
    a "compiler" or not seem to be mostly put forth by people who
    have never heard of the concept of "separate compilation" or
    "libraries", let alone touched the innards of a compiler. In
    particular, this idea that everything must be implemented in a
    single program or it's not a "true" compiler is rooted firmly in
    ignorance.

    - Dan C.


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Scott Lurndal@3:633/10 to All on Wed Jan 7 15:27:28 2026
    Charlie Gibbs <cgibbs@kltpzyxm.invalid> writes:
    On 2026-01-06, Waldek Hebisch <antispam@fricas.org> wrote:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:

    On 1/6/26 07:16, Waldek Hebisch wrote:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C. C++ (and some other languages)
    have exceptions, C do not have them. There are several
    smaller things, for example Ada or Pascal modulo is different
    that C/Fortran modulo. During optimization passes gcc
    keeps such information, to allow better optimization and
    error reporting.

    There were/are compilers that work by translating to C. But
    this has limitations: generated code typically is worse because
    language specific information is lost in translation. Error
    reporting is worse because translator is not doing as many
    analyzes as gcc do. For those reasons compilers in gcc
    generate common representation which contains sum of features
    of all supported languages and not C.

    You give it a file in whatever lang, it produces
    a file in 'C' and compiles that.

    No, if you looked at what compilers in gcc are doing you
    will see that there are no intemediate C file. There
    is intermediate assembler, but between source file and
    assembler each compiler work independently

    Still, Bjarne Stroustrup's first implementation of C++
    was a program called cfront, which translated C++ to C.

    Rather ugly C, at that. I had to fix a bug in PCC[*] caused
    by the excessive use of the comma operator in the cfront
    generated C code.

    [*] Exhausted the temp registers generating the expression. Had
    to add sethi-ullman temp register allocation algorithm to PCC
    (generating code for the Motorola 88100) to handle the spills.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Scott Lurndal@3:633/10 to All on Wed Jan 7 15:30:20 2026
    cross@spitfire.i.gajendra.net (Dan Cross) writes:
    In article <fzf7R.805815$i%aa.272881@fx12.iad>,
    Scott Lurndal <slp53@pacbell.net> wrote:
    cross@spitfire.i.gajendra.net (Dan Cross) writes:
    In article <84c7R.819121$PGrb.160843@fx10.iad>,
    Scott Lurndal <slp53@pacbell.net> wrote:
    cross@spitfire.i.gajendra.net (Dan Cross) writes:
    In article <10jjc9s$3uhtk$1@dont-email.me>,
    Chris Ahlstrom <OFeem1987@teleworm.us> wrote:
    Waldek Hebisch wrote this post by blinking in Morse code:

    In alt.folklore.computers c186282 <c186282@nnada.net> wrote:
    <snip>
    Hmm ... look at all the GNU 'compilers' -
    FORTRAN, COBOL, Ada, 'D', M2, Rust,C++,
    G++, even Algol-68. None are 'compilers'
    per-se, but to-'C' TRANSLATORS. So, 'C',
    pretty much All Are One And One Is All.

    No. Compiler as first stage translate given language to a
    common representation. This representatiton is different
    than C. Ada and GNU Pascal have parametrized types, there
    is nothing like that in C.

    <interjection>

    C++ (and some other languages)
    have exceptions, C do not have them.

    What about setjmp()/longjmp() ?

    Not at all the same thing. `setjmp`/`longjmp` are about
    non-local flows of control; exceptions are about non-local
    passing of values.

    However, in many real world situations, [sig]setjump and
    [sig]longjmp can be used to emulate exceptions.

    Yes, I said just that. :-)

    I have a C++ application that models a computer (Burroughs V380
    et alia). The thread that models each processor (cpu) uses
    longjmp whenever a condition is encountered that would have
    been signaled as a fault on the real cpu. The processor code
    doesn't do dynamic memory allocation; and the fault code is
    stored in the processor class before the longjmp call.

    I once tried replacing setjmp/longjmp with C++ exceptions which
    led to a 20% reduction in simulated CPU performance (as measured
    by the time to compile a COBOL program).

    Huh. Interesting. I wonder why...possibly to run a bunch of
    nop destructors?

    A large component of the overhead was the code generated in every
    function to handle unwinding during exception processing.

    That makes sense; thanks.

    When
    using setjmp/longjmp, I compiled with the following options so
    it wouldn't generate the unwind code:

    GXXFLAGS = -mno-red-zone
    GXXFLAGS += -fno-strict-aliasing
    GXXFLAGS += -fno-stack-protector
    GXXFLAGS += -fno-exceptions
    GXXFLAGS += -Wall
    GXXFLAGS += -mtune=native

    Most of those seem irrelevant to generating extra code for stack
    unwinding.

    For that, only -fno-exceptions is necessary. The others were
    left over - I had adapted the make files from a hypervisor project
    (where the first three flags were necessary).

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Peter Flass@3:633/10 to All on Wed Jan 7 12:20:54 2026
    On 1/7/26 08:13, Dan Cross wrote:

    These bizarre definitional assertions about what makes something
    a "compiler" or not seem to be mostly put forth by people who
    have never heard of the concept of "separate compilation" or
    "libraries", let alone touched the innards of a compiler. In
    particular, this idea that everything must be implemented in a
    single program or it's not a "true" compiler is rooted firmly in
    ignorance.


    I think compilers have generated intermediate code since the first
    FORTRAN compiler. The only distinction is one vs. multiple programs. Wth
    a variety of both front- and back-ends GCC has good reason to separate
    them. On the other hand, a compiler that uses another compiled language
    as intermediate code is a strange beast, probably better called a
    translator.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From John Ames@3:633/10 to All on Wed Jan 7 11:40:23 2026
    On Wed, 7 Jan 2026 12:20:54 -0700
    Peter Flass <Peter@Iron-Spring.com> wrote:

    On the other hand, a compiler that uses another compiled language
    as intermediate code is a strange beast, probably better called a translator.

    It's historically a pretty common thing to do when getting a new
    language off the ground, whilst getting the kinks out and before one
    has the time to write a dedicated compiler. In addition to C++, IIRC Objective-C also started out with a translator-compiler.

    It also allows the same language to be deployed in multiple different environments with minimal effort - Nim, f'rexample, compiles to Java-
    script as well as C-family and LLVM intermediate backends, so it can be
    used for web development.


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From The Natural Philosopher@3:633/10 to All on Wed Jan 7 20:09:45 2026
    On 07/01/2026 15:13, Dan Cross wrote:
    These bizarre definitional assertions about what makes something
    a "compiler" or not seem to be mostly put forth by people who
    have never heard of the concept of "separate compilation" or
    "libraries", let alone touched the innards of a compiler. In
    particular, this idea that everything must be implemented in a
    single program or it's not a "true" compiler is rooted firmly in
    ignorance.

    <applause>

    --
    Climate Change: Socialism wearing a lab coat.


    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From Lawrence D?Oliveiro@3:633/10 to All on Wed Jan 7 20:20:16 2026
    On Wed, 7 Jan 2026 12:20:54 -0700, Peter Flass wrote:

    On the other hand, a compiler that uses another compiled language as intermediate code is a strange beast, probably better called a
    translator.

    There is a term for that: ?transpiler?.

    But really, the distinction is arbitrary.

    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)
  • From The Natural Philosopher@3:633/10 to All on Wed Jan 7 10:02:01 2026
    On 06/01/2026 23:10, Waldek Hebisch wrote:
    No, if you looked at what compilers in gcc are doing you
    will see that there are no intemediate C file. There
    is intermediate assembler, but between source file and
    assembler each compiler work independently

    I assumed so, but its nice to have it confirmed...

    AFAIK you can remove C compiler binary and other compilers in
    gcc will still work.

    That is news to me, but it makes sense.

    So, I'll basically
    stick with my 'translator' def. And if 'C' does not
    'natively support' something you can FAKE it with code,
    not really anything you CAN'T do with 'C'.
    A I wrote, you can use "via C" translators, but results are
    not so good as with dedicated compilers, that is why gcc
    contains separate compilers.

    By 'compiler' I mean "source in -> (agitating sounds) ->
    binary executable out.
    By that definition gcc does_not_ contain a C compiler:
    gcc generates assembly and then assembler and linker produce
    final executable. Things are more complicated when you use
    LTO, because "linker" in this case actially is doing large part
    of compiler work and optimized code before producing final
    executable. But non-LTO compilation works via assembly.

    And thank heavens it does. Sometimes examining the assembler is
    necessary, though thankfully fairly rarely these days.



    --
    "Strange as it seems, no amount of learning can cure stupidity, and
    higher education positively fortifies it."

    - Stephen Vizinczey



    --- PyGate Linux v1.5.2
    * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)