- Une page qui rassemble des messages d’erreur du compilateur C MPW d’Apple, présentés comme de véritables extraits obtenus en décompilant les ressources String du compilateur
- Au lieu de diagnostics de compilation ordinaires, ils transmettent les règles ANSI C, les contraintes de type et les erreurs de syntaxe avec des formulations mêlant blague et satire
- Les exemples incluent des erreurs du langage C concernant la longueur des littéraux de chaîne, les labels à l’intérieur d’un
switch, l’emplacement detypedef, la combinaisonvolatile/registerou encore la modification d’une constante - Certains messages visent directement des situations de compilation précises, comme la manipulation de
void *, le transtypage devoid, la redéfinition de struct, ou des erreurs impliquantgotoet l’initialisation de variables automatiques - Le compilateur pèse 324 KB ; il est ajouté que la liste publiée n’est peut-être qu’un extrait et que la question du droit d’auteur n’est pas claire
Recueil de messages d’erreur du compilateur C MPW
- Une page qui énumère certains messages d’erreur produits par le compilateur C MPW d’Apple
- Les messages sont présentés comme de véritables sorties, obtenues en décompilant les ressources String du compilateur
- Comme le compilateur pèse 324 KB, la liste n’est probablement pas exhaustive mais seulement un extrait
- Il est précisé que la question du droit d’auteur n’est pas certaine
Exemples de vrais diagnostics qui ressemblent à des blagues
-
Messages qui tordent la syntaxe C et la norme ANSI
- Limite de longueur des littéraux de chaîne :
"String literal too long (I let you have 512 characters, that's 3 more than ANSI said I should)"
- Erreur indiquant qu’il ne doit y avoir que des labels
caseoudefaultdans une instructionswitch:"...And the lord said, 'lo, there shall only be case or default labels inside a switch statement'"
- Cas où un nom
typedefapparaît de façon inattendue :"a typedef name was a complete surprise to me at this point in your program"
- Message signalant, en citant une clause de l’ANSI C, que la cible d’un cast doit être de type scalaire :
"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)"
- Limite de longueur des littéraux de chaîne :
-
Erreurs liées aux types et aux déclarations
- Message indiquant que
volatileetregisterne peuvent pas être utilisés ensemble :"'Volatile' and 'Register' are not miscible"
- Formulation satirique pour dire qu’on ne peut pas modifier une constante :
"You can't modify a constant, float upstream, win an argument with the IRS, or satisfy this compiler"
- Cas où l’on tente de redéfinir une struct déjà définie :
"This struct already has a perfectly good definition"
- Restriction de cast liée à
void:"Can't cast a void type to type void (because the ANSI spec. says so, that's why)"
- Message indiquant qu’on ne peut pas manipuler
void *n’importe comment :"can't go mucking with a 'void *'"
- Message indiquant que
-
Formulations d’erreur courtes ou exagérées
- Erreur brève et directe :
"Huh ?"
- Cas où une fonction déjà traitée réapparaît :
"we already did this function"
- Long message d’erreur sur un
gotovenant de l’extérieur du bloc, une variable automatique avec initialiseur, et une fenêtre trop étroite pour tout afficher :"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"
- Cas où
/*est trouvé à l’intérieur d’un commentaire :"Call me paranoid but finding '/*' inside this comment makes me suspicious"
- Cas où il y a trop d’erreurs sur une seule ligne :
"Too many errors on one line (make fewer)"
- Erreur fatale de heap quand la table des symboles est pleine :
"Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer"
- Erreur brève et directe :
1 commentaires
Commentaires sur Hacker News
L’époque où il y avait ce genre d’espièglerie dans l’informatique me manque
Quand j’étais chez Amazon, mon manager m’avait raconté qu’autrefois, en mettant à jour la page 404, il avait scanné un dessin de chat fait par sa fille et l’avait mis dans le corps de la page. Quand je suis arrivé en 2009, cette image était encore là, mais à un moment quelqu’un a dû s’en apercevoir et la remplacer par une photo de chien issue d’une banque d’images. Pourtant, le nom de l’asset était toujours
kayli-kitty.jpg, puis plus tard il a de nouveau été remplacé par des photos tournantes, et les traces de l’original ont disparuJ’ai aussi retrouvé un commentaire de blog à ce sujet : https://www.davebellous.com/2006/09/25/what-the/#comment-290...
Il semble qu’Amazon ait introduit sa page d’erreur actuelle avec une grande image de chien vers juin 2016 : https://web.archive.org/web/20160612232820/http://www.amazon...
www.amazon.comet regardez tout de suite le source :)Plus sérieusement, je me demande si ce serait possible, même si le tuteur avait donné son accord à l’époque
« Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer » : ça rappelle l’époque où, même après avoir acheté un ordinateur, on pouvait encore acheter une mise à niveau de RAM
Aujourd’hui, ce serait plutôt : « Symbol table full - fatal heap error; please go buy a new Mac with more RAM »
Les systèmes d’exploitation modernes prennent tous en charge le swapping, donc la compilation continue, mais beaucoup plus lentement. Sur un ordinateur moderne, pour être réellement « à court de mémoire », il faut remplir à la fois la RAM et le disque
node_modulesmoyen« a typedef name was a complete surprise to me at this point in your program »
J’aimais l’époque où il existait des messages d’erreur de compilateur amusants. J’en ai vu un jour un comme celui-ci dans le compilateur d’un fournisseur : « No! But they'll only let me warn you. Danger Will Robinson! Danger! »
Il y avait aussi : « Really! If you are fussing around with void *, just go home or at least back to your editor! ». Je crois que le responsable IT continuait à utiliser ce fournisseur à cause de ce message. Le SDK était moyen, mais c’était drôle
void*était-il un si gros problème ?J’ai programmé sur le MacOS d’origine dès que cela a été possible. Je me souviens de beaucoup de ces messages d’erreur. En particulier : « Too many errors on one line (make fewer) »
Je me souviens aussi des builds qui prenaient 45 minutes dès qu’un fichier d’en-tête changeait
Mon plus gros XCMD contenait les trois langages, et MPW le liait sans broncher ; il était aussi facile d’automatiser des projets avec de petits blocs de code à coller dans un seul fichier. Je me souviens avoir franchement ri à chaque apparition d’un de ces rares messages d’erreur. Bravo à la personne qui les a écrits
Après avoir utilisé ce compilateur pendant quelques années, j’ai fini par pouvoir « décompiler » mentalement à la volée le code objet 68k généré en code C, tant que la fonction n’était pas trop grosse
Avec MacNosy, on pouvait généralement reconstituer les sources C d’une app en quelques heures. J’avais un script qui transformait le fichier MacNosy d’une app en fichiers assembleur et
rsrc, puis je pouvais convertir les fonctions une par une en C tout en conservant une app compilable équivalente à l’original. Au début, je l’utilisais pour hacker des jeux, mais parfois aussi pour corriger des bugsSi la génération de code du compilateur MPW C était aussi prévisible, c’était en partie grâce à la symétrie du jeu d’instructions 68k. Ils ont fait un compilateur simple, et ça fonctionnait bien. L’essentiel des efforts allait ailleurs. Comme on pouvait prévoir assez précisément le code qui sortirait, si la génération ne plaisait pas, il suffisait de modifier le source. J’aime aussi le fait que le compilateur
javacait une philosophie similaire. Une fois qu’on connaît les motifs, on peut produire un bytecode presque optimalLe compilateur Glockenspiel C++ utilisé dans une entreprise de formation au début des années 90 était dérivé de cfront, et mon message d’erreur de syntaxe préféré était simplement « core dumped »
C’était assez embarrassant à expliquer, dans le cadre d’un cours payant, à des stagiaires qui avaient déjà du mal avec C++ lui-même
« Call me paranoid but finding '/*' inside this comment makes me suspicious » : ce n’est pas à vous de vous en soucier, monsieur le compilateur
/*apparaît à l’intérieur d’un/*, il faudrait alors deux*/pour terminer, par exempleEn réalité, c’est peut-être une idée horrible, mais il y a pas mal de situations où cela m’aurait fait gagner du temps
C’est un peu à côté du contenu de la page, mais j’aimais vraiment la manière dont de nombreux utilitaires MPW généraient leurs sorties, y compris les messages d’erreur, sous forme de commandes
Comme le terminal était un buffer d’éditeur, on pouvait remonter le curseur sur la ligne concernée, ou cliquer dessus, puis appuyer sur quelque chose comme
cmd-enterpour ouvrir le fichier associé« a typedef name was a complete surprise to me at this point in your program »
J’ai vu cette liste un nombre incalculable de fois, et pourtant ce message me fait toujours éclater de rire
Discussion précédente : https://news.ycombinator.com/item?id=30238928
Pour ajouter un peu de contexte, le compilateur MPW C qui a produit ces messages n’a en fait pas été développé en interne par Apple, mais réalisé sous contrat par Green Hills Software[1]. C’est indiqué aussi sur la page Wikipedia[2] et dans sa source[3] ; amusant, cette source est précisément ce sujet
[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...