[HN Gopher] Some of the error messages produced by Apple's MPW C...
       ___________________________________________________________________
        
       Some of the error messages produced by Apple's MPW C compiler
       (2006)
        
       Author : Asdrubalini
       Score  : 200 points
       Date   : 2023-08-27 15:04 UTC (7 hours ago)
        
 (HTM) web link (www.cs.cmu.edu)
 (TXT) w3m dump (www.cs.cmu.edu)
        
       | nickt wrote:
       | That whole subdirectory is full of some old school internet
       | humour.
       | 
       | https://www.cs.cmu.edu/~jasonh/personal/humor/
        
       | tom_ wrote:
       | > "...And the lord said, 'lo, there shall only be case or default
       | labels inside a switch statement'"
       | 
       | Did it seriously not let you have a goto label inside a switch?!
       | This seems like an odd restriction, as all 3 are the same kind of
       | thing.
        
       | gjvc wrote:
       | I had NFI what MPW was until I read this:
       | https://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Works...
        
       | rickreynoldssf wrote:
       | I was programming on MacOS (the original) since it was possible.
       | I remember many of these error messages! Especially "Too many
       | errors on one line (make fewer)".
       | 
       | ...also remember 45 minute builds when a header file changed.
        
         | w0mbat wrote:
         | In those days I wrote exclusively system extensions, plug-ins
         | and XCMDs, using a mix of 68k, C and Pascal. Each project was
         | quite small, so compile time was never a problem and MPW was a
         | paradise. My largest XCMD actually had bits in all 3 languages
         | which MPW happily linked together, and some projects had
         | various little blocks of code to stick in the same file, all of
         | which could be automated easily.
         | 
         | I remember these error messages coming up and laughing out loud
         | when I saw the rare ones. Nice work, whoever did it!
        
       | 13of40 wrote:
       | "Call me paranoid but finding '/*' inside this comment makes me
       | suspicious"
       | 
       | That, Sir, is none of your business.
        
         | Wowfunhappy wrote:
         | ...I kind of wish compilers supported nested block comments. So
         | if there's a /* inside of a /*, it would take two */'s to end
         | it.
         | 
         | Idk, maybe that would be a terrible idea in practice. But there
         | are lots of instances where it would have saved me time.
        
           | pjmlp wrote:
           | Already an option on Borland compilers for MS-DOS.
        
           | arcanemachiner wrote:
           | How about explicit depth levels, specified by asterisk count?
           | 
           | e.g. '/*' and '*/' would match each other, '/**' and '**/'
           | would match, and so on.
           | 
           | That way, you would have full control of the depth of the
           | comments, removing other comments wouldn't break the inner
           | comments, etc.
           | 
           | I do run into the same issue you're describing, so I think
           | there's value in the idea.
        
             | [deleted]
        
           | duskwuff wrote:
           | You're probably looking for "#if 0" / "#endif".
        
             | TillE wrote:
             | Yeah it took me a while to adopt this common practice when
             | I need to "comment out" a large block of code. Just use the
             | preprocessor, it's much simpler.
        
           | legobmw99 wrote:
           | I believe OCaml does this
        
           | kevincox wrote:
           | the D Language supports /+ and +/ as a variant of /* which
           | supports nesting. So you can pick which you need for a given
           | comment.
        
           | RGBCube wrote:
           | FYI, Rust and many other modern languages do this.
        
       | AnonC wrote:
       | > "Symbol table full - fatal heap error; please go buy a RAM
       | upgrade from your local Apple dealer"
       | 
       | Ah, the old times when one could purchase a RAM upgrade or
       | upgrade RAM after buying a computer. Now this would be:
       | 
       |  _" Symbol table full - fatal heap error; please go buy a new Mac
       | with more RAM"_
        
         | catiopatio wrote:
         | I understand the arguments for unified RAM on a SoC, but it's
         | still a shame; even the new Mac Pro doesn't have RAM slots.
        
           | ShadowBanThis01 wrote:
           | The soldered-in SSD is worse, though. The SSD WILL wear out,
           | so then you get to throw away your Mac?
        
             | xp84 wrote:
             | Just like AirPods and AirPods Pro when their 7 cents worth
             | of batteries die! A perfect system.
        
               | layer8 wrote:
               | That will have to change in 2027 with he new EU battery
               | regulation.
        
             | LeoPanthera wrote:
             | > The SSD WILL wear out
             | 
             | This is by no means certain, certainly not enough to SHOUT
             | about.
             | 
             | Modern SSDs have lifetimes that make them impractical to
             | literally wear out, short of some kind of fault.
        
             | tadfisher wrote:
             | That's not even that bad if you have a hot air gun and a
             | reball kit. What's worse is the flash chips having some
             | kind of cryptographic identifier that locks them to the
             | machine, so you couldn't replace the flash if you wanted
             | to.
        
             | semi-extrinsic wrote:
             | But how quickly though? Do we know the write endurance of
             | the Mac SSDs?
             | 
             | I'm not a Mac fanboy by any means. But SSD write endurance
             | has become ridiculous. Even on a cheap-ish read-intensive
             | server-class 1 TB NVMe SSD (~$300) you get around 1
             | petabyte total write endurance, meaning you can write
             | essentially the entire contents of the disk _every day for
             | 5 years_ and still be within the warranty. That is orders
             | of magnitude beyond what any consumer is going to subject
             | their disk to.
             | 
             | There is always a possibility that a part of the computer
             | will fail. But if the SSD is less likely to fail than any
             | other random IC on the motherboard, having it soldered on
             | doesn't factor significantly into the failure statistics.
             | 
             | Of course it's super annoying that you can't upgrade the
             | disk size, but that's another point.
        
               | tom_ wrote:
               | I've got two Macbook Pros - a 2014 15" (500 GB SSD) and a
               | 2015 13" (1 TB SSD). Both are still going. I can't
               | imagine newer Macs are worse. I'd be more concerned about
               | replacing the battery!
        
               | stephen_g wrote:
               | My MacBook Pro (2015, 15 inch) started having some SSD
               | issues earlier this year after a bit more than seven
               | years of heavy use, but it does seem to be partially
               | mechanical because it would mostly happen after it had
               | been in my bag.
               | 
               | Since I bought an M2 Pro to replace it, it hasn't had the
               | issue I think because I'm just leaving it at home and not
               | flexing or squeezing it much. Perhaps the issue could be
               | fixed permanently and properly with a bit of hot air to
               | re-flow the solder balls.
        
           | jonhohle wrote:
           | The Mac Pro missing RAM slots was disappointing to me.
           | Performance uber alles and all that, but upgradability has
           | benefits as well. Until Apple started soldering RAM, I always
           | did aftermarket RAM upgrades, and even recently doubled the
           | RAM on a 12 year-old file server.
        
           | layer8 wrote:
           | They could still allow adding more RAM that would just be
           | slightly slower.
        
         | LoganDark wrote:
         | This is even more true today, because Apple Silicon Macs are
         | able to store twice the amount of information in the same
         | amount of memory, meaning that a paltry 8GB configuration can
         | store 16GB of FizzBuzz boilerplate, 4 Google Chrome tabs, or
         | 20% of the average node_modules.
        
           | smoldesu wrote:
           | I don't think that feature is exclusive to Apple Silicon, or
           | Macs.
        
             | LoganDark wrote:
             | It's a joke (clearly not a very good one) based on my
             | experience that when Apple first offered only 8GB of RAM on
             | the first ASi Macs, everyone's response was that Apple
             | Silicon can simply store more data in the same amount of
             | memory or something. Back when I used macOS on Intel, 16GB
             | was relatively comfortable, but I can't imagine that
             | switching to ARM would magically halve memory requirements.
             | 
             | (Yes, the Intel Mac had memory compression as well. And my
             | Windows 11 PC also has memory compression, but only if you
             | also enable swap because Microsoft says "fuck you".)
        
       | II2II wrote:
       | Tangential to the content of the page: I really enjoyed how many
       | MPW utilities generated output, including error messages, in the
       | form of commands. Your terminal was an editor buffer, so you
       | could cursor up (or click) on the appropriate line then press
       | something like cmd-enter to pull up the file in question (among
       | other things).
        
         | ilaksh wrote:
         | Hm. Sounds like Plan 9.
        
         | cschmidt wrote:
         | I think it was just the enter key to execute the selected text.
        
           | II2II wrote:
           | You're probably correct. I forgot that Apple labelled the
           | enter key as return on the alphanumeric part of the keyboard
           | and as enter on the numeric keypad. I recall some software
           | (possibly MPW) treating cmd-return as enter. Or something to
           | that effect. It has been about 20 years!
        
             | cschmidt wrote:
             | Yes I think you're right. I was talking about the
             | standalone enter key, or you could also do some modifier
             | and return. It has been a long time
        
       | Veserv wrote:
       | Previous discussion:
       | https://news.ycombinator.com/item?id=30238928
       | 
       | To inline my comment in the previous thread:
       | 
       | Just for some context, the MPW C compiler that produced those
       | messages was actually not developed internally at Apple, but was
       | rather done by Green Hills Software [1] under contract as
       | mentioned on the wikipedia page [2] and its source [3] which is
       | funnily enough about this exact same topic.
       | 
       | [1] https://en.m.wikipedia.org/wiki/Green_Hills_Software
       | 
       | [2]
       | https://en.m.wikipedia.org/wiki/Macintosh_Programmer%27s_Wor...
       | 
       | [3]
       | https://web.archive.org/web/20140528005901/http://lists.appl...
        
         | [deleted]
        
       | khiqxj wrote:
       | what copyright issue? why would you even think that's a thing.
       | your culture is shit.
        
         | smoldesu wrote:
         | Even in 2006, people knew provoking Apple's ire was a dangerous
         | game.
        
       | mkovach wrote:
       | "a typedef name was a complete surprise to me at this point in
       | your program"
       | 
       | Ah, the joys of fun compiler messages. I miss those days. I
       | remember getting one from a vendor compiler that was:
       | "No! But they'll only let me warn you. Danger Will Robinson!
       | Danger!"
       | 
       | and:                 "Really! If you are fussing around with void
       | *, just go home or at least back to your editor!"
       | 
       | I think the IT manager kept that as a vendor just because of the
       | message (the SDK was meh, but also fun!).
        
         | jimmaswell wrote:
         | Not much of a C programmer, what's the context around void*
         | being a big deal?
        
           | zer8k wrote:
           | Void pointers refer to anything and nothing. They are
           | everything and all encompassing. What is pointed to by the
           | void pointer could be what you want or it could be another
           | universe.
           | 
           | Dereferencing a void pointer has no meaning. The compiler can
           | do anything it wants because it doesn't know how to interpret
           | the memory. It could give you the correct thing, it could
           | warp a civilization in from a distant planet, or it could
           | open a world-ending black hole. All are equally probable.
        
             | Quekid5 wrote:
             | It really should be specified to specifically summon nasal
             | demons, IMO.
        
             | tyg13 wrote:
             | You're correct, although I'm fairly sure dereferencing a
             | `void*` is a compile error on all but the most ancient and
             | non-conforming compilers. I'm not even sure what it _could_
             | compile to, given that `void` has no size.
        
               | zer8k wrote:
               | Yes most modern C compilers will stop you from
               | dereferencing a void pointer. Still, I couldn't help but
               | bring up what _can_ happen. Since I didn 't witness it I
               | can only assume 3 mile island was someone dereferencing a
               | void pointer and it was easier to explain with a nuclear
               | meltdown.
        
               | tedunangst wrote:
               | void * was introduced after char * had been the pre-
               | standard way of addressing any memory. Compilers of the
               | era would let you use void * like char *, because it made
               | it easier to change char * into void *.
        
       | zabzonk wrote:
       | My favourite syntax error message produced by the Glockenspiel
       | C++ compiler (a cfront derived piece of junk that I used in a
       | training company in the early 90s) was simply "core dumped". This
       | was slightly tricky to explain to people already struggling with
       | C++, and who had paid us money for the course.
        
         | unnah wrote:
         | The users could simply run a debugger to get a backtrace from
         | the core file... then with some experience, they would learn to
         | associate different hex addresses with different kinds of
         | errors. No harm, no foul.
        
           | zabzonk wrote:
           | I take it that you have never worked for a training company
           | :-)
        
       | mistrial9 wrote:
       | there were also MetroWerks bindings for MPW, long ago, but Apple
       | killed it with fire
        
       | OnlyMortal wrote:
       | I really loved MPW Shell.
       | 
       | Been able to have a worksheet with random shell commands I'd
       | built up, triple-clicking a line and hitting enter to run the
       | selection.
       | 
       | It was quite a thing.
        
       | skipkey wrote:
       | The old Clipper 5 compiler had some fun error messages. The two
       | that I remember running into were "Ford Maverick Error", and my
       | personal favorite, "Carnage! Module name crushed in compilation
       | disaster!". I ran across both abusing its preprocessor.
        
         | andrewf wrote:
         | I learned to program on various dBase languages. That Clipper 5
         | preprocessor was quite the thing! It reminds me of
         | https://research.swtch.com/shmacro but it met a real need,
         | lowering a COBOL-like syntax to a C/Pascal-like one.
         | 
         | (dBase code looks like
         | https://github.com/harbour/core/blob/master/tests/ntx.prg , and
         | https://github.com/harbour/core/blob/master/include/std.ch is
         | an open-source reimplementation of Clipper's preprocessor
         | definitions).
        
       | vincent-manis wrote:
       | My favorite error message was produced by the Univac Fortran V
       | compiler, circa 1970: "Warning: floating point equality tests are
       | nugatory." I pride myself on my vocabulary, but I had to use the
       | dictionary.
        
       | d3psi wrote:
       | alright, these are hilarious. i miss this playful attitude in
       | modern-day software engineering, we need more of it.
       | 
       | also, the note on the copyright is hilarious.
        
       | bemusedthrow75 wrote:
       | _" a typedef name was a complete surprise to me at this point in
       | your program"_
       | 
       | I've seen this list so many times and this one makes me laugh out
       | loud every single time.
        
       | jonhohle wrote:
       | I miss this kind of playfulness in computing.
       | 
       | When I was at Amazon my manager told me that several years
       | earlier he was responsible for updating the 404 page so he
       | scanned a picture of a cat his daughter drew and made that the
       | body of the page. In 2009 when I started, that was still the
       | image, but at some point someone must have noticed and replaced
       | it with a stock photo of a dog. The asset was still called kayli-
       | kitty.jpg, though. It's since been changed again to rotating
       | pictures and references to the original are gone.
        
         | varun_ch wrote:
         | This is really cool! The filename on certain Amazon 404 pages
         | (eg. https://www.amazon.co.jp/404) is still kailey-kitty.gif
         | (but the image has been replaced with a standard icon).
         | 
         | I also found this comment from him on a blog:
         | https://www.davebellous.com/2006/09/25/what-the/#comment-290...
        
         | layer8 wrote:
         | Maybe the daughter sued for copyright infringement when she
         | turned 18. ;)
         | 
         | Serious question: Is this possible when a guardian gave consent
         | earlier?
        
           | jonhohle wrote:
           | I know you're joking, but she wasn't 18 yet before they
           | changed the picture.
           | 
           | AFAICT, kids own the copyright to things they create[0], but
           | guardians are responsible and can use it on the child's
           | interest. IANAL, consult an attorney, etc., etc.
           | 
           | 0 - https://www.copyright.gov/help/faq/faq-
           | who.html#:~:text=Can%....
        
             | [deleted]
        
         | bazbamduck wrote:
         | Go load www.amazon.com and check the source right after </html>
         | :)
        
           | jonhohle wrote:
           | That's wonderful to see. Also interesting to see the site
           | performance comments around different components.
           | 
           | Another anecdote: somewhere in that time period we (Prime)
           | were using comments for various metadata and pre-release and
           | post-deployment checks would verify the comments were in
           | place. The team responsible for the edge proxies decided they
           | were going to rewrite all the HTML going out on the fly to
           | remove extraneous comments and whitespace in an effort to
           | reduce page-size.
           | 
           | In the middle of testing a release all of the tests related
           | to a particular feature started failing and (I believe)
           | different devs were getting different HTML on their systems
           | (the feature wasn't rolled out to every session). Our QA team
           | was extremely pedantic in the best way possible and wouldn't
           | allow the release to continue until testing could complete,
           | so we had to track down the responsible parties and get them
           | to dial down their transformation. They eventually tried
           | again without stripping comments, but I can't imagine much
           | was saved after compression without much of anything removed
           | (they might have been rewriting other tags as well).
        
         | hgs3 wrote:
         | > The compiler is 324k in size
         | 
         | Playfulness isn't the only thing we've lost. Software bloat has
         | reached comedic levels.
        
           | bigbillheck wrote:
           | The clang executable on my machine is 18kb.
        
             | AnimalMuppet wrote:
             | I bet it forks some other executables, though...
        
             | catiopatio wrote:
             | On my system, where clang is statically linked, the binary
             | is 48mb.
             | 
             | As in megabytes.
             | 
             | Nearly all of clang and LLVM are linked as libraries.
        
           | Aurornis wrote:
           | There's nothing stopping anyone from going back and using all
           | of that old software exclusively.
           | 
           | For some reason everyone prefers the newer software, though.
           | Perhaps there's more to it than binary size?
        
             | Pannoniae wrote:
             | I would love to, if things actually worked on it! Since
             | everything is HTTPS now and you need TLS1.3 for many
             | things, running very retro things for daily usage is next
             | to impossible.
        
             | TillE wrote:
             | Binary size on a desktop OS is almost totally irrelevant in
             | practice. Memory size matters a little more, but your OS
             | will generally do a good job of loading what it needs (ie,
             | huge binaries can still start quickly) and paging out what
             | it doesn't.
             | 
             | People have aesthetic complaints about "bloat", but again
             | this is orthogonal to the actual speed of anything.
        
               | Max-q wrote:
               | Well, the bloat has made many programs slower than they
               | could be. Software is eating up the advances we get in
               | hardware. Modern Word 365 is not any faster than Word 95
               | on a Pentium 66 in normal use. That is a ~100MHz computer
               | with maybe 16MB RAM, and a rotating hard drive.
               | 
               | Bloat making software bigger will in many cases also make
               | it slower.
               | 
               | Also, the UX on Windows 95 was consistent and easy to
               | learn. Now, much software fail on stuff like disabling a
               | button when you have clicked it and the computer is
               | working.
               | 
               | MacOS is on a steady curve to the bottom. It is not
               | alone.
               | 
               | The software bloat and decreasing quality is a serious
               | issue.
        
             | animatethrow wrote:
             | > There's nothing stopping anyone from going back and using
             | all of that old software exclusively.
             | 
             | Monthly bills are stopping me. Can I use Apple's MPW C
             | compiler to build for iOS?
        
           | retrac wrote:
           | Your optimizing compiler today will actually optimize. LLVM
           | was recently ported to the 6502 (yes, really) [1]. An
           | example:                   void outchar (char c) {
           | c = c | 0x80;             asm volatile ("jsr $fbfd\n" : : "a"
           | (c): "a");         }              void outstr (char* str) {
           | while (*str != 0)                  outchar(*str++);         }
           | void main () {             outstr("Hello, world!\n");
           | }
           | 
           | That is compiled to this:                   lda #$c8       ;
           | ASCII H | 0x80         jsr $fbfd         lda #$e5       ;
           | ASCII e | 0x80         jsr $fbfd         ...
           | 
           | Unrolled loop, over a function applied to a constant string
           | at compile time. An assembler programmer couldn't do better.
           | It is the fastest way to output that string so long as you
           | rely on the ROM routine at $fbfd. (Apple II, for the
           | curious.) Such an optimizing transform is unremarkable today.
           | But stuff like that was cutting edge in the 90s.
           | 
           | [1] https://llvm-mos.org/wiki/Welcome
        
             | pjmlp wrote:
             | Not really that wonder, other that 6502 sucks for C.
             | 
             | "An overview of the PL.8 compiler", circa 1976
             | 
             | https://dl.acm.org/doi/abs/10.1145/989393.989400
        
             | MatthiasPortzel wrote:
             | I understand your point, but LLVM-MOS is a bad example. You
             | gain LLVM's language optimizations, as you point out. But
             | LLVM's assumed architecture is so different from the 6502
             | that lowering the code to assembly introduces many
             | superfluous instructions. (As an example, the 6502 has one
             | general purpose register, but LLVM works best with many
             | registers. So LLVM-MOS creates 16 virtual registers in the
             | first page of memory and then generates instructions to
             | move them into the main register as they are used.) It's of
             | course possible to further optimize this, but the LLVM-MOS
             | project isn't that mature yet. So assembly programmers can
             | still very much do better.
        
               | chongli wrote:
               | _So LLVM-MOS creates 16 virtual registers in the first
               | page of memory and then generates instructions to move
               | them into the main register as they are used._
               | 
               | Isn't this actually good practice on the 6502? The
               | processor treats the first page of memory (called the
               | zero page) differently. Instructions that address the
               | zero page are shorter because they leave out the most
               | significant byte. Addressing any other page requires that
               | extra byte for the MSB.
               | 
               | Furthermore, instructions which accept a zero page
               | address typically complete one cycle faster than absolute
               | addressed instructions, and typically only one cycle
               | slower than immediate addressed instructions.
               | 
               | So if you can keep as much of your memory accesses within
               | the zero page as possible, your code will run a lot
               | faster. It would seem to me that treating the zero page
               | as a table of virtual registers is a great way to do that
               | because you can bring all your register colouring
               | machinery to bear on the problem.
        
               | tredre3 wrote:
               | I understand your point but the beginning of the zero
               | page is almost always used as virtual registers by
               | regular hand-rolled 6502 applications. So it's pretty
               | normal for LLVM to do the same, it's not an example of
               | LLVM doing something weird.
        
             | Someone wrote:
             | Does it end that code with a                 jmp $fbfd
             | ?
        
               | mananaysiempre wrote:
               | Doubtful, given the JSR comes from an inline asm. You'd
               | need to code the call in C (with an appropriate calling
               | convention, which I don't know if this port defines) for
               | Clang to be able to optimize a tail-position call into a
               | jump--which it is capable of doing, generally speaking.
        
               | retrac wrote:
               | No. The compiler knows that trick for its own code :) not
               | sure about introspecting into the assembly (I think LLVM
               | doesn't do that). But either way, standard C returns int
               | of 0 from main on success. So: ldx #0 txa rts
        
               | Someone wrote:
               | Nitpick: this isn't standard C (it uses _void main_ , not
               | _int main_ )
               | 
               | Nitpick 2: why _ldx #0 txa rts_? I would think _lda #0
               | rts_ is shorter and faster
               | 
               | Back to my question: if it can't, the claim _"an
               | assembler programmer couldn 't do better"_ isn't correct.
               | 
               | I think an assembler programmer for the 6502 would
               | consider doing a _jmp_ at the end, even if it makes the
               | function return an incorrect, possibly even unpredictable
               | value. If that value isn't used, why spend time setting
               | it?
               | 
               | A assembly programmer also would:
               | 
               | - check whether the routine at _0xFBFD_ accidentally
               | guarantees to set _A_ to zero, or returns with the _X_ or
               | _Y_ register set to zero, and shamelessly exploit that.
               | 
               | - check whether the code at _0xFBFD_ preserves the value
               | of the accumulator (unlikely, I would guess, but if it
               | does, the two consecutive 'l's need only one LDA#)
               | 
               | - consider replacing the code to output the space inside
               | "hello world" by a call to _FBF4_ (move cursor right).
               | That has the same effect if there already is a space
               | there when the code is called.
               | 
               | - call _0xFBF0_ to output a printable character, not
               | _0xFBFD_ (reading
               | https://6502disassembly.com/a2-rom/APPLE2.ROM.html, I
               | notice that is faster for letters and punctuation)
               | 
               | On a 6502, that's how you get your code fit into memory
               | and make it faster. To write good code for a 6502, you
               | can't be concerned about calling conventions or having
               | individually testable functions.
        
               | tom_ wrote:
               | I bet that sizeof(int)==2 - which immediately tells you
               | everything you need to know - and the return value from a
               | function has 8 bits in X and 8 bits in A. So ldx#0:txa is
               | how you load a return value of (int)0.
               | 
               | Regarding this specific unrolled loop, I would expect a
               | 6502 programmer would just write the obvious loop,
               | because they're clearly optimizing for space rather than
               | speed when calling the ROM routine. They'll be content
               | with the string printing taking about as long as it
               | takes, which clearly isn't too long, as they wouldn't
               | have done it that way otherwise. And the loop "overhead"
               | won't be meaningful. (Looks like it'll be something like
               | 7 cycles per character? I'm not familiar with the Apple
               | II. Looks like $fbfd preserves X though.)
        
               | retrac wrote:
               | Yes, I compiled with -O3 for maximum speed. That would be
               | an unusual flag choice in most cases.
               | 
               | I just wanted to use 6502 code (so many seem to be able
               | to read it!) with C side by side. x86 would have worked
               | as well. Where the fastest answer would also be the same
               | construct, assuming the dependency on an external
               | routine.
        
               | Max-q wrote:
               | We did a lot of loop unrolling and self modifying code
               | back in the day, when making demos for the C64. The
               | branch is really expensive. For example, clearing the
               | screen you might use 16 STA adr,x and then add 16 to X
               | before you branch to the loop.
        
               | messe wrote:
               | > Nitpick: this isn't standard C (it uses void main, not
               | int main)
               | 
               | You know what, I'm gonna nitpick that nitpick: void
               | main() is fully allowed on a freestanding target, which
               | is still standard C.
               | 
               | Given the C standards historically generous
               | interpretation of undefined behaviour and other
               | miscellany, I think it's a reasonable interpretation of
               | the standard to pretend that a target that allows
               | something other than int main(...) is freestanding rather
               | than hosted, and therefore fully conforming.
        
         | khiqxj wrote:
         | > I miss this kind of playfulness in computing.
         | 
         | it's still right here every day when Firefox says "gah this tab
         | crashed".
        
         | CalRobert wrote:
         | Where does this playfulness persist? I miss it too.
        
           | jjoonathan wrote:
           | The punishments continued until the playfulness went away.
        
           | beeburrt wrote:
           | HTTP status code 418?
        
             | ktm5j wrote:
             | Haha thanks for this. There are some funny gnu error codes:
             | https://www.gnu.org/software/libc/manual/html_node/Error-
             | Cod...
             | 
             | Including EDIED and EIEIO
        
         | omoikane wrote:
         | > picture of a cat
         | 
         | I couldn't find this elusive picture of a cat on archive.org,
         | but I found this dog instead:
         | 
         | https://web.archive.org/web/20030113144310/https://www.amazo...
         | 
         | June 2016 appears to be when Amazon adopted the current error
         | pages with the large dog images.
         | 
         | https://web.archive.org/web/20160612232820/http://www.amazon...
        
           | mastry wrote:
           | Maybe this is it?
           | 
           | http://telcontar.net/Screenshots/worldwidewonk/Amazon-404-eh.
           | ..
        
             | ezequiel-garzon wrote:
             | Thanks to both of you for this heartwarming bit. How do you
             | go about finding something like that?
        
             | hyperdimension wrote:
             | Wow, now that is a screenshot full of nostalgia... Nice
             | find.
        
             | jonhohle wrote:
             | That's the one!
        
           | jonhohle wrote:
           | I misremembered the dog, it looks like they first replaced it
           | with a ? icon. A later snapshot has the image name[0] but not
           | the image[1].
           | 
           | mastry found a screenshot of the image in his sibling reply.
           | 
           | 0 - http://g-ecx.images-
           | amazon.com/images/G/01/x-locale/common/k...
           | 
           | 1 - https://web.archive.org/web/20071030172825/http://www.ama
           | zon...
        
       ___________________________________________________________________
       (page generated 2023-08-27 23:00 UTC)