back to article First C compiler pops up on Github

If you have a nostalgic turn of mind, there's a new posting over on Github that you'll just love: the earliest known C compiler by the legendary Dennis Ritchie has been published on the repository. It's not new: long before his death in 2011, Ritchie wrote about the effort to find, recover and preserve the early work on C here …

COMMENTS

This topic is closed for new posts.
  1. ThomH

    Allow me

    The compiler can be found at https://github.com/mortdeus/legacy-cc ; the oddest bit to my eyes is the apparent need explicitly to declare storage e.g. as at the bottom of https://github.com/mortdeus/legacy-cc/blob/master/last1120c/c00.c — my experience goes only a little back beyond C89 so it's possible I'm completely misreading what's going on but it looks like the equivalent of an assembler's defb or equivalent, with extern being used in functions to import globals (so maybe scope wasn't well established yet?). Can anyone enlighten me?

    1. Tom 7

      Re: Allow me

      They're initialised variables with file scope - visible to all routines in that file if declared as extern within the function.

      I'm not 100% sure but if they were not declared within the file then the compiler would look in the global space if they were declared extern in a function.

      I don’t know if the rest of the tools are available (see the Unix rebuild) but it would be fun to play with re-building the compiler with the code...

      1. Dan 55 Silver badge

        Re: Allow me

        I think they're a list of variables with global scope; there are two programs (c0?.c and c1?.c) and the lists of variables only appear in c00.c and c10.c. It looks like your global variables went in the first .c/.o file whether you liked it or not (unless it was a style of programming they consciously chose).

        Agree that in functions it looks like variables declared extern were global and variables not declared extern were local.

        1. Phil O'Sophical Silver badge
          Thumb Up

          Re: Allow me

          > It looks like your global variables went in the first .c/.o file whether you liked it or not

          My PDP-11 use was mostly RT-11/RSX-11M, not Unix, and on those OSes you had to manage linker overlays yourself, by defining which bits of the address space were permanently in memory, and which bits could be swapped in and out from disk. If the Unix environment used the same linker model it would make sense to keep all globals together in the permament space (I forget what that was officially called), with the overlay control code, so that as each overlay came and went the variables would always be available.

          Maybe this summer is a good time to see if my PDP-11/83 still boots... :)

          1. Peter Gathercole Silver badge
            Boffin

            Re: Allow me @Phil

            Bell Labs PDP11 UNIX V7 and earlier did not have any support for overlays. I worked with them on RSX-11M, so I understand what you are talking about.

            As far as I am aware, there was some prototype overlay code in the later BSD PDP11 releases, but it would only work on a machine with 22 bit addressing and separate Instruction and Data space (I&D) machines (11/70, 11/44 and later systems). Before this, the standard trick used for large software programs (and I saw this done for the BSD release of Ingres) was to split large programs into several executables, and use some proto-IPC interface to spread the function around. IIRC, Ingres from a BSD 2.3 tape used named pipes. Shared memory and message queues were all in the future, but I believe that the was a primitive semaphore implementation in UNIX V7. Have to look to find out.

            There was some work done by Keele University in the UK to produce an overlay loader for UNIX V7 on PDP11s, which I managed to get working on my Systime 5000E (a strange beast, being a PDP11/34E [normally 18 bit addressing, no I&D], but actually with 22 bit addressing added by Systime). I used it with some success, but I never managed to get VI working on my small machine. It was all good fun, as was debugging the Calgary device buffer modifications to maximise the number of device drivers you could compile into the kernel on this 22bit non-I&D machine. Out of the box, the mods assumed that if you had 22 bit addressing, you had to have separate I&D spaces, because no DEC PDP11 did not.

            Fun times, long gone.

          2. Anonymous Coward
            Anonymous Coward

            Re: Allow me

            I think the following gives an impression of some of the difficulties faced by people at the time:

            "A second, less noticeable, but astonishing peculiarity is the space allocation: temporary storage is allocated that deliberately overwrites the beginning of the program, smashing its initialization code to save space. The two compilers differ in the details in how they cope with this. In the earlier one, the start is found by naming a function; in the later, the start is simply taken to be 0. This indicates that the first compiler was written before we had a machine with memory mapping, so the origin of the program was not at location 0, whereas by the time of the second, we had a PDP-11 that did provide mapping. (See the Unix History paper). In one of the files (prestruct-c/c10.c) the kludgery is especially evident."

    2. Mage Silver badge

      Re: Allow me

      C was then just the idea of a portable macro assembler to make it faster to port UNIX to new machines.

      Hence the awful reliance even today on the #define abhorred by Bjarne Stroustrup.

      1. Charles Manning

        #deine is C-s "Killer feature"

        No matter what BS says, one of the main reasons C continues to thrive - particularly in embedded system - is that it has an embedded macro language (#define et al).

        Like any tool, #defines can be used poorly or well. Slagging off #defines just becuase they are sometimes used poorly is plain stupid.

        Used judiciously,the C macro-preprocessor can simplify code, improve abstraction and do a lot of stuff that is impossible to do in other languages.

  2. Charlie Clark Silver badge

    PDP-8 any good?

    Used to have one in the garage but I think it's now gone to a better (less damp) home.

    1. Mark Honman

      Re: PDP-8 any good?

      Don't think so, I worked with PDP-8 derived HP1000s which had a totally different instruction set/register architecture to the PDP-11. Much as I loved the HP1000s, I have to admit that the PDP-11 had a much more elegant architecture.

      1. Tom 7

        Re: PDP-8 any good?

        The PDP11 was a 16 bit machine - while you could theoretically get this working on the pdp8 (which had 12 bit addressing IIRC) it would require a heavy re-write to do lots of paging - you remember the stuff in Dos/Windows that held up computing for 15 or so years.

    2. PhilBuk
      Headmaster

      Re: PDP-8 any good?

      Much, much too hard. Main problem was no stack on the PDP-8 hardware. Memory addressing was very limited at 128 words in the local page and the zero page. The PDP-11 was like a breath of fresh air with a nice flat address space and excellent addressing modes in the instruction set.

      That said, I'd love a PDP-8/e with 32K of core, and a disc drive. The only one I used had an ASR33 for paper tape and interactive I/O (plus full A/D and D/A stuff).

      Phil.

  3. jake Silver badge

    I'll delve into my archives ...

    I should have similar available to me. I archived the tapes to my "home cloud" in roughly 1990. The data should still be accessible.

    Not certain if I'm allowed to provide Bell/Berkeley Unics & UnixTSS code to the general public, though ... and not sure who to ask for permission, either. It's a can o'worms at this point ...

    1. Anonymous Coward
      Anonymous Coward

      Re: I'll delve into my archives ...

      Someone downvoted your comment!! Why?

      1. jake Silver badge

        @Condiment (was: Re: I'll delve into my archives ... )

        "Someone downvoted your comment!! Why?"

        Because there are a few folks who choose to downvote my comments on sight, regardless of content. The reasoning is in the Why?eye of the beholder.

        ::shrugs:: Methinks most of 'em should look within. Regardless, no skin off my teeth.

        1. Destroy All Monsters Silver badge
          Holmes

          Re: @Condiment (was: I'll delve into my archives ... )

          > Because .. no skin off my teeth.

          This!!

          I once saw a TV film about some german hacker/carder guy in his teens who ordered up an old PDP-11 because of its nostalgia value. He was then rather surprised when a truck showed up at his door...

          Sadly, the guy was later found hanged in a public park. Apparently "suicide" but then he had become involved with turkish mafia.

          1. jake Silver badge

            @DaM (was: Re: @Condiment (was: I'll delve into my archives ... ))

            "> Because .. no skin off my teeth.

            This!!""

            Oh. I see. Provincial insular xenophobia rearing it's ugly head.

            Makes sense. I guess. Because, as everybody knows, the English Language has never changed. Ever. Despite the obvious fact that most of the technical terms used on ElReg were not actually invented within 3000 miles of the British Isles.

            Kinda makes you sound French, Destroy All Monsters. HTH, HAND.

        2. Mostly_Harmless Silver badge
          Headmaster

          Re: mixing your metaphors

          "no skin off my teeth"

          It's either no skin off your nose, or you escape by the skin of your teeth

          1. Anonymous IV

            Re: mixing your metaphors

            So no possibility that the author well knew these two metaphors, but mixed them for comedic effect?

            "Metaphors be with you..."

            1. jake Silver badge

              @Anonymous IV (was: Re: mixing your metaphors)

              Actually, it's a common variation in Blue Collar circles here in Northern California.

              ::shrugs::

          2. Anonymous Coward
            Anonymous Coward

            Re: mixing your metaphors

            I'm pretty sure he knows that. The deliberate mixing of metaphors is a form of meta-metaphor, used to express boredom and disinterest. Sometimes rules are deliberately broken, because fuck rules.

          3. Michael Wojcik Silver badge

            Re: mixing your metaphors

            "no skin off my teeth"

            It's either no skin off your nose, or you escape by the skin of your teeth

            That's a mixing of idioms, or idiom-blending, a species of malapropism. I don't offhand see how to construe this as a mixing of metaphors. (You could claim that in the phrase losing skin is a metaphor for experiencing insult or irritation, but then it's not clear what teeth are the vehicle for. Or that teeth represent feelings, but then skinning simply represents injury, which is in keeping with the original metaphor.)

            I assumed the blended idiom was deliberate; blending idioms is a common trope in contemporary US English, and indeed has been since at least the middle of the twentieth century. (Note its use in Kelly's Pogo, for example, alongside mondegreens and eggcorns and similar wordplay.)

    2. Peter Gathercole Silver badge

      Re: I'll delve into my archives ...

      I would have thought that the Berkeley code would be re-distributable. The Berkeley software license was pretty permissive from the work go.

      I'd love to know about the UnixTSS myself. Not because I have any (I obeyed the rules and always left it behind when I changed jobs), but I would love to see some of it again, especially the STREAMS and RFS code.

      I just wish I had taken copies of the Bell Labs V6 PDP11 distribution, and the BSD 2.1 and 2.3 tapes I worked with in the very early '80s. I know that V7 and a later PDP-11 BSD tape images are available, but by that time, they were already getting difficult to work with on non-separate PDP11 systems.

      1. jake Silver badge

        @Peter Gathercole (was: Re: I'll delve into my archives ...)

        The post-AT&T BSD code is available online. The code I'm talking about came to Berkeley from Bell Labs along with ken ... Was an interesting time.

        I'd have trashed it decades ago, but I haven't changed that particular job yet ;-)

  4. Your Majesty

    Wow that code is ugly.

    1. jake Silver badge

      @Your Majesty

      Not "ugly", Your Majesty. Rather, "primitive". We had to start somewhere.

      The innocence of youth, demonstrated across generations ...

      1. This post has been deleted by its author

      2. Your Majesty

        Re: @Your Majesty

        Yeah, I know. It was more like a comment on how much programming style has evolved since then. Languages like python and stuff are comparatively a breeze to look at.

        I still maintain that it's ugly. Not that it's a bad thing.

  5. LawLessLessLaw
    Boffin

    Or a PDP-11 emulator in javascript

    http://pdp11.aiju.de/

    1. Callam McMillan

      Re: Or a PDP-11 emulator in javascript

      Is it me or is there something ironic about running a C compiler in a javascript emulator of an ancient computer?

      1. Captain TickTock
        Thumb Up

        Ironic? No

        Amusingly convoluted, yes ;-)

        1. Michael H.F. Wilkinson Silver badge
          Happy

          Re: Ironic? No

          Convoluted? Let's compile a ZX-Spectrum emulator using this old C-compiler to use the PDP emulator, running a ZX Spectrum emulator, running a basic interpreter to run a computer game.

          That's convoluted

      2. Anonymous Coward
        Anonymous Coward

        Re: Or a PDP-11 emulator in javascript

        It's just what we need to get that 1970s nuclear reactor control system compiled and running

  6. david 63

    K&R c...

    ...was elegant and clean. I loved it. And the compilation was predictable. I could look at the object code and see exactly where it came from.

    1. Dan 55 Silver badge
      Holmes

      Re: K&R c...

      Don't tell me you prefer that boring predictability over debugging objects with threads.

      1. Yag

        Re: K&R c...

        I prefer that boring predictability, same for the FAA and EASA, and I guess the pilots and passengers would prefer that as well.

    2. Mage Silver badge

      Re: K&R c...

      No, it was not.

      The language was ambiguous. You could write a "bug free" C compiler and it would produce different code.

      Or you could write "correct" C code for an agreed "compatible" compiler and it would not do as expected.

      C++ was supposed to sort some of these issues, but unfortunately the original version was too much backward compatible.

      C was not used for many critical control systems for this reason.

      1. Yag

        Re: K&R c...

        No, no, don't go that far... K&R was indeed quite messy, but ANSI made a (mostly) fine job in 89 and 99, despite a few oddities.

        And ol' C89 is still well loved in aeronautical embedded systems.

        Speaking about ANSI C89 & 99, there is a nice trivia question to ask to computer programmers : "What is the range of a signed char as defined by the standard?" I surprised a lot of people with this one...

  7. Gavin Jamie
    Facepalm

    Stupid Question

    I understand that I may be a bit thick here but it appears to be written in C.

    Now I get that you can write a new C compiler these days, compile it in GCC or whatever and then get it to compile itself.

    But this is the first C compiler. How did they compile it? By hand?

    1. Dan 55 Silver badge

      Re: Stupid Question

      The first proto-versions of the C compiler were compiled from B, the later proto-versions of the C compiler were compiled from the earlier proto-versions of C, and then finally we had a recognisable pre-C89 C language emerging from the swamp... several years later a pre-C89 C compiler compiled GCC. (And finally GCC compiled Emacs.)

      1. jake Silver badge

        Re: Stupid Question

        "And finally GCC compiled Emacs."

        Seems to me that some wag compiled GCC (and libraries), using EMACS as the compiler ... Worked on Motorola & Intel versions of Unix. Useful? Maybe ... as a learning tool.

        I built SmallC using MS-DOS "debug" once, to prove a point. Wasn't fun, and it was a bloody useless hack, but the end result was self compiling, and I learned a lot in the process :-)

    2. This post has been deleted by its author

    3. Destroy All Monsters Silver badge
      Childcatcher

      Re: Stupid Question

      > But this is the first C compiler. How did they compile it? By hand?

      It's magic! People don't have to explain bits!

      K&R are the Siegfried and Roy of....

      Awww.. ok: http://en.wikipedia.org/wiki/Bootstrapping_%28compilers%29

      1. Gerhard den Hollander

        Re: Stupid Question

        back in the early 90s this was more or less how you had to compile gcc on machines that did not come with a compiler

        You downloaded a bit of binary code that would compiler some source code into a proto compiler

        (or if you had access to a Convex, you could use the Convex C compiler to build the proto compiler)

        the proto compiler would then compile a second set of source code into a simple compiler (Im tempted to write a basic compiler, but that would confuse matters).

        the simple compiler would then use the gcc source code to compile gcc

        [but this was not the end of the build cycle, there was more ...]

        the gcc-you-had-just-build would then recompile the gcc source code to create a proper gcc compiler

        Note that the downloading process could involve having to uudecode some uuencoded files to get the proto-compiler, and there may not be a uudecode program for your OS.. Fear not .. as long as your OS had a hex editor, you could usualy find a printed copy of the hex code to do basic uudecode on your system.

        All you had to do is retype the printout exactly as it was in the printout.

        Though I think most of the ftp sites (like the wsmr one) had binaries of uudecode for pretty much any conceivable platform) ...

    4. Lee D Silver badge

      Re: Stupid Question

      Er... yes?

      When you bootstrap GCC onto a new platform how do you think they do it? They write a "proto-C" compiler that's capable of making a C compiler that's capable of creating a C++ compiler that's capable of creating the full GCC suite.

      The first step always has to be done by hand for any "new" platform, because how do you manage memory without knowing the in-depth details of a new architecture and informing the compiler of them? A lot of the time the first step is just assembler and then eventually some sort of "proto-C" compiler of the most basic type that has none of the features of C but allows you to compile some existing base of code that can end up as a C compiler (usually with hints on how to actually DO things like open files, allocate memory, page RAM, etc.). Always has been, always will have to be.

      The thing is, if you write the C compiler in C, then you know it's "complete" (self-compiling) and can be used as the second stage the second you get things working on a new platform. Writing a C compiler entirely in assembler is not an easy task. You'd write some psuedo-cut-down-proto-version-of-C and then use it to compile this code into something closer to a "real" compiler.

      1. oldcoder

        actually you only have to work on the code generator

        Compilers have been ported - gcc ported many times.

        This has isolated the machine dependent part to just the code generator.

        So all you have to do is take an existing code generator (that interprets the intermediate code), and create a new output form.

        You now have a full gcc compiler that runs on the original hardware (not the target). Thus, it is a cross compiler.

        Of course, to finish the port, you must also port the linker (and the runtime libraries) to the target system - though it too has been worked over to isolate the hardware dependent part, so again, the amount of work is reduced.

        Run the C compiler source through the cross compiler and you get a binary that will run on the target system.

      2. Anonymous Coward
        Anonymous Coward

        Re: Stupid Question

        Lee D wrote "When you bootstrap GCC onto a new platform how do you think they do it?" And then described something different.

        The short answer is, you don't bootstrap a compiler on a new platform. You do all the work for the new platform on an old platform, where you already have a working toolchain. In the entire history of the world, we only need to bootstrap a compiler from assembly language once. You can then use that compiler to bootstrap other compilers for new languages, or you can port it to another platform with no bootstrapping at all.

    5. GettinSadda

      Re: Stupid Question

      It's fun and it is related to how you can end up with malicious code in a compiler that does not exist in the source. Once you have a working C compiler (from anywhere) you can then compile your "written in C" C compiler and get a C compiler, now you have a C compiler! If you write a C compiler that injects malicious code into certain object code - such as a C compiler - then you can use that to compile a clean C compiler and distribute the clean sources with malicious object code. Check the sources really carefully and they are safe. Compile them and the object code is nasty!!

    6. Mage Silver badge

      Re: Stupid Question

      Yes, Compiler writers of ANY language love to write the compiler in the same language.

  8. Crisp

    First C Compiler

    Or, the great grandmother of all compiler errors.

    I can use = instead of == in an expression and that's valid?

    1. Lee D Silver badge

      Re: First C Compiler

      Yeah, that does catch people out, but there are a lot worse problems running around in all languages (even in C).

      Programming languages were never there to insulate you from your own mistakes until very recently (and with any half-decent C compiler, that will stand out a mile the second you compile it). They were there to interface with a computer that does EXACTLY what you tell it to, every single time. It just made that interface a little easier for humans to manage, not take away all possible delusions that a human could possibly be under about their own code.

      As someone who uses C99 as the language of my choice, I can tell you that I've made that mistake exactly once personally, spot it in other people's code without the need of a compiler, and haven't used a compiler in the last 15 years that DIDN'T generate warnings about it.

      If humans are stupid enough to ignore compiler warnings, they shouldn't even bother with them. Similarly, if a programmer is stupid enough to think that the computer will catch all their mistakes, they should stop programming.

      As my tag on a C forum says:

      "Compiler warnings are like 'Bridge Out Ahead' warnings."

      You can ignore them if you want. I wouldn't recommend it. I haven't yet found a language where it *isn't* possible to shoot yourself in the foot.

      1. Nick Ryan Silver badge

        Re: First C Compiler

        A while ago I had to take over code from somebody who thought that compiler warnings and hints were just a nuisance and therefore turned them off. It took me weeks to get his damn code clear of access violations, accessing objects after deletion, invalid type casts, memory trampling, out of range errors and doubtless a few other nasties as well. This was before I had to deal with merging the operational code with the user interface, a complete non-understanding of threading, serial bus protocols and error handling and a testing side of the application that used entirely different paths of code to the live side.

        On other projects I have come across a couple of genuine cases where the warnings did need to be turned off for a small section of code, as the compiler was producing an invalid warning and coding around the compiler just to remove a warning is not an entirely sensible technique. This requirement was clearly documented in the code, which at least excuses the practice for the small section of code that it was required for.

    2. Steen Hive
      Stop

      Re: First C Compiler

      "I can use = instead of == in an expression and that's valid?"

      Of course you can - just like a+b and a-b are both "valid". Programming languages don't really have to care about your personal dyslexia.

    3. Yag

      Re: First C Compiler

      Yes, it is valid.

      This section of code :

      if(error_occured = MyFunction())

      {

      // Error management

      }

      else

      {

      // Nominal case

      }

      is equivalent to :

      error_occured = MyFunction();

      if(error_occured == true)

      {

      // Error management

      }

      else

      {

      // Nominal case

      }

      Both are valid, and have the same functional behaviour as long as MyFunction() returns a boolean. (unless I forgot a semicolon somewhere, it's getting late...)

      The first one is often prefered by some people because it looks smarter and may be a bit more optimized depending of your compiler.

      I find the second one better because it's easier to understand, reuse, maintain and debug.

      However, the use of one form or the other is not even a personnal choice, but mostly a matter of the purpose of the code. For large projects spanning years and dozen of people, the second version is strongly recommanded. The first version might even be forbidden by corporate coding standards.

    4. Michael Wojcik Silver badge

      Re: First C Compiler

      the great grandmother of all compiler errors

      There's no "compiler error" there. There's a feature of the language, which the compiler implements correctly. You could argue that the language design is flawed for including such a feature - and many people have, ad nauseum, so please don't bother. But the compiler is doing precisely what it's supposed to be doing.

  9. horse of a different color
    Mushroom

    No link to github repo?

    Seems like a massive omission in the article.

    1. Destroy All Monsters Silver badge
      Thumb Up

      Re: No link to github repo?

      Correct. First post remedies this.

  10. Rusty 1
    Go

    Engraving

    This code should be engraved on a plaque on the next interstellar probe that mankind sends off to explore the universe. Any aliens seeing it will discover that we were not afraid to wrangle pointers and all that that entails so far back in our history. We will be recognised as the gnarly dudes we surely are.

    1. Phil O'Sophical Silver badge
      Alien

      Re: Engraving

      > We will be recognised as the gnarly dudes we surely are.

      After they've stopped killing themselves laughing at the thought that we didn't then yet know that we were about to inflict object-oriented programming in Java on ourselves...

      1. Destroy All Monsters Silver badge

        Re: Engraving

        > object-oriented programming in Java

        It is sufficiently nice and complaining about it is for pseudo-toughs. Like retarded colonels that need a good fragging phoning in will-to-power-bring-me-my-medal orders to the front lines.

        Really, it frees you up for the NEXT gnarly problems, like programs that navigate in the real world, or actually delivering stuff through the bureaucratic maze of a company.

        1. Nigel 11
          Mushroom

          Re: Engraving

          I'm reminded of the USA experts laughing at the USSR's avionics in a defector's jet, that still used thermionic valves (tiny peanut-sized ones).

          Until someone pointed out that valves are EMP-proof, and transistors aren't.

      2. Rusty 1
        Childcatcher

        Re: Engraving

        What is this "object oriented" coffee of which you speak?

        Good programming certainly does involves coffee, with a few side orders of pizza (or curry, or horse, according to taste). And from time to time, also pointers, heap allocations, structs, and other maniacal constructs. But I am at a complete loss as to where the orientation of objects comes into this. Is this "Java" business all about homogenous objects? Or is there general acceptance of heterogenous objects? What about happy objects? Or those objects that are really unusual, or a bit queer?

        I'm confused and I think I shall go back to assembler in a dark room.

    2. Anonymous Coward
      Anonymous Coward

      Re: Engraving

      Bliss?

      1. PhilBuk
        Headmaster

        Re: Engraving

        @AC 13:12

        There was a BLISS-11 but it was only really used a lot inside DEC.

        Phil.

        1. Anonymous Coward
          Anonymous Coward

          Re: Engraving

          Wasn't there a Bliss32 for VAXen as well?

          1. Anonymous Coward
            Anonymous Coward

            Bliss[32] (Was: Re: Engraving)

            There was indeed Bliss32 for VAXen but my point was really in reply to the poster who waxed about pointers. If my dim memory serves me correctly, everything in Bliss is a pointer.

    3. Yag
      Joke

      Re: Engraving

      Is this a really good idea to give them the key to hack our computers? A reversed "Independance day" gambit is not that smart...

      Wait...

      The original "Independance day" gambit was even dumber.

  11. Michael H.F. Wilkinson Silver badge
    Thumb Up

    Neat!!

    I will post a link for our students in the history of computing section of our Orientation in Computer Science course.

  12. Dave 32
    Coat

    PDP-11

    Drat, I gave away my PDP-11/03 decade or two ago. Of course, it was only a /03 model, designed for industrial process control, and, as such, only had 4K (or so) of RAM. Plus, it didn't have a fancy blinking-light console, instead being relegated to a dual gray box. But, it was a cute machine. About killed myself lugging those Rx-05 drives down to the basement.

    Hmm, isn't there a PDP-11 simulator available out there somewhere? And, I have a feeling that the simulator probably runs faster than the real PDP-11.

    Dave

    P.S. I'll get my coat; It's the one with the paper tape in the pocket.

  13. Dave 32
    Coat

    Compilers in their own language

    I have worked on a compiler that was written in its own language (one of the infamous PL/x compilers, see wikipedia). Having a compiler compile itself was an excellent test of the compiler. Can't say much more about it, though.

    Dave

    P.S. I'll get my coat. It's the one with the punched cards in the pocket.

  14. 6 inches long, handle.

    Nicey!

    Now, where did I put that Linux Kernel v0.01 archive?

This topic is closed for new posts.

Other stories you might like