10 ms·
Some of the error messages produced by Apple's MPW C compiler (2006)
- gjvc 3y agoI had NFI what MPW was until I read this: https://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop https://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Works...
- nickt 3y agoThat whole subdirectory is full of some old school internet humour. https://www.cs.cmu.edu/~jasonh/personal/humor/ https://www.cs.cmu.edu/~jasonh/personal/humor/
- jonhohle 3y agoI 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.
- layer8 3y agoMaybe the daughter sued for copyright infringement when she turned 18. ;) Serious question: Is this possible when a guardian gave consent earlier?
- jonhohle 3y agoI 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%20a%20minor%20claim%20copyright,state%20laws%2C%20consult%20an%20attorney https://www.copyright.gov/help/faq/faq-who.html#:~:text=Can%....
- deleted 3y ago[deleted]
- hgs3 3y ago> The compiler is 324k in size Playfulness isn't the only thing we've lost. Software bloat has reached comedic levels.
- bigbillheck 3y agoThe clang executable on my machine is 18kb.
- AnimalMuppet 3y agoI bet it forks some other executables, though...
- catiopatio 3y agoOn my system, where clang is statically linked, the binary is 48mb. As in megabytes. Nearly all of clang and LLVM are linked as libraries.
- retrac 3y agoYour 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 https://llvm-mos.org/wiki/Welcome
- pjmlp 3y agoNot 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 https://dl.acm.org/doi/abs/10.1145/989393.989400
- khiqxj 3y ago> I miss this kind of playfulness in computing. it's still right here every day when Firefox says "gah this tab crashed".
- omoikane 3y ago> 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.amazon.com/404 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.com/404 https://web.archive.org/web/20160612232820/http://www.amazon...
- mastry 3y agoMaybe this is it? http://telcontar.net/Screenshots/worldwidewonk/Amazon-404-ehwhat.png http://telcontar.net/Screenshots/worldwidewonk/Amazon-404-eh...
- jonhohle 3y agoThat’s the one!
- hyperdimension 3y agoWow, now that is a screenshot full of nostalgia... Nice find.
- ezequiel-garzon 3y agoThanks to both of you for this heartwarming bit. How do you go about finding something like that?
- mastry 3y agoQuite manually, actually. I ran an image search on DDG for "Amazon 404 cat" and looked through the results for a kid's drawing.
- DaanDL 3y agoI really like the look of that browser, which is it? Netscape?
- jonhohle 3y ago
- bazbamduck 3y agoGo load www.amazon.com and check the source right after </html> :)
- jonhohle 3y agoThat'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).
- CalRobert 3y agoWhere does this playfulness persist? I miss it too.
- jjoonathan 3y agoThe punishments continued until the playfulness went away.
- beeburrt 3y agoHTTP status code 418?
- ktm5j 3y agoHaha thanks for this. There are some funny gnu error codes: https://www.gnu.org/software/libc/manual/html_node/Error-Codes.html https://www.gnu.org/software/libc/manual/html_node/Error-Cod... Including EDIED and EIEIO
- TheBrokenRail 3y agoIIRC people actually tried to get rid of that. Thankfully it failed.
- notbeuller 3y agoOn the other hand, I despise the mock playfulness exhibited by, eg, Slack. It’s such a frustrating environment for me - I feel like it’s not-so-subtle attempts at promoting engagement over presenting the content fill me with rage. I want my tools to fade into the background.
- varun_ch 3y agoThis is really cool! The filename on certain Amazon 404 pages (eg. https://www.amazon.co.jp/404 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-29013 https://www.davebellous.com/2006/09/25/what-the/#comment-290...
- 13of40 3y ago"Call me paranoid but finding '/*' inside this comment makes me suspicious" That, Sir, is none of your business.
- Wowfunhappy 3y ago...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.
- duskwuff 3y agoYou're probably looking for "#if 0" / "#endif".
- TillE 3y agoYeah 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.
- Karellen 3y agoFWIW, replacing comments with whitespace is also done by the preprocessor.
- billforsternz 3y agoThe fact that you can't do this with new fangled languages is one of the reasons I don't use new fangled languages
- zzo38computer 3y agoThat and other things I dislike about many of the new fangled languages.
- Veserv 3y agoPrevious discussion: https://news.ycombinator.com/item?id=30238928 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 https://en.m.wikipedia.org/wiki/Green_Hills_Software [2] https://en.m.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop https://en.m.wikipedia.org/wiki/Macintosh_Programmer%27s_Wor... [3] https://web.archive.org/web/20140528005901/http://lists.apple.com/archives/MPW-Dev/2005/May/msg00003.html https://web.archive.org/web/20140528005901/http://lists.appl...
- deleted 3y ago[deleted]
- mistrial9 3y agothere were also MetroWerks bindings for MPW, long ago, but Apple killed it with fire
- khiqxj 3y ago[flagged]
- smoldesu 3y agoEven in 2006, people knew provoking Apple's ire was a dangerous game.
- khiqxj 3y agoyou cant sue someone for writing down what error messages that product can produce. you cant sue someone for reverse engineering their product (it has to have been done for an actual purpose like cracking or copying). you also cant sue someone for so happening to take teh shortcut of reverse engineering to obtain what they could have got just from using the product.
- mkovach 3y ago"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 3y agoNot much of a C programmer, what's the context around void* being a big deal?
- zer8k 3y agoVoid 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 3y agoIt really should be specified to specifically summon nasal demons, IMO.
- tyg13 3y agoYou'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 3y agoYes 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.
- zabzonk 3y agoMy 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.
- rickreynoldssf 3y agoI 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 3y agoIn 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!
- AnonC 3y ago> "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 3y agoI 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 3y agoThe soldered-in SSD is worse, though. The SSD WILL wear out, so then you get to throw away your Mac?
- xp84 3y agoJust like AirPods and AirPods Pro when their 7 cents worth of batteries die! A perfect system.
- 3y ago
- II2II 3y agoTangential 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 3y agoHm. Sounds like Plan 9.
- cschmidt 3y agoI think it was just the enter key to execute the selected text.
- II2II 3y agoYou'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 3y agoYes 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
- bemusedthrow75 3y ago"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.
- hulitu 3y agoMuch better than gcc's "Redefinition of ..." or "Static declaration follows non-static"
- tom_ 3y ago> "...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.
- OnlyMortal 3y agoI 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.
- d3psi 3y agoalright, 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.
- skipkey 3y agoThe 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 3y agoI learned to program on various dBase languages. That Clipper 5 preprocessor was quite the thing! It reminds me of https://research.swtch.com/shmacro 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 https://github.com/harbour/core/blob/master/tests/ntx.prg , and https://github.com/harbour/core/blob/master/include/std.ch https://github.com/harbour/core/blob/master/include/std.ch is an open-source reimplementation of Clipper's preprocessor definitions).
- monitron 3y agoI’m so curious, what could a Ford Maverick error possibly signify?
- skipkey 3y agoI’m honestly not sure. I met a couple of the developers at a convention a few years later, and found out the carnage one was where a stack of tokens from the tokenizer was unexpectedly deleted, but we didn’t talk about the other one. I suspect someone probably owned a Maverick that was buggy tho, or didn’t run.
- vincent-manis 3y agoMy 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.
- arnoldjm 3y agoI recall from 1965 getting an error message message something like this from the Fortran complier on a Univac 1107 system after receiving too many error messages: "Do not attempt to learn Fortran using Monte Carlo method. Buy a manual in the user office."
- nigwil_ 3y agoMPW had an interesting About box animation too. I recorded this back in 2011 using vMac emulator. https://www.youtube.com/watch?v=aJn3qxK9Br0 https://www.youtube.com/watch?v=aJn3qxK9Br0
- bondolo 3y agoI used this compiler for years and eventually came to be able to “decompile” the 68k object code it produced back to C code in my head on the fly unless the function was too large. Using MacNosy I could rebuild the C source for an app in usually only a couple of hours. I had a script that converted a MacNosy file of an app into an assembler file and rsrc file and I could translate functions to C one at a time while having a buildable app equivalent to the original. I originally used the tools for hacking games but sometimes used it to fix bugs. The MPW C compiler code generation was so predictable in part because of the symmetry of the 68k instruction set. They wrote a simple compiler and it worked. For the most part effort was spent elsewhere. Since you could reasonably predict what code would be generated if you were unhappy with the code generation you fixed the source. I like that the javac compiler has a similar ethos, With similar effect. Once you know the patterns to use you can generate fairly close to optimal byte code.