- Eine Seite, die Fehlermeldungen des MPW-C-Compilers von Apple sammelt; es heißt, es handle sich um echte Auszüge, die durch Dekompilieren der String-Ressourcen des Compilers gewonnen wurden
- Statt gewöhnlicher Compilerdiagnosen vermitteln Sätze mit Witz und Satire Verstöße gegen den ANSI-C-Standard, Typbeschränkungen und Syntaxfehler
- Die Beispiele umfassen C-Sprachfehler wie die Länge von String-Literalen, Labels innerhalb von
switch, die Position vontypedef, die Kombination vonvolatile/registerund das Verändern von Konstanten - Auch bestimmte Kompiliersituationen werden direkt aufs Korn genommen, etwa Fehler rund um die Behandlung von
void *, das Casten vonvoid, die Neudefinition vonstructsowiegotoin Verbindung mit der Initialisierung automatischer Variablen - Der Compiler ist 324 KB groß; außerdem wird angemerkt, dass die veröffentlichte Liste möglicherweise nur Auszüge enthält und die Urheberrechtslage nicht ganz klar ist
Sammlung von MPW-C-Compiler-Fehlermeldungen
- Eine Seite, die einige der vom MPW-C-Compiler von Apple erzeugten Fehlermeldungen auflistet
- Die Meldungen werden als echte Ausgaben vorgestellt; laut Beschreibung wurden sie durch Dekompilieren der String-Ressourcen des Compilers gewonnen
- Da der Compiler 324 KB groß ist, könnte die Liste eher ein Auszug als eine vollständige Sammlung sein
- Zur Urheberrechtsfrage wird gesagt, dass man sich nicht sicher sei
Beispiele für echte Diagnosen, die wie Witze wirken
-
Meldungen, die C-Syntax und den ANSI-Standard verdrehen
- Begrenzung der String-Literal-Länge:
"String literal too long (I let you have 512 characters, that's 3 more than ANSI said I should)"
- Fehlermeldung, dass innerhalb einer
switch-Anweisung nurcase- oderdefault-Labels stehen dürfen:"...And the lord said, 'lo, there shall only be case or default labels inside a switch statement'"
- Situation, in der unerwartet ein
typedef-Name auftaucht:"a typedef name was a complete surprise to me at this point in your program"
- Eine Meldung, die unter Verweis auf eine ANSI-C-Klausel darauf hinweist, dass das Ziel eines Casts skalar sein muss:
"type in (cast) must be scalar; ANSI 3.3.4; page 39, lines 10-11 (I know you don't care, I'm just trying to annoy you)"
- Begrenzung der String-Literal-Länge:
-
Fehler rund um Typen und Deklarationen
- Meldung, dass
volatileundregisternicht zusammen verwendet werden können:"'Volatile' and 'Register' are not miscible"
- Satirische Formulierung dafür, dass Konstanten nicht verändert werden können:
"You can't modify a constant, float upstream, win an argument with the IRS, or satisfy this compiler"
- Situation, in der ein bereits definierter
structerneut definiert werden soll:"This struct already has a perfectly good definition"
- Cast-Beschränkung im Zusammenhang mit
void:"Can't cast a void type to type void (because the ANSI spec. says so, that's why)"
- Meldung, dass man nicht beliebig mit
void *hantieren darf:"can't go mucking with a 'void *'"
- Meldung, dass
-
Kurze oder übertrieben formulierte Fehlermeldungen
- Kurze, direkte Fehlermeldung:
"Huh ?"
- Situation, in der eine bereits bearbeitete Funktion erneut auftaucht:
"we already did this function"
- Lange Fehlermeldung über ein
gotovon außerhalb des Blocks, eine automatische Variable mit Initializer und ein zu schmales Fenster auf einmal:"This label is the target of a goto from outside of the block containing this label AND this block has an automatic variable with an initializer AND your window wasn't wide enough to read this whole error message"
- Situation, in der innerhalb eines Kommentars
/*gefunden wurde:"Call me paranoid but finding '/*' inside this comment makes me suspicious"
- Situation mit zu vielen Fehlern in einer Zeile:
"Too many errors on one line (make fewer)"
- Fataler Heap-Fehler wegen voller Symboltabelle:
"Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer"
- Kurze, direkte Fehlermeldung:
1 Kommentare
Hacker-News-Kommentare
Ich vermisse die Zeiten, in denen Computing noch diese Verspieltheit hatte
Als ich bei Amazon war, erzählte mein Manager, dass er früher einmal die 404-Seite aktualisiert und eine von seiner Tochter gezeichnete Katze eingescannt und als Seiteninhalt eingefügt hatte. Als ich 2009 anfing, war dieses Bild noch da, aber irgendwann muss es jemand bemerkt und durch ein Stockfoto eines Hundes ersetzt haben. Der Asset-Name war trotzdem weiterhin
kayli-kitty.jpg, und später wurde es wieder durch rotierende Fotos ersetzt, wodurch die Spuren des Originals verschwandenIch habe auch einen passenden Blog-Kommentar gefunden: https://www.davebellous.com/2006/09/25/what-the/#comment-290...
Amazon scheint die aktuelle Fehlerseite mit dem großen Hundebild etwa im Juni 2016 eingeführt zu haben: https://web.archive.org/web/20160612232820/http://www.amazon...
www.amazon.comund schau dir direkt den Quelltext an :)Ernsthaft gefragt: Wäre so etwas möglich, selbst wenn ein Erziehungsberechtigter damals zugestimmt hat?
„Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer“ – das erinnert an die alten Zeiten, als man nach dem Kauf eines Computers noch ein RAM-Upgrade kaufen konnte
Heute hieße es wohl: „Symbol table full - fatal heap error; please go buy a new Mac with more RAM“
Moderne Betriebssysteme unterstützen alle Swapping, also läuft die Kompilierung weiter, wird nur deutlich langsamer. Um auf modernen Computern wirklich „zu wenig Speicher“ zu haben, muss man sowohl RAM als auch Festplatte füllen
node_modulesaufnehmen kann„a typedef name was a complete surprise to me at this point in your program“
Ich mochte die Zeiten, in denen es lustige Compiler-Fehlermeldungen gab. Früher habe ich bei einem Compiler eines Herstellers einmal diese Meldung gesehen: „No! But they'll only let me warn you. Danger Will Robinson! Danger!“
Außerdem gab es noch: „Really! If you are fussing around with void *, just go home or at least back to your editor!“ Ich glaube, der IT-Manager blieb wegen dieser Meldung bei diesem Anbieter. Das SDK war nur so lala, aber es hatte Unterhaltungswert
void*so ein großes Problem warIch habe, sobald es möglich war, auf dem ursprünglichen MacOS programmiert. An viele dieser Fehlermeldungen erinnere ich mich noch. Besonders an „Too many errors on one line (make fewer)“
Ich erinnere mich auch daran, dass ein Build 45 Minuten dauerte, wenn sich eine einzige Header-Datei änderte
Mein größtes XCMD enthielt alle drei Sprachen, und MPW linkte das völlig problemlos zusammen. Auch Projekte mit kleinen Codeblöcken, die in eine Datei eingefügt werden mussten, ließen sich leicht automatisieren. Ich erinnere mich, dass ich bei jeder seltenen Fehlermeldung laut lachen musste. An die Macher: gut gemacht
Nachdem ich diesen Compiler jahrelang benutzt hatte, konnte ich den erzeugten 68k-Objektcode, solange die Funktion nicht zu groß war, im Kopf spontan in C-Code „dekompilieren“
Mit MacNosy konnte man den C-Quellcode einer App meist innerhalb weniger Stunden rekonstruieren. Ich hatte ein Skript, das die MacNosy-Datei einer App in eine Assembler-Datei und eine
rsrc-Datei umwandelte, und konnte Funktionen eine nach der anderen nach C übertragen, während die App weiterhin äquivalent zum Original baubar blieb. Anfangs nutzte ich das zum Hacken von Spielen, gelegentlich aber auch für BugfixesDass die Codegenerierung des MPW-C-Compilers so vorhersehbar war, lag teilweise an der Symmetrie des 68k-Befehlssatzes. Man baute einen einfachen Compiler, und der funktionierte gut. Der Großteil der Arbeit floss in andere Bereiche. Da man ziemlich genau vorhersagen konnte, welcher Code herauskommen würde, konnte man den Quellcode ändern, wenn einem die Codegenerierung nicht gefiel. Mir gefällt, dass der
javac-Compiler eine ähnliche Philosophie hat. Wenn man die Muster kennt, kann man nahezu optimalen Bytecode erzeugenDer Glockenspiel-C++-Compiler, der Anfang der 90er bei einem Bildungsunternehmen eingesetzt wurde, war von cfront abgeleitet, und meine liebste Syntaxfehlermeldung war schlicht „core dumped“
Das in einem bezahlten Kurs Teilnehmenden zu erklären, die ohnehin schon mit C++ selbst zu kämpfen hatten, war ziemlich unangenehm
„Call me paranoid but finding '/*' inside this comment makes me suspicious“ — darum sollten Sie sich nicht kümmern müssen
/*innerhalb von/*dazu führt, dass zum Beenden zweimal*/nötig istIn der Praxis wäre das vielleicht eine schreckliche Idee, aber es gab ziemlich viele Situationen, in denen es Zeit gespart hätte
Etwas abseits des Inhalts der Seite, aber mir gefiel sehr, wie viele MPW-Utilities ihre Ausgabe, einschließlich Fehlermeldungen, in Befehlsform erzeugten
Weil das Terminal ein Editor-Buffer war, konnte man den Cursor auf die entsprechende Zeile setzen oder sie anklicken und dann etwa
cmd-enterdrücken, um die betreffende Datei zu öffnen„a typedef name was a complete surprise to me at this point in your program“
Ich habe diese Liste unzählige Male gesehen, aber diese Meldung bringt mich jedes Mal laut zum Lachen
Frühere Diskussion: https://news.ycombinator.com/item?id=30238928
Als Kontext: Der MPW-C-Compiler, der diese Meldungen erzeugte, war tatsächlich keine interne Apple-Entwicklung, sondern wurde von Green Hills Software[1] im Auftrag erstellt. Das steht auch auf der Wikipedia-Seite[2] und in deren Quelle[3]; interessanterweise ist diese Quelle selbst genau dieses Thema
[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...